Übersicht über Vektoren in der SQL-Datenbank-Engine
Gilt für: Azure SQL-Datenbank
Vektoren sind geordnete Arrays von Zahlen (in der Regel Gleitkommazahlen), die Informationen zu einigen Daten darstellen können. Beispielsweise kann ein Bild als Vektor aus Pixelwerten dargestellt werden, oder eine Textzeichenfolge kann als Vektor oder in Form von ASCII-Werten dargestellt werden. Der Prozess des Umwandelns von Daten in eine Vektor wird als Vektorisierung bezeichnet.
Einbettungen
Einbettungen sind Vektoren, die wichtige Merkmale von Daten darstellen. Einbettungen werden häufig mithilfe eines Deep Learning-Modells gelernt, und Machine Learning- und KI-Modelle nutzen sie als Features. Einbettungen können auch semantische Ähnlichkeiten zwischen ähnlichen Konzepten erfassen. Beispielsweise lässt sich beim Generieren von Einbettungen für die Wörter person
und human
erwarten, dass die Einbettungen (also die Vektordarstellungen) ähnliche Werte aufweisen, da die Wörter semantisch ähnlich sind.
Azure OpenAI bietet Modelle zum Erstellen von Einbettungen aus Textdaten. Der Dienst bricht Text in Token auf und generiert Einbettungen mithilfe von Modellen, die von OpenAI vorab trainiert wurden. Weitere Informationen finden Sie unter Erstellen von Einbettungen mit Azure OpenAI.
Sobald Einbettungen generiert wurden, können sie in einer SQL Server-Datenbank gespeichert werden. Auf diese Weise können Sie die Einbettungen zusammen mit den daten speichern, die sie darstellen, und Vektorsuchabfragen durchführen, um ähnliche Datenpunkte zu finden.
Vektorsuche
Die Vektorsuche bezieht sich auf den Prozess der Suche nach allen Vektoren in einem Dataset, die einem bestimmten Abfragevektor ähneln. Daher durchsucht ein Abfragevektor für das Wort human
das gesamte Dataset nach ähnlichen Vektoren und damit ähnlichen Wörtern: In diesem Beispiel sollte das Wort person
als enge Übereinstimmung gefunden werden. Diese Nähe oder Der Abstand wird mithilfe einer Entfernungsmetrik wie kosinusabstand gemessen. Die näheren Vektoren sind, desto ähnlicher sind sie.
SQL Server bietet integrierte Unterstützung für Vektoren über den Vektordatentyp . Vektoren werden in einem optimierten Binärformat gespeichert, werden jedoch als JSON-Arrays zur Vereinfachung verfügbar gemacht. Jedes Element des Vektors wird mit einem Gleitkommawert mit einfacher Genauigkeit (4 Byte) gespeichert. Zusammen mit dem Datentyp gibt es dedizierte Funktionen zum Arbeiten mit Vektoren. Beispielsweise ist es möglich, den Abstand zwischen zwei Vektoren mithilfe der VECTOR_DISTANCE
Funktion zu finden. Die Funktion gibt einen skalaren Wert mit dem Abstand zwischen zwei Vektoren basierend auf der angegebenen Entfernungsmetrik zurück.
Da Vektoren in der Regel als Arrays von Floats verwaltet werden, kann das Erstellen eines Vektors einfach ein JSON-Array in einen Vektordatentyp umwandeln. Mit dem folgenden Code wird beispielsweise ein Vektor aus einem JSON-Array erstellt:
SELECT CAST('[1.0, -0.2, 30]' AS VECTOR(3)) AS vector;
oder mit impliziter Umwandlung
DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT @v;
Gleiches gilt für die Konvertierung eines Vektors in ein JSON-Array:
DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT CAST(@v AS NVARCHAR(MAX)) AS vector;
Begrenzungen
In der aktuellen Vorschau-Umwandlung in und aus dem JSON-Datentyp wird noch nicht unterstützt. Die Problemumgehung besteht darin, zuerst von/in NVARCHAR(MAX) und dann in/von JSON zu konvertieren. So konvertieren Sie beispielsweise einen Vektor in einen JSON-Typ:
DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT CAST(CAST(@v AS NVARCHAR(MAX)) AS JSON) AS j;
und um von einem JSON-Typ in einen Vektor zu konvertieren:
DECLARE @j JSON = JSON_ARRAY(1.0, -0.2, 30)
SELECT CAST(CAST(@j AS NVARCHAR(MAX)) AS VECTOR(3)) AS v;
Weitere Informationen zur Verwendung von Vektoren in SQL Server finden Sie in den folgenden Artikeln: