Panoramica dei vettori nel motore di database SQL
Si applica a: Database SQL di Azure
I vettori sono matrici ordinate di numeri (in genere float) che possono rappresentare informazioni su alcuni dati. Ad esempio, un’immagine può essere rappresentata come vettore di valori pixel oppure una stringa di testo come un vettore o valori ASCII. Il processo per trasformare i dati in un vettore è denominato vettorializzazione.
Incorporamenti
Gli incorporamenti sono vettori che rappresentano caratteristiche importanti dei dati. Gli incorporamenti vengono spesso appresi con un modello di Deep Learning e i modelli di apprendimento automatico e intelligenza artificiale li usano come funzionalità. Gli incorporamenti possono inoltre acquisire la somiglianza semantica tra concetti simili. Ad esempio, durante la generazione di un incorporamento per le parole person
e human
, ci si aspetterebbe che gli incorporamenti (rappresentazione vettoriale) siano simili in valore, poiché anche le parole sono semanticamente simili.
Azure OpenAI offre modelli per creare incorporamenti da dati di testo. Il servizio suddivide il testo in token e genera incorporamenti usando modelli sottoposti a training preliminare da OpenAI. Per altre informazioni, consultare Creazione di incorporamenti con Azure OpenAI.
Dopo aver generato gli incorporamenti, possono essere archiviati in un database di SQL Server. Ciò consente di archiviare gli incorporamenti insieme ai dati rappresentati e di eseguire query di ricerca vettoriali per trovare punti dati simili.
Ricerca vettoriale
La ricerca vettoriale si riferisce al processo di ricerca di tutti i vettori in un set di dati simile a un vettore di query specifico. Pertanto, un vettore di query per la parola human
cerca nell'intero set di dati vettori simili e quindi parole simili: in questo esempio dovrebbe trovare la parola person
come corrispondenza di chiusura. Questa vicinanza, o distanza, viene misurata usando una metrica di distanza, ad esempio la distanza del coseno. I vettori più vicini sono, più simili sono.
SQL Server offre il supporto predefinito per i vettori tramite il tipo di dati vector . I vettori vengono archiviati in un formato binario ottimizzato, ma esposti come matrici JSON per praticità. Ogni elemento del vettore viene archiviato usando un valore a virgola mobile a precisione singola (4 byte). Insieme al tipo di dati sono disponibili funzioni dedicate per operare su vettori. Ad esempio, è possibile trovare la distanza tra due vettori usando la VECTOR_DISTANCE
funzione . La funzione restituisce un valore scalare con la distanza tra due vettori in base alla metrica di distanza specificata.
Poiché i vettori vengono in genere gestiti come matrici di float, la creazione di un vettore può essere eseguita semplicemente eseguendo il cast di una matrice JSON a un tipo di dati vector . Ad esempio, il codice seguente crea un vettore da una matrice JSON:
SELECT CAST('[1.0, -0.2, 30]' AS VECTOR(3)) AS vector;
oppure, usando il cast implicito
DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT @v;
Lo stesso vale per la conversione di un vettore in una matrice JSON:
DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT CAST(@v AS NVARCHAR(MAX)) AS vector;
Limiti
Nel cast di anteprima corrente da e verso il tipo di dati JSON non è ancora supportato. La soluzione alternativa consiste nel convertire prima da/in NVARCHAR(MAX) e quindi in/da JSON. Ad esempio, per convertire un vettore in un tipo JSON:
DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT CAST(CAST(@v AS NVARCHAR(MAX)) AS JSON) AS j;
e per eseguire la conversione da un tipo JSON a vector:
DECLARE @j JSON = JSON_ARRAY(1.0, -0.2, 30)
SELECT CAST(CAST(@j AS NVARCHAR(MAX)) AS VECTOR(3)) AS v;
Per altre informazioni su come usare i vettori in SQL Server, vedere gli articoli seguenti: