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 vector
is. 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
.