Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Une base de données vectorielle stocke et gère les données sous la forme de vecteurs, qui sont des tableaux numériques de points de données.
L’utilisation de vecteurs permet des requêtes et des analyses complexes, car vous pouvez comparer et analyser des vecteurs à l’aide de techniques avancées pour rechercher des éléments similaires et organiser des données en groupes, notamment la recherche de clustering, de quantisation et de similarité vectorielle.
Les bases de données traditionnelles ne sont pas adaptées à la gestion des données à haute dimension qui sont de plus en plus courantes dans l’analytique des données. Toutefois, les bases de données vectorielles sont conçues pour gérer des données à haute dimension, telles que du texte, des images et de l’audio, en les représentant en tant que vecteurs. Les bases de données vectorielles sont utiles pour les tâches telles que l’apprentissage automatique, le traitement du langage naturel et la reconnaissance d’images, où l’objectif consiste à identifier des modèles ou des similitudes dans des jeux de données volumineux.
Cet article fournit un arrière-plan sur les bases de données vectorielles et explique conceptuellement comment utiliser un Eventhouse en tant que base de données vectorielle dans Real-Time Intelligence dans Microsoft Fabric. Pour obtenir un exemple pratique, consultez Tutoriel : Utiliser un Eventhouse comme base de données vectorielle.
Concepts clés
Les concepts clés suivants sont utilisés dans les bases de données vectorielles :
Similarité des vecteurs
La similarité vectorielle est une mesure de la différence (ou de la similarité) entre deux vecteurs ou plus. La recherche de similarité vectorielle est une technique utilisée pour rechercher des vecteurs similaires dans un jeu de données. Vous comparez des vecteurs à l’aide d’une métrique de distance, telle que la distance euclide oula similarité cosinus. Plus les deux vecteurs sont proches, plus ils sont similaires.
embeddings
Les incorporations sont un moyen courant de représenter des données dans un format vectoriel à utiliser dans les bases de données vectorielles. Une incorporation est une représentation mathématique d’une partie de données, telle qu’un mot, un document texte ou une image, conçue pour capturer sa signification sémantique. Vous créez des incorporations à l’aide d’algorithmes qui analysent les données et génèrent un ensemble de valeurs numériques qui représentent ses fonctionnalités clés. Par exemple, une incorporation pour un mot peut représenter sa signification, son contexte et sa relation avec d’autres mots. Le processus de création d'embeddings est direct. Bien que vous puissiez les créer à l’aide de packages de Python standard (par exemple, spaCy, sent2vec, Gensim), les modèles de langage volumineux (LLM) génèrent des incorporations de qualité supérieure pour la recherche de texte sémantique. Par exemple, vous pouvez envoyer du texte à un modèle d’incorporation dans Azure OpenAI et générer une représentation vectorielle que vous pouvez stocker pour l’analyse. Pour plus d’informations, consultez Understand embeddings in Azure OpenAI Service.
Workflow général
Le flux de travail général pour l’utilisation d’une base de données vectorielle est le suivant :
- Incorporer des données : convertissez des données en format vectoriel à l’aide d’un modèle d’incorporation. Par exemple, vous pouvez incorporer des données texte à l’aide d’un modèle OpenAI.
- Stocker des vecteurs : stockez les vecteurs incorporés dans une base de données vectorielle. Vous pouvez envoyer les données incorporées à un Eventhouse pour stocker et gérer les vecteurs.
- Requête incorporée : convertissez les données de requête en format vectoriel à l’aide du même modèle d’incorporation utilisé pour incorporer les données stockées.
- Vecteurs de requête : utilisez la recherche de similarité vectorielle pour rechercher des entrées dans la base de données qui sont similaires à la requête.
Eventhouse en tant que base de données vectorielle
Au cœur de la recherche de similarité vectorielle, il est possible de stocker, d’indexer et de interroger des données vectorielles. Les Eventhouses fournissent une solution permettant de gérer et d’analyser de grands volumes de données, en particulier dans les scénarios nécessitant une exportation et une analyse en temps réel. Cette fonctionnalité rend Eventhouse un excellent choix pour stocker et rechercher des vecteurs.
Les composants suivants de Eventhouse vous permettent de l’utiliser comme base de données vectorielle :
- Le type de données dynamique, qui peut stocker des données non structurées telles que des tableaux et des listes de propriétés. Utilisez ce type de données pour stocker des valeurs vectorielles. Vous pouvez augmenter davantage la valeur du vecteur en stockant les métadonnées associées à l’objet d’origine sous forme de colonnes distinctes dans votre table.
- Type d’encodage
Vector16conçu pour stocker des vecteurs de nombres à virgule flottante en précision 16 bits. Cet encodage utiliseBfloat16à la place des 64 bits par défaut. Utilisez cet encodage pour stocker les encastrements de vecteurs ML, car il réduit les exigences de stockage par un facteur de quatre et accélère les fonctions de traitement vectoriel telles que series_dot_product() et series_cosine_similarity() par plusieurs ordres de grandeur. - Fonction series_cosine_similarity , que vous pouvez utiliser pour effectuer des recherches de similarité vectorielle sur les vecteurs stockés dans Eventhouse.
Optimiser pour la mise à l’échelle
Pour plus d’informations sur l’optimisation de la recherche de similarité vectorielle, consultez le blog.
Pour optimiser les performances et les temps de recherche résultants, procédez comme suit :
- Définissez l’encodage de la colonne des incorporations sur Vector16, l’encodage 16 bits des coefficients de vecteurs (au lieu de la valeur par défaut de 64 bits).
- Stockez la table de vecteurs d’incorporation sur tous les nœuds de cluster avec au moins une partition par processeur. Pour ce faire, procédez comme suit :
- Limitez le nombre de vecteurs d’incorporation par partition en modifiant le paramètre ShardEngineMaxRowCount de la stratégie de partitionnement. Ce paramètre répartit vos données sur toutes les ressources informatiques disponibles pour des recherches plus rapides.
- Modifiez le paramètre RowCountUpperBoundForMerge de la stratégie de fusion. La stratégie de fusion est nécessaire pour empêcher la fusion d’extensions après l’ingestion.
Exemples d’étapes d’optimisation
Dans l’exemple suivant, vous définissez une table de vecteurs statiques pour stocker des vecteurs 1M. Vous définissez la stratégie d’incorporation en tant que Vector16 et définissez les stratégies de partitionnement et de fusion pour optimiser la table pour la recherche de similarité vectorielle. Pour cet exemple, supposons que le cluster a 20 nœuds et que chaque nœud a 16 processeurs. Les fragments de la table doivent contenir au maximum 1 000 000 / (20 * 16) = 3 125 lignes.
Exécutez les commandes KQL suivantes une par une pour créer la table vide et définir les stratégies et l’encodage requis :
.create table embedding_vectors(vector_id:long, vector:dynamic) // This is a sample selection of columns, you can add more columns .alter column embedding_vectors.vector policy encoding type = 'Vector16' // Store the coefficients in 16 bits instead of 64 bits accelerating calculation of dot product, suppress redundant indexing .alter-merge table embedding_vectors policy sharding '{ "ShardEngineMaxRowCount" : 3125 }' // Balanced data on all nodes and, multiple extents per node so the search can use all processors .alter-merge table embedding_vectors policy merge '{ "RowCountUpperBoundForMerge" : 3125 }' // Suppress merging extents after ingestionIngérer les données dans la table créée et définie à l’étape précédente.