Dela via


Så här aktiverar och använder du pgvector i Azure Database for PostgreSQL – flexibel server

GÄLLER FÖR: Azure Database for PostgreSQL – flexibel server

Tillägget pgvector lägger till en vektorlikhetssökning med öppen källkod till PostgreSQL.

Den här artikeln introducerar oss för extra funktioner som aktiveras av pgvector. Den beskriver begreppen vektorlikhet och inbäddningar och ger vägledning om hur du aktiverar pgvector tillägget. Vi lär oss mer om hur du skapar, lagrar och frågar vektorerna. Du kanske också vill referera till projektets officiella README .

Aktivera tillägg

Innan du kan aktivera pgvector på din flexibla Azure Database for PostgreSQL-serverinstans måste du lägga till den i listan med tillåtna värden enligt beskrivningen i hur du använder PostgreSQL-tillägg och kontrollera om det har lagts till korrekt genom att köra SHOW azure.extensions;.

Viktigt!

Observera att även om alla PostgreSQL-communityn tenderar att referera till det här tillägget som pgvector, är namnet på binärfilen och själva tillägget helt enkelt vector. Tänk på det, eftersom det är det namn som du måste använda för att tillåta listan eller för att skapa det på valfri databas via kommandot CREATE EXTENSION.

Sedan kan du installera tillägget genom att ansluta till måldatabasen och köra kommandot CREATE EXTENSION . Du måste upprepa kommandot separat för varje databas som du vill att tillägget ska vara tillgängligt i.

CREATE EXTENSION vector;

Kommentar

Om du vill ta bort tillägget från den anslutna databasen använder du DROP EXTENSION vector;.

Begrepp

Vektorlikhet

Vektorlikhet är en metod som används för att mäta hur lika två objekt är genom att representera dem som vektorer, som är talserier. Vektorer används ofta för att representera datapunkter, där varje element i vektorn representerar en funktion eller ett attribut för datapunkten.

Vektorlikhet beräknas ofta med hjälp av avståndsmått, till exempel Euclidean distance eller cosine likhet. Euklidiska avstånd mäter det räta avståndet mellan två vektorer i det n-dimensionella utrymmet, medan cosinuslikhet mäter vinkelns cosinus mellan två vektorer. Värdena för likhetsmått varierar vanligtvis mellan 0 och 1, med higher värden som anger större likhet mellan vektorerna.

Vektorlikhet används ofta i olika program, till exempel rekommendationssystem, textklassificering, bildigenkänning och klustring. I rekommendationssystem kan till exempel vektorlikhet användas för att identifiera liknande objekt baserat på användarens inställningar. I textklassificering kan vektorlikhet användas för att fastställa likheten mellan två dokument eller meningar baserat på deras vektorrepresentationer.

Inbäddningar

En inbäddning är en metod för att utvärdera "relaterade" text, bilder, videor eller andra typer av information. Utvärderingen gör det möjligt för maskininlärningsmodeller att effektivt identifiera relationer och likheter mellan data, vilket gör det möjligt för algoritmer att identifiera mönster och göra korrekta förutsägelser. I en attitydanalysaktivitet kan till exempel ord med liknande inbäddningar förväntas ha liknande attitydpoäng.

Komma igång

Skapa en tabell tblvector med en embedding kolumn av typen vector(3) som representerar en tredimensionell vektor.

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

När du har genererat en inbäddning med hjälp av en tjänst som OpenAI API kan du lagra den resulterande vektorn i databasen. Definiera en vektor som vector(3) anger [x,y,z] coordinates i tredimensionellt plan. Kommandot infogar fem nya rader i tblvector tabellen med de angivna inbäddningarna.

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]');

Med hjälp av -instruktionen INSERT INTO ... ON CONFLICT kan du ange en alternativ åtgärd, till exempel att uppdatera poster som matchar kriterierna. Det gör att du kan hantera potentiella konflikter på ett effektivare och effektivare sätt.

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

Kommandot DELETE tar bort rader från en angiven tabell baserat på de villkor som anges i WHERE-satsen. När WHERE-satsen inte finns tas alla rader i tabellen bort.

DELETE FROM tblvector WHERE id = 1;

Om du vill hämta vektorer och beräkna likheter använder du SELECT instruktioner och inbyggda vektoroperatorer. Frågan beräknar till exempel euklidiska avståndet (L2-avståndet) mellan den angivna vektorn och de vektorer som lagras i tblvector tabellen, sorterar resultatet efter det beräknade avståndet och returnerar de närmaste fem mest liknande objekten.

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

Frågan använder operatorn "<->", som är den "avståndsoperator" som används för att beräkna avståndet mellan två vektorer i ett flerdimensionellt utrymme. Frågan returnerar alla rader med avståndet mindre än 6 från vektorn [3,1,2].

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

Kommandot hämtar det genomsnittliga värdet för kolumnen "inbäddning" från tabellen "tblvector". Om kolumnen "inbäddning" till exempel innehåller ordinbäddningar för en språkmodell kan det genomsnittliga värdet för dessa inbäddningar användas för att representera hela meningen eller dokumentet.

SELECT AVG(embedding) FROM tblvector;

Vektoroperatorer

pgvector introducerar sex nya operatorer som kan användas på vektorer:

Operatör beskrivning
+ elementmässigt tillägg
- elementmässigt subtraktion
* elementmässigt multiplikation
<-> Euklidiska avstånd
<#> negativ inre produkt
<=> cosininavstånd

Vektorfunktioner

cosine_distance

Beräknar cosinéavståndet mellan två vektorer.

cosine_distance(vector, vector)

Argument

vector

Först vector.

vector

Andra vector.

Returtyp

double precision avstånd mellan de två angivna vektorerna.

inner_product

Beräknar den inre produkten av två vektorer.

inner_product(vector, vector)

Argument

vector

Först vector.

vector

Andra vector

Returtyp

double precision som inre produkt av de två vektorerna.

l2_distance

Beräknar euklidiska avståndet (även kallat L2) mellan två vektorer.

l2_distance(vector, vector)

Argument

vector

Först vector.

vector

Andra vector

Returtyp

double precision som euklidiska avståndet mellan de två vektorerna.

l1_distance

Beräknar taxicabavståndet (även kallat L1) mellan två vektorer.

l1_distance(vector, vector)

Argument

vector

Först vector.

vector

Andra vector

Returtyp

double precision som taxicabavståndet mellan de två vektorerna.

vector_dims(vector)

Returnerar dimensionerna för en viss vektor.

Argument

vector

En vector.

Returtyp

integer representerar antalet dimensioner för den angivna vektorn.

vector_norms(vector)

Beräknar euklidiska normen för en viss vektor.

Argument

vector

En vector.

Returtyp

double precision som representerar den givna vektorns euklidiska norm.

Vektoraggregat

AVG

Beräknar medelvärdet av bearbetade vektorer.

Argument

vector

En vector.

Returtyp

vector representerar medelvärdet av bearbetade vektorer.

SUM

Argument

vector

En vector.

Returtyp

vector representerar summan av bearbetade vektorer.

Nästa steg

Läs mer om prestanda, indexering och begränsningar med hjälp av pgvector.