Share via


Pgvector inschakelen en gebruiken in Azure Database for PostgreSQL - Flexible Server

VAN TOEPASSING OP: Azure Database for PostgreSQL - Flexibele server

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

Voordat u het exemplaar van uw flexibele Azure Database for PostgreSQL-server kunt inschakelen pgvector , moet u deze toevoegen aan uw acceptatielijst, zoals beschreven in het gebruik van PostgreSQL-extensies en controleren of deze correct is toegevoegd door uit te voeren SHOW azure.extensions;.

Belangrijk

U ziet dat hoewel alle PostgreSQL-community meestal naar deze extensie verwijst als pgvector, de naam van het binaire bestand en de extensie zelf gewoon vectoris. Denk hierbij aan de naam die u moet gebruiken om de lijst toe te staan of om deze op een database te maken via de opdracht CREATE EXTENSION.

Vervolgens kunt u de extensie installeren door verbinding te maken met uw doeldatabase en de opdracht CREATE EXTENSION uit te voeren. U moet de opdracht afzonderlijk herhalen voor elke database waarin u wilt dat de extensie beschikbaar is.

CREATE EXTENSION vector;

Notitie

Als u de extensie wilt verwijderen uit het momenteel verbonden databasegebruik DROP EXTENSION vector;.

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.