Freigeben über


Aktivieren und Verwenden von pgvector in Azure Database for PostgreSQL – Flexible Server

GILT FÜR: Azure Database for PostgreSQL – Flexibler Server

Mit der Erweiterung pgvector wird PostgreSQL eine Open-Source-Vektorähnlichkeitssuche hinzugefügt.

In diesem Artikel werden zusätzliche Funktionen vorgestellt, die durch pgvector aktiviert werden. Er behandelt die Konzepte von Vektorähnlichkeit und Einbettungen und bietet Anleitungen zum Aktivieren der pgvector Erweiterung. Sie erfahren, wie die Vektoren erstellt, gespeichert und abgefragt werden. Sie sollten zudem die offizielle Infodatei des Projekts anzeigen.

Aktivieren der Erweiterung

Bevor Sie pgvector auf Ihrer flexiblen Serverinstanz von Azure Database for PostgreSQL aktivieren können, müssen Sie den Dienst, wie in der Anleitung zur Verwendung von PostgreSQL-Erweiterungen beschrieben, Ihrer Positivliste hinzufügen und überprüfen, ob er korrekt hinzugefügt wurde, indem Sie SHOW azure.extensions; ausführen.

Wichtig

Obwohl alle PostgreSQL-Communitys diese Erweiterung meist als „pgvector“ bezeichnen, lautet der Name der Binärdatei und der Erweiterung selbst einfach vector. Dies ist wichtig, weil Sie diesen Namen verwenden müssen, um die Erweiterung auf die Positivliste zu setzen oder in einer Datenbank über den Befehl CREATE EXTENSION zu erstellen.

Anschließend können Sie die Erweiterung installieren, indem Sie eine Verbindung mit Ihrer Zieldatenbank herstellen und den Befehl CREATE EXTENSION ausführen. Sie müssen den Befehl separat für jede Datenbank wiederholen, in der die Erweiterung verfügbar sein soll.

CREATE EXTENSION vector;

Hinweis

Um die Erweiterung aus der derzeit verbundenen Datenbank zu entfernen, verwenden Sie DROP EXTENSION vector;.

Konzepte

Vektorähnlichkeit

Die Vektorähnlichkeit ist eine Methode, mit der gemessen wird, wie ähnlich zwei Elemente sind. Dazu werden sie als Vektoren dargestellt, bei denen es sich um Zahlenreihen handelt. Vektoren werden oft zur Darstellung von Datenpunkten verwendet, wobei jedes Element des Vektors ein Feature oder Attribut des Datenpunkts darstellt.

Die Vektorähnlichkeit wird häufig mithilfe von Entfernungsmetriken wie z. B. der Ähnlichkeit Euclidean distance oder cosine berechnet. Der euklidische Abstand misst den geraden Abstand zwischen zwei Vektoren im n-dimensionalen Raum, während die Kosinusähnlichkeit den Kosinus des Winkels zwischen zwei Vektoren misst. Die Werte von Ähnlichkeitsmetriken liegen normalerweise zwischen 0 und 1, wobei higher-Werte eine größere Ähnlichkeit zwischen den Vektoren angeben.

Die Vektorähnlichkeit wird oft in verschiedenen Anwendungen verwendet, z. B. Empfehlungssystemen, Textklassifizierung, Bilderkennung und Clustering. Beispielsweise kann die Vektorähnlichkeit in Empfehlungssystemen verwendet werden, um ähnliche Elemente basierend auf den Einstellungen der Benutzer*innen zu identifizieren. Bei der Textklassifizierung kann die Vektorähnlichkeit verwendet werden, um die Ähnlichkeit zwischen zwei Dokumenten oder Sätzen basierend auf deren Vektordarstellungen zu ermitteln.

Einbettungen

Eine Einbettung ist eine Technik zur Auswertung der „Verbundenheit“ von Text, Bildern, Videos oder anderen Arten von Informationen. Die Auswertung ermöglicht es Machine Learning-Modellen, die Beziehungen und Ähnlichkeiten zwischen Daten effizient zu identifizieren, sodass Algorithmen Muster identifizieren und genaue Vorhersagen treffen können. Beispielsweise könnte in einer Stimmungsanalyseaufgabe erwartet werden, dass es bei Wörtern mit ähnlichen Einbettungen ähnliche Stimmungsbewertungen gibt.

Erste Schritte

Erstellen Sie eine tblvector Tabelle mit einer embedding Spalte vom Typ vector(3) , die einen dreidimensionalen Vektor darstellt.

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

