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
.