Partager via


Vue d’ensemble des vecteurs dans le moteur de base de données SQL

S’applique à : Azure SQL Database

Les vecteurs sont des tableaux ordonnés de nombres (généralement des floats) qui peuvent représenter des informations sur certaines données. Par exemple, une image peut être représentée comme un vecteur de valeurs de pixels, ou une chaîne de texte peut être représentée sous forme de valeurs vectorielles ou ASCII. Le processus pour transformer les données en vecteur est appelé vectorisation.

Incorporations

Les incorporations sont des vecteurs qui représentent des caractéristiques importantes des données. Les incorporations sont souvent apprises à l’aide d’un modèle Deep Learning, et les modèles Machine Learning et IA les utilisent comme fonctionnalités. Les incorporations peuvent également capturer la similarité sémantique entre des concepts similaires. Par exemple, lors de la génération d’une incorporation pour les mots person et human, nous nous attendons à ce que leurs incorporations (représentation vectorielle) soient similaires en valeur, car les mots sont également sémantiquement similaires.

Azure OpenAI propose des modèles pour créer des incorporations à partir de données texte. Le service décompose le texte en jetons et génère des incorporations à l’aide de modèles pré-entraînés par OpenAI. Pour en savoir plus, consultez Création d’incorporations avec Azure OpenAI.

Une fois les incorporations générées, elles peuvent être stockées dans une base de données SQL Server. Cela vous permet de stocker les incorporations en même temps que les données qu’elles représentent et d’effectuer des requêtes de recherche vectorielle pour rechercher des points de données similaires.

La recherche vectorielle fait référence au processus de recherche de tous les vecteurs d’un jeu de données qui sont similaires à un vecteur de requête spécifique. Par conséquent, un vecteur de requête pour le mot human recherche dans l’ensemble du jeu de données des vecteurs similaires, et ainsi des mots similaires : dans cet exemple, il doit trouver le mot person comme une correspondance proche. Cette proximité, ou cette distance, est mesurée à l’aide d’une métrique de distance telle que la distance cosinus. Les vecteurs plus proches sont, plus ils sont similaires.

SQL Server fournit une prise en charge intégrée des vecteurs via le type de données vector . Les vecteurs sont stockés dans un format binaire optimisé, mais exposés sous forme de tableaux JSON pour des raisons pratiques. Chaque élément du vecteur est stocké à l’aide d’une valeur à virgule flottante simple précision (4 octets). Outre le type de données, il existe des fonctions dédiées pour fonctionner sur des vecteurs. Par exemple, il est possible de trouver la distance entre deux vecteurs à l’aide de la VECTOR_DISTANCE fonction. La fonction retourne une valeur scalaire avec la distance entre deux vecteurs en fonction de la métrique de distance que vous spécifiez.

Étant donné que les vecteurs sont généralement gérés en tant que tableaux de floats, la création d’un vecteur peut simplement faire passer un tableau JSON à un type de données vectoriel. Par exemple, le code suivant crée un vecteur à partir d’un tableau JSON :

SELECT CAST('[1.0, -0.2, 30]' AS VECTOR(3)) AS vector;

ou, à l’aide d’un cast implicite

DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT @v;

Il en va de même pour convertir un vecteur en tableau JSON :

DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT CAST(@v AS NVARCHAR(MAX)) AS vector;

Limites

Dans le cast d’aperçu actuel vers et à partir du type de données JSON n’est pas encore pris en charge. La solution de contournement consiste à convertir d’abord de/vers NVARCHAR(MAX), puis à partir de JSON. Par exemple, pour convertir un vecteur en type JSON :

DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT CAST(CAST(@v AS NVARCHAR(MAX)) AS JSON) AS j;

et à convertir d’un type JSON en vecteur :

DECLARE @j JSON = JSON_ARRAY(1.0, -0.2, 30)
SELECT CAST(CAST(@j AS NVARCHAR(MAX)) AS VECTOR(3)) AS v;

Pour plus d’informations sur l’utilisation de vecteurs dans SQL Server, consultez les articles suivants :