Overzicht van vectoren in de SQL Database Engine
van toepassing op:Azure SQL Database-
Vectoren zijn geordende matrices van getallen (meestal floats) die informatie over sommige gegevens kunnen vertegenwoordigen. Een afbeelding kan bijvoorbeeld worden weergegeven als een vector van pixelwaarden, of een tekenreeks met tekst kan worden weergegeven als een vector- of ASCII-waarden. Het proces om gegevens om te zetten in een vector wordt vectorisatie genoemd.
Insluitingen
Insluitingen zijn vectoren die belangrijke functies van gegevens vertegenwoordigen. Insluitingen worden vaak geleerd met behulp van een Deep Learning-model en machine learning- en AI-modellen gebruiken ze als functies. Insluitingen kunnen ook semantische overeenkomsten tussen vergelijkbare concepten vastleggen. Bij het genereren van een insluiting voor de woorden person
en human
, verwachten we bijvoorbeeld dat hun insluitingen (vectorweergave) vergelijkbaar zijn in waarde, omdat de woorden ook semantisch vergelijkbaar zijn.
Azure OpenAI bevat modellen voor het maken van insluitingen op basis van tekstgegevens. De service breekt tekst op in tokens en genereert insluitingen met behulp van modellen die vooraf zijn getraind door OpenAI. Zie Insluitingen maken met Azure OpenAIvoor meer informatie.
Zodra insluitingen zijn gegenereerd, kunnen ze worden opgeslagen in een SQL Server-database. Hiermee kunt u de insluitingen naast de gegevens die ze vertegenwoordigen, opslaan en vectorzoekquery's uitvoeren om vergelijkbare gegevenspunten te vinden.
Vector zoeken
Vectorzoekopdrachten verwijzen naar het proces van het vinden van alle vectoren in een gegevensset die vergelijkbaar zijn met een specifieke queryvector. Daarom zoekt een queryvector voor het woord human
de hele dataset op vergelijkbare vectoren en dus vergelijkbare woorden. In dit voorbeeld zou het woord person
als een nauwe overeenkomst moeten worden gevonden. Deze nabijheid, of afstand, wordt gemeten met behulp van een metrische afstand, zoals cosinusafstand. Hoe dichtere vectoren zijn, hoe vergelijkbaarer ze zijn.
SQL Server biedt ingebouwde ondersteuning voor vectoren via de vector gegevenstype. Vectoren worden opgeslagen in een geoptimaliseerde binaire indeling, maar worden voor het gemak weergegeven als JSON-matrices. Elk element van de vector wordt opgeslagen als een enkele-precisie (4 bytes) drijvende-kommawaarde. Naast het gegevenstype zijn er speciale functies om te werken op vectoren. Het is bijvoorbeeld mogelijk om de afstand tussen twee vectoren te vinden met behulp van de functie VECTOR_DISTANCE
. De functie retourneert een scalaire waarde met de afstand tussen twee vectoren op basis van de metrische afstand die u opgeeft.
Aangezien vectoren doorgaans worden beheerd als matrices van floats, kan het maken van een vector eenvoudigweg worden gedaan door een JSON-matrix naar een vector gegevenstype te gieten. Met de volgende code wordt bijvoorbeeld een vector gemaakt op basis van een JSON-matrix:
SELECT CAST('[1.0, -0.2, 30]' AS VECTOR(3)) AS vector;
of door impliciete casting te gebruiken
DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT @v;
Hetzelfde geldt voor het converteren van een vector naar een JSON-matrix:
DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT CAST(@v AS NVARCHAR(MAX)) AS vector;
Beperkingen
In de huidige preview wordt casten van en naar het JSON-gegevenstype nog niet ondersteund. De tijdelijke oplossing is om eerst te converteren van/naar NVARCHAR(MAX) en vervolgens naar/van JSON. Als u bijvoorbeeld een vector wilt converteren naar een JSON-type:
DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT CAST(CAST(@v AS NVARCHAR(MAX)) AS JSON) AS j;
en om te converteren van een JSON-type naar vector:
DECLARE @j JSON = JSON_ARRAY(1.0, -0.2, 30)
SELECT CAST(CAST(@j AS NVARCHAR(MAX)) AS VECTOR(3)) AS v;
Meer informatie over het gebruik van vectoren in SQL Server vindt u in de volgende artikelen: