Condividi tramite


Come abilitare e usare pgvector in Azure Cosmos DB for PostgreSQL

SI APPLICA A: Azure Cosmos DB for PostgreSQL (con tecnologia basata sull'estensione di database Citus per PostgreSQL)

L'estensione pgvector aggiunge una ricerca di somiglianza del vettore open source a PostgreSQL.

Questo articolo illustra le funzionalità aggiuntive abilitate da pgvector. Vengono illustrati i concetti di somiglianza vettoriale e incorporamenti e vengono fornite indicazioni su come abilitare l'estensione pgvector. Informazioni su come creare, archiviare ed eseguire query sui vettori. È anche possibile fare riferimento al file README ufficiale del progetto.

Abilitare l'estensione

Per poter usare le estensioni di PostgreSQL è prima necessario abilitarle nel database. Per abilitare l'estensione, eseguire il comando dallo strumento psql per caricare gli oggetti in pacchetto nel database.

SELECT CREATE_EXTENSION('vector');

Nota

Per disabilitare un'estensione, usare drop_extension()

Concetti

Somiglianza vettoriale

La somiglianza vettoriale è un metodo usato per misurare il modo il grado di somiglianza tra due oggetti rappresentandoli come vettori, ovvero serie di numeri. I vettori vengono spesso usati per rappresentare punti dati, in cui ogni elemento del vettore rappresenta una caratteristica o un attributo del punto dati.

La somiglianza vettoriale viene in genere calcolata usando metriche di distanza, ad esempio somiglianza Euclidean distance o cosine. La distanza euclidea misura la distanza retta tra due vettori nello spazio dimensionale n, mentre la somiglianza del coseno misura il coseno dell'angolo tra due vettori. In genere, i valori delle metriche di somiglianza variano tra 0 e 1, con valori higher che indicano una maggiore somiglianza tra i vettori.

La somiglianza vettoriale è ampiamente usata in varie applicazioni, ad esempio sistemi di elementi consigliati, classificazione del testo, riconoscimento delle immagini e clustering. Nei sistemi di elementi consigliati, ad esempio, la somiglianza vettoriale può essere usata per identificare elementi simili in base alle preferenze dell'utente. Nella classificazione del testo, la somiglianza del vettore può essere usata per determinare la somiglianza tra due documenti o frasi in base alle relative rappresentazioni vettoriali.

Incorporamenti

Un incorporamento è una tecnica di valutazione della "correlazione" di testi, immagini, video o altri tipi di informazioni. La valutazione consente ai modelli di Machine Learning di identificare in modo efficiente relazioni e analogie tra i dati, consentendo agli algoritmi di identificare i modelli ed eseguire stime accurate. Ad esempio, in un'attività di analisi valutazione, le parole con incorporamenti simili potrebbero avere punteggi di valutazione simili.

Introduzione

Creare una tabella tblvector con una colonna embedding di tipo vector(3) che rappresenta un vettore tridimensionale.

CREATE TABLE tblvector(
    id bigserial PRIMARY KEY,
    embedding vector(3)
    );

Dopo aver generato un incorporamento usando un servizio come l'API OpenAI, è possibile archiviare il vettore risultante nel database. Definizione di un vettore con vector(3) che designa [x,y,z] coordinates in un piano a tre dimensioni. Il comando inserisce cinque nuove righe nella tabella tblvector con gli incorporamenti forniti.

INSERT INTO tblvector (id, embedding) VALUES (1, '[1,2,3]'), (2, '[4,5,6]'), (3, '[5,4,6]'), (4, '[3,5,7]'), (5, '[7,8,9]');

Usando l'istruzione INSERT INTO ... ON CONFLICT, è possibile specificare un'azione alternativa, ad esempio l'aggiornamento di record che corrispondono ai criteri. Consente di gestire potenziali conflitti in modo più efficiente ed efficace.

INSERT INTO tblvector (id, embedding) VALUES (1, '[1,2,3]'), (2, '[4,5,6]')
ON CONFLICT (id) DO UPDATE SET embedding = EXCLUDED.embedding;

Il comando DELETE rimuove le righe da una tabella specificata in base alle condizioni specificate nella clausola WHERE. Quando la clausola WHERE non è presente, vengono eliminate tutte le righe della tabella.

DELETE FROM tblvector WHERE id = 1;

Per recuperare i vettori e calcolare la somiglianza, usare istruzioni SELECT e gli operatori vettoriali integrati. Ad esempio, la query calcola la distanza euclidea (distanza L2) tra il vettore specificato e i vettori archiviati nella tabella tblvector, ordina i risultati in base alla distanza calcolata e restituisce i cinque elementi più simili.

SELECT * FROM tblvector 
ORDER BY embedding <-> '[3,1,2]' 
LIMIT 5;

La query usa l'operatore "<->", ovvero l'operatore "distance" usato per calcolare la distanza tra due vettori in uno spazio multidimensionale. La query restituisce tutte le righe con distanza minore di 6 dal vettore [3,1,2].

SELECT * FROM tblvector WHERE embedding <-> '[3,1,2]' < 6;

Il comando recupera il valore medio della colonna "incorporamento" dalla tabella "tblvector". Ad esempio, se la colonna "incorporamento" contiene incorporamenti di parole per un modello linguistico, è possibile usare il valore medio di questi incorporamenti per rappresentare l'intera frase o documento.

SELECT AVG(embedding) FROM tblvector;

Operatori vettoriali

pgvector introduce sei nuovi operatori che possono essere usati su vettori:

Operator Descrizione
+ addizione a livello di elemento
- sottrazione a livello di elemento
* moltiplicazione a livello di elemento
<-> Distanza euclidea
<#> prodotto interno negativo
<=> distanza coseno

Funzioni vettoriali

cosine_distance

Calcola la distanza del coseno tra due vettori.

cosine_distance(vector, vector)

Argomenti

vector

Primo vector.

vector

Secondo vector.

Tipo restituito

double precision come distanza tra i due vettori forniti.

inner_product

Calcola il prodotto interno di due vettori.

inner_product(vector, vector)

Argomenti

vector

Primo vector.

vector

Secondo vector

Tipo restituito

double precision come prodotto interno dei due vettori.

l2_distance

Calcola la distanza euclidea (nota anche come L2) tra due vettori.

l2_distance(vector, vector)

Argomenti

vector

Primo vector.

vector

Secondo vector

Tipo restituito

double precision come distanza euclidea tra i due vettori.

l1_distance

Calcola la distanza taxicab (nota anche come L1) tra due vettori.

l1_distance(vector, vector)

Argomenti

vector

Primo vector.

vector

Secondo vector

Tipo restituito

double precision come distanza taxicab tra i due vettori.

vector_dims(vector)

Restituisce le dimensioni di un vettore specificato.

Argomenti

vector

Un oggetto vector.

Tipo restituito

integer rappresenta il numero di dimensioni del vettore specificato.

vector_norms(vector)

Calcola la norma euclidea di un determinato vettore.

Argomenti

vector

Un oggetto vector.

Tipo restituito

double precision rappresenta la norma euclidea del vettore specificato.

Aggregazione di vettori

AVG

Calcola la media dei vettori elaborati.

Argomenti

vector

Un oggetto vector.

Tipo restituito

vector rappresenta la media dei vettori elaborati.

SUM

Argomenti

vector

Un oggetto vector.

Tipo restituito

vector rappresenta la somma dei vettori elaborati.

Passaggi successivi

Ulteriori informazioni sulle prestazioni, l'indicizzazione e le limitazioni tramite pgvector.