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
l'istanza del server flessibile 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;
.
È quindi possibile installare l'estensione connettendosi al database di destinazione ed eseguendo il comando CREATE EXTENSION . È necessario ripetere il comando separatamente per ogni database in cui si vuole 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 in cui due elementi sono simili rappresentandoli come vettori, ovvero serie di numeri. I vettori vengono spesso usati per rappresentare i punti dati, in cui ogni elemento del vettore rappresenta una caratteristica o un attributo del punto dati.
La somiglianza dei vettori viene in genere calcolata usando metriche di distanza, ad esempio Euclidean distance
o cosine
somiglianza. La distanza euclidea misura la distanza retta tra due vettori nello spazio n-dimensionale, mentre la somiglianza del coseno misura il coseno dell'angolo tra due vettori. I valori delle metriche di somiglianza in genere variano tra 0
e 1
, con higher
valori che indicano una maggiore somiglianza tra i vettori.
La somiglianza dei vettori è ampiamente usata in varie applicazioni, ad esempio sistemi di raccomandazione, classificazione del testo, riconoscimento delle immagini e clustering. Nei sistemi di raccomandazione, 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 testo, immagini, video o altri tipi di informazioni. La valutazione consente ai modelli di Machine Learning di identificare in modo efficiente le relazioni e le analogie tra i dati, consentendo agli algoritmi di identificare i modelli ed eseguire stime accurate. Ad esempio, in un'attività di analisi del sentiment, le parole con incorporamenti simili potrebbero avere punteggi del sentiment simili.
Attività iniziali
Creare una tabella tblvector
con una embedding
colonna 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 come vector(3)
designato [x,y,z] coordinates
in un piano a tre dimensioni. Il comando inserisce cinque nuove righe nella tblvector
tabella 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 soddisfano i 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 DELETE
comando 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 SELECT
istruzioni e operatori vettoriali predefiniti. Ad esempio, la query calcola la distanza euclidea (distanza L2) tra il vettore specificato e i vettori archiviati nella tblvector
tabella, ordina i risultati in base alla distanza calcolata e restituisce i cinque elementi più simili più vicini.
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 la 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 il documento.
SELECT AVG(embedding) FROM tblvector;
Operatori vettoriali
pgvector
introduce sei nuovi operatori che possono essere usati su vettori:
Operatore | Descrizione |
---|---|
+ | addizione a livello di elemento |
- | sottrazione a livello di elemento |
* | moltiplicazione per 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
oggetto .
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
oggetto .
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
oggetto .
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
oggetto .
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
che 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
che rappresenta la norma euclidea del vettore specificato.
Aggregazioni vettoriali
AVG
Calcola la media dei vettori elaborati.
Argomenti
vector
Un oggetto vector
.
Tipo restituito
vector
che rappresenta la media dei vettori elaborati.
SUM
Argomenti
vector
Un oggetto vector
.
Tipo restituito
vector
che rappresenta la somma dei vettori elaborati.
Passaggi successivi
Altre informazioni sulle prestazioni, l'indicizzazione e le limitazioni con pgvector
.