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 vectoroggetto .

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 vectoroggetto .

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 vectoroggetto .

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 vectoroggetto .

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.