Nachdem Sie eine Einbettung mithilfe eines Diensts wie der OpenAI-API generiert haben, können Sie den resultierenden Vektor in Ihrer Datenbank speichern. Durch das Definieren eines Vektors als vector(3) wird [x,y,z] coordinates in der dreidimensionalen Ebene festgelegt. Der Befehl fügt fünf neue Zeilen mit den bereitgestellten Einbettungen in die tblvector Tabelle ein.

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

Mithilfe der Anweisung INSERT INTO ... ON CONFLICT können Sie eine alternative Aktion angeben, z. B. das Aktualisieren von Datensätzen, die den Kriterien entsprechen. Dadurch können Sie potenzielle Konflikte effizienter und effektiver behandeln.

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

Der Befehl DELETE entfernt Zeilen aus einer angegebenen Tabelle basierend auf den in der WHERE-Klausel angegebenen Bedingungen. Wenn die WHERE-Klausel nicht vorhanden ist, werden alle Zeilen in der Tabelle gelöscht.

DELETE FROM tblvector WHERE id = 1;

Verwenden Sie SELECT-Anweisungen und die integrierten Vektoroperatoren zum Abrufen von Vektoren und Berechnen der Ähnlichkeit. Beispielsweise berechnet die Abfrage den euklidischen Abstand (L2-Abstand) zwischen dem angegebenen Vektor und den in der tblvector Tabelle gespeicherten Vektoren, sortiert die Ergebnisse nach dem berechneten Abstand und gibt die nächstgelegenen fünf ähnlichsten Elemente zurück.

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

Die Abfrage verwendet den Operator „<->“, d. h. den „distance-Operator“, mit dem der Abstand zwischen zwei Vektoren in einem mehrdimensionalen Raum berechnet wird. Die Abfrage gibt alle Zeilen mit einem Abstand von weniger als „6“ aus dem Vektor [3,1,2] zurück.

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

Der Befehl ruft den Durchschnittswert der Spalte „embedding“ aus der „tblvector“-Tabelle ab. Wenn die Spalte „embedding“ beispielsweise Worteinbettungen für ein Sprachmodell enthält, könnte der Durchschnittswert dieser Einbettungen verwendet werden, um den ganzen Satz oder das gesamte Dokument darzustellen.

SELECT AVG(embedding) FROM tblvector;

Vektoroperatoren

pgvector führt sechs neue Operatoren ein, die für Vektoren verwendet werden können:

Operator Beschreibung
+ Elementweise Ergänzung
- Elementweise Subtraktion
* Elementweise Multiplikation
<-> Euklidischer Abstand
<#> negatives inneres Produkt
<=> Kosinusabstand

Vektorfunktionen

cosine_distance

Berechnet den Kosinus-Abstand zwischen zwei Vektoren.

cosine_distance(vector, vector)

Argumente

vector

Erster vector.

vector

Zweiter vector.

Rückgabetyp

double precision als Abstand zwischen den beiden bereitgestellten Vektoren.

inner_product

Berechnet das innere Produkt von zwei Vektoren.

inner_product(vector, vector)

Argumente

vector

Erster vector.

vector

Zweiter vector

Rückgabetyp

double precision als inneres Produkt der beiden Vektoren.

l2_distance

Berechnet den Euklidischen Abstand (auch als L2 bezeichnet) zwischen zwei Vektoren.

l2_distance(vector, vector)

Argumente

vector

Erster vector.

vector

Zweiter vector

Rückgabetyp

double precision als euklidischer Abstand zwischen den beiden Vektoren.

l1_distance

Berechnet den Taxicab-Abstand (auch als L1 bezeichnet) zwischen zwei Vektoren.

l1_distance(vector, vector)

Argumente

vector

Erster vector.

vector

Zweiter vector

Rückgabetyp

double precision als Taxicab-Abstand zwischen den beiden Vektoren.

vector_dims(vector)

Gibt die Dimensionen eines bestimmten Vektors zurück.

Argumente

vector

einen vector

Rückgabetyp

integer stellt die Anzahl der Dimensionen des angegebenen Vektors dar.

vector_norms(vector)

Berechnet die Euklidische Norm eines bestimmten Vektors.

Argumente

vector

einen vector

Rückgabetyp

double precision stellt die euklidische Norm des angegebenen Vektors dar.

Vektoraggregate

AVG

Berechnet den Mittelwert der verarbeiteten Vektoren.

Argumente

vector

einen vector

Rückgabetyp

vector stellt den Mittelwert der verarbeiteten Vektoren dar.

SUM

Argumente

vector

einen vector

Rückgabetyp

vector stellt die Summe der verarbeiteten Vektoren dar.

Teilen Sie Ihre Vorschläge und Fehler mit dem Azure Database for PostgreSQL-Produktteam.