Come abilitare e usare pgvector in Database di Azure per PostgreSQL - Server flessibile
SI APPLICA A: Database di Azure per PostgreSQL - Server flessibile
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
Prima di poter abilitare pgvector
nell'istanza del server flessibile di Database di Azure per PostgreSQL, è necessario aggiungerla all'elenco di elementi consentiti come descritto in Come usare le estensioni PostgreSQL e verificare se sono state aggiunte correttamente eseguendo SHOW azure.extensions;
.
Importante
Si noti che anche se tutta la community postgreSQL tende a fare riferimento a questa estensione come pgvector, il nome del file binario e l'estensione stessa è semplicemente vector
. Tenere presente che questo è il nome che è necessario usare per consentire l'elenco o per crearlo in qualsiasi database tramite il comando CREA ESTENSIONE.
È quindi possibile installare l'estensione connettendosi al database di destinazione ed eseguendo il comando CREA ESTENSIONE. È necessario ripetere il comando separatamente per ogni database in cui si desidera che l'estensione sia disponibile.
CREATE EXTENSION vector;
Nota
Per rimuovere l'estensione dal database attualmente connesso, usare DROP EXTENSION vector;
.
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
.