Delen via


Inschakelen en gebruiken pgvector in Azure Cosmos DB for PostgreSQL

VAN TOEPASSING OP: Azure Cosmos DB for PostgreSQL (mogelijk gemaakt door de Citus-database-extensie naar PostgreSQL)

Met de pgvector extensie wordt een opensource vector-gelijkeniszoekopdracht toegevoegd aan PostgreSQL.

In dit artikel maakt u kennis met extra mogelijkheden die zijn ingeschakeld door pgvector. Het behandelt de concepten van vector-overeenkomsten en insluitingen en biedt richtlijnen voor het inschakelen van de pgvector extensie. We leren hoe u vectoren maakt, opslaat en opvraagt. U kunt ook verwijzen naar de officiële LEESMIJ van het project.

Extensie inschakelen

PostgreSQL-extensies moeten zijn ingeschakeld in uw database voordat u ze kunt gebruiken. Als u de extensie wilt inschakelen, voert u de opdracht uit vanuit het hulpprogramma psql om de verpakte objecten in uw database te laden.

SELECT CREATE_EXTENSION('vector');

Notitie

Een extensie uitschakelen drop_extension()

Concepten

Vector-gelijkenis

Vector-gelijkenis is een methode die wordt gebruikt om te meten hoe vergelijkbaar twee items zijn door ze als vectoren weer te geven, die een reeks getallen zijn. Vectoren worden vaak gebruikt om gegevenspunten weer te geven, waarbij elk element van de vector een functie of kenmerk van het gegevenspunt vertegenwoordigt.

Vector-gelijkenis wordt meestal berekend met behulp van metrische gegevens over afstand, zoals Euclidean distance of cosine overeenkomsten. Euclidische afstand meet de rechte lijnafstand tussen twee vectoren in de n-dimensionale ruimte, terwijl cosinus-gelijkenis de cosinus van de hoek tussen twee vectoren meet. De waarden van metrische overeenkomsten variëren meestal tussen 0 en 1, met higher waarden die een grotere gelijkenis tussen de vectoren aangeven.

Vector-gelijkenis wordt veel gebruikt in verschillende toepassingen, zoals aanbevelingssystemen, tekstclassificatie, afbeeldingsherkenning en clustering. In aanbevelingssystemen kan bijvoorbeeld vector vergelijkbaarheid worden gebruikt om vergelijkbare items te identificeren op basis van de voorkeuren van de gebruiker. In tekstclassificatie kan vector-gelijkenis worden gebruikt om de gelijkenis tussen twee documenten of zinnen te bepalen op basis van hun vectorweergaven.

Insluitingen

Een insluiting is een techniek voor het evalueren van 'verwantschap' van tekst, afbeeldingen, video's of andere soorten informatie. Met de evaluatie kunnen machine learning-modellen efficiënt de relaties en overeenkomsten tussen gegevens identificeren, zodat algoritmen patronen kunnen identificeren en nauwkeurige voorspellingen kunnen doen. In een sentimentanalysetaak kunnen bijvoorbeeld woorden met vergelijkbare insluitingen worden verwacht dat ze vergelijkbare gevoelsscores hebben.

Aan de slag

Maak een tabel tblvector met een embedding kolom van het type vector(3) die een driedimensionale vector vertegenwoordigt.

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

Nadat u een insluiting hebt gegenereerd met behulp van een service zoals de OpenAI-API, kunt u de resulterende vector opslaan in uw database. Een vector definiëren als vector(3) aangewezen in het vlak met drie dimensies [x,y,z] coordinates . Met de opdracht worden vijf nieuwe rijen in de tblvector tabel ingevoegd met de opgegeven insluitingen.

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

Met behulp van de INSERT INTO ... ON CONFLICT instructie kunt u een alternatieve actie opgeven, zoals het bijwerken van records die voldoen aan de criteria. Hiermee kunt u potentiële conflicten op een efficiëntere en effectievere manier afhandelen.

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

Met DELETE de opdracht worden rijen uit een opgegeven tabel verwijderd op basis van de voorwaarden die zijn opgegeven in de WHERE-component. Wanneer de WHERE-component niet aanwezig is, worden alle rijen in de tabel verwijderd.

DELETE FROM tblvector WHERE id = 1;

Als u vectoren wilt ophalen en overeenkomsten wilt berekenen, gebruikt SELECT u instructies en de ingebouwde vectoroperators. De query berekent bijvoorbeeld de Euclidische afstand (L2-afstand) tussen de opgegeven vector en de vectoren die zijn opgeslagen in de tblvector tabel, sorteert de resultaten op de berekende afstand en retourneert de dichtstbijzijnde vijf meest vergelijkbare items.

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

De query maakt gebruik van de operator '<->', de 'afstandsoperator' die wordt gebruikt om de afstand tussen twee vectoren in een multidimensionale ruimte te berekenen. De query retourneert alle rijen met de afstand van minder dan 6 van de vector [3,1,2].

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

Met de opdracht wordt de gemiddelde waarde van de kolom 'insluiten' opgehaald uit de tabel 'tblvector'. Als de kolom 'insluiten' bijvoorbeeld woordafsluitingen voor een taalmodel bevat, kan de gemiddelde waarde van deze insluitingen worden gebruikt om de hele zin of het hele document weer te geven.

SELECT AVG(embedding) FROM tblvector;

Vectoroperators

pgvector introduceert zes nieuwe operators die op vectoren kunnen worden gebruikt:

Operator Beschrijving
+ elementgewijs optellen
- aftrekken van elementen
* elementgewijze vermenigvuldiging
<-> Euclidische afstand
<#> negatief binnenproduct
<=> cosinusafstand

Vectorfuncties

cosine_distance

Berekent de cosinusafstand tussen twee vectoren.

cosine_distance(vector, vector)

Argumenten

vector

Eerst vector.

vector

Ten tweede vector.

Retourtype

double precision als afstand tussen de twee verstrekte vectoren.

inner_product

Berekent het binnenste product van twee vectoren.

inner_product(vector, vector)

Argumenten

vector

Eerst vector.

vector

Tweede vector

Retourtype

double precision als binnenproduct van de twee vectoren.

l2_distance

Berekent de Euclidische afstand (ook wel L2 genoemd) tussen twee vectoren.

l2_distance(vector, vector)

Argumenten

vector

Eerst vector.

vector

Tweede vector

Retourtype

double precision als de Euclidische afstand tussen de twee vectoren.

l1_distance

Berekent de taxicabafstand (ook wel bekend als L1) tussen twee vectoren.

l1_distance(vector, vector)

Argumenten

vector

Eerst vector.

vector

Tweede vector

Retourtype

double precision als de taxicab afstand tussen de twee vectoren.

vector_dims(vector)

Retourneert de afmetingen van een bepaalde vector.

Argumenten

vector

A vector.

Retourtype

integer het aantal dimensies van de opgegeven vector aangeeft.

vector_norms(vector)

Berekent de Euclidean-norm van een bepaalde vector.

Argumenten

vector

A vector.

Retourtype

double precision die de Euclidische norm van de opgegeven vector vertegenwoordigt.

Vectoraggregaties

AVG

Berekent het gemiddelde van de verwerkte vectoren.

Argumenten

vector

A vector.

Retourtype

vector vertegenwoordigt het gemiddelde van verwerkte vectoren.

SUM

Argumenten

vector

A vector.

Retourtype

vector vertegenwoordigt de som van verwerkte vectoren.

Volgende stappen

Meer informatie over prestaties, indexering en beperkingen met behulp van pgvector.