Partager via


Base de données vectorielles

Conseil

Pour obtenir les derniers exemples de base de données vectorielle et d’application modèle RAG, consultez la galerie d’exemples Azure Cosmos DB.

Les bases de données vectorielles sont utilisées dans de nombreux domaines et situations de l'IA analytique et générative. Il s'agit notamment du traitement du langage naturel, de la reconnaissance de vidéos et d'images, des systèmes de suggestions et de la recherche, pour n'en citer que quelques-uns.

En 2023, l’intégration des améliorations de l’IA, souvent obtenues en intégrant des bases de données vectorielles autonomes spécialisées dans des piles technologiques existantes, a représenté une tendance notable dans le domaine des logiciels. Cet article décrit les bases de données vectorielles et présente une architecture alternative que vous pourriez envisager : l'utilisation d'une base de données vectorielle intégrée dans la base de données NoSQL ou relationnelle que vous utilisez déjà, notamment lorsque vous travaillez avec des données multimodales. Cette approche vous permet non seulement de réduire les coûts, mais également d’accroître la cohérence, la scalabilité et le niveau de performance des données.

Conseil

La cohérence, la scalabilité et le niveau de performance des données sont essentielles pour les applications nécessitant beaucoup de données, c’est pourquoi OpenAI a choisi de créer le service ChatGPT sur Azure Cosmos DB. Vous aussi, vous pouvez tirer parti de sa base de données vectorielle intégrée, ainsi que de ses temps de réponse en millisecondes à un chiffre, sa scalabilité automatique et instantanée et sa vitesse garantie à n’importe quelle échelle. Consultez les exemples d’implémentation et essayez-le gratuitement.

Qu’est-ce qu’une base de données vectorielle ?

Une base de données vectorielle est une base de données conçue pour stocker et gérer des incorporations vectorielles, qui sont des représentations mathématiques des données dans un espace de grande dimension. Dans cet espace, chaque dimension correspond à une caractéristique des données, et des dizaines de milliers de dimensions peuvent être utilisées pour représenter des données sophistiquées. La position d’un vecteur dans cet espace représente ses caractéristiques. Les mots, expressions ou documents entiers, ainsi que les images, l’audio et d’autres types de données peuvent tous être vectorisés. Ces incorporations vectorielles sont utilisées dans la recherche de similarité, la recherche multimodèle, les moteurs de recommandations, les modèles LLM, etc.

Dans une base de données vectorielle, les incorporations sont indexées et interrogées via des algorithmes de recherche vectorielle en fonction de leur distance ou de leur similitude vectorielle. Un mécanisme robuste est nécessaire pour identifier les données les plus pertinentes. Certains algorithmes de recherche vectorielle bien connus incluent l’HNSW (Hierarchical Navigable Small World), le fichier inversé (IVF) et DiskANN.

Base de données vectorielle intégrée comparée à base de données vectorielle pure

Il existe deux types courants d’implémentations de base de données vectorielles : une base de données vectorielle pure et une base de données vectorielle intégrée dans une base de données NoSQL ou relationnelle.

  • Une base de données vectorielle pure est conçue pour stocker et gérer efficacement les incorporations vectorielles, ainsi qu’une petite quantité de métadonnées ; elle est distincte de la source de données à partir de laquelle les incorporations sont dérivées.

  • Une base de données vectorielle intégrée à une base de données NoSQL ou relationnelle hautement performante fournit des fonctionnalités supplémentaires. La base de données vectorielles intégrée dans une base de données NoSQL ou relationnelle permet de stocker, d’indexer et d’interroger les incorporations en même temps que les données d’origine correspondantes. Cette approche élimine le coût supplémentaire dû à la réplication des données dans une base de données vectorielle pure distincte. De plus, le regroupement des incorporations vectorielles et des données d’origine facilite les opérations sur les données multimodales et permet d’améliorer la cohérence, la mise à l’échelle et les performances des données. Une base de données hautement performante avec une flexibilité de schéma et une base de données vectorielle intégrée est particulièrement optimale pour agents IA.

Cas d'usage de la base de données vectorielle

Les bases de données vectorielles sont utilisées dans de nombreux domaines et situations dans l’IA analytique et générative, notamment le traitement du langage naturel, la reconnaissance vidéo et l’image, le système de recommandation et la recherche. Par exemple, vous pouvez utiliser une base de données vectorielle pour :

  • Identifier des images, des documents et des chansons similaires en fonction de leur contenu, thèmes, sentiments et styles
  • Identifier des produits similaires en fonction de leurs caractéristiques, fonctionnalités et groupes d’utilisateurs
  • Recommander le contenu, les produits ou les services en fonction des préférences des individus
  • Recommander le contenu, les produits ou les services en fonction des similitudes des groupes d’utilisateurs
  • Identifier les options potentielles les mieux adaptées à partir d’un grand pool de choix pour répondre à des exigences complexes
  • Identifier les anomalies de données ou les activités frauduleuses qui ne correspondent pas aux modèles prédominants ou normaux
  • Implémenter une mémoire persistante pour les agents IA

Conseil

Outre ces cas d’usage classiques des bases de données vectorielles, notre base de données vectorielle intégrée constitue également une solution idéale pour la mise en cache LLM au niveau de la production grâce à sa faible latence, sa grande scalabilité et sa haute disponibilité.

Les bases de données vectorielles sont particulièrement populaires pour permettre la génération augmentée par extraction (RAG) qui exploite des modèles de langage de grande taille (LLMs) et des données personnalisées ou des informations spécifiques au domaine. Cette approche vous permet de :

  • Générer des réponses contextuellement pertinentes et précises aux invites des utilisateurs depuis des modèles d’IA
  • Surmonter les limites des jetons des LLM
  • Réduire les coûts du réglage fréquent des données mises à jour

Ce processus consiste à extraire des informations pertinentes depuis une source de données personnalisée, puis à les intégrer dans la requête de modèle grâce à l'ingénierie des prompts. Avant l’envoi d’une requête aux LLM, l’entrée/requête/demande de l’utilisateur est également transformée en une incorporation, et des techniques de recherche vectorielle sont utilisées pour localiser les incorporations les plus similaires dans la base de données. Cette technique permet d’identifier les enregistrements de données les plus pertinents dans la base de données. Ces enregistrements récupérés sont ensuite fournis en tant qu’entrée de la requête LLM à l’aide de l’ingénierie d’invite.

Incorporations

Une incorporation est un format spécial de représentation des données que les modèles et algorithmes Machine Learning peuvent facilement utiliser. L’incorporation est une représentation dense d’informations de la signification sémantique d’un morceau de texte. Chaque incorporation est un vecteur de nombres à virgule flottante, de sorte que la distance entre deux incorporations dans l’espace vectoriel est corrélée avec la similitude sémantique entre deux entrées au format d’origine. Par exemple, si deux textes sont similaires, leurs représentations vectorielles doivent également être similaires. Une extension de base de données vectorielle qui vous permet de stocker vos incorporations avec vos données d’origine garantit la cohérence, la scalabilité et les performances des données.

La recherche vectorielle est une méthode qui vous aide à trouver des éléments similaires en fonction de leurs caractéristiques de données, plutôt que des correspondances exactes sur un champ de propriété. Cette technique est utile dans des applications comme la recherche de texte similaire, la recherche d’images associées, la création de recommandations ou même la détection d’anomalies.

Il fonctionne en prenant les représentations vectorielles (listes de nombres) de vos données que vous avez créées avec un modèle Machine Learning à l’aide d’une API d’incorporations, telle qu’Azure OpenAI Embeddings ou Hugging Face sur Azure. Elle mesure ensuite la distance entre les vecteurs de données et votre vecteur de requête. Les vecteurs de données les plus proches de votre vecteur de requête sont ceux qui se révèlent les plus similaires sémantiquement.

L’utilisation d’une fonctionnalité de recherche vectorielle native offre un moyen efficace de stocker, d’indexer et de rechercher des données vectorielles de grande dimension directement avec d’autres données d’application. Cette approche supprime la nécessité de migrer vos données vers des bases de données vectorielles alternatives coûteuses et fournit une intégration transparente de vos applications basées sur l’IA.

Invites et ingénierie d’invite

Une invite fait référence à un texte ou à des informations spécifiques qui peuvent servir d’instruction à un LLM, ou de données contextuelles sur lesquelles le LLM peut s’appuyer. Une invite peut prendre différentes formes, telles qu’une question, une instruction ou même un extrait de code. Les invites peuvent servir comme suit :

  • Instructions qui fournissent des directives au LLM
  • Contenu principal qui fournit des informations au LLM pour le traitement
  • Exemples pour aider à conditionner le modèle à une tâche ou un processus particulier
  • Signaux : oriente les données de sortie du LLM dans la bonne direction
  • Contenu de soutien qui représente des informations supplémentaires que le LLM peut utiliser pour générer le résultat

Le processus de création de bons prompts pour un scénario est appelé ingénierie des prompts. Pour plus d’informations sur les sollicitations et les meilleures pratiques pour l’ingénierie des sollicitations, consultez Conception des messages système.

Jetons

Les jetons sont de petits blocs de texte générés en fractionnant le texte d’entrée en segments plus petits. Ces segments peuvent être des mots ou des groupes de caractères, dont la longueur peut varier d’un caractère unique à un mot entier. Par exemple, le mot « hamburger » est divisé en jetons tels que « ham », « bur » et « ger » alors qu’un mot court et commun comme « pois » est considéré comme un jeton unique. Les LLM comme ChatGPT, GPT-3.5 ou GPT-4 divisent les mots en jetons à des fins de traitement. [Revenir en arrière]

Génération augmentée de récupération

La génération augmentée de récupération (RAG) est une architecture qui augmente les capacités des LLM comme ChatGPT, GPT-3.5 ou GPT-4 en ajoutant un système de récupération d’informations comme la recherche vectorielle qui fournit des données d’ancrage, telles que celles stockées dans une base de données vectorielle. Cette approche permet à votre LLM de générer des réponses pertinentes et précises du point de vue contextuel en fonction de vos données personnalisées provenant de contenus vectorisés (documents, images, audio, vidéo, etc.).

Un modèle RAG simple utilisant Azure Cosmos DB pour NoSQL peut :

  1. Activer l'Index Vectoriel NoSQL d'Azure Cosmos DB
  2. Configurer une base de données et un conteneur avec une stratégie de vecteur de conteneur et un index vectoriel
  3. Insérer des données dans une base de données et un conteneur Azure Cosmos DB for NoSQL
  4. Créer des incorporations à partir d’une propriété de données avec Incorporations Azure OpenAI
  5. Connectez Azure Cosmos DB pour NoSQL.
  6. Créer un index vectoriel sur les propriétés d’incorporation
  7. Créer une fonction pour effectuer une recherche de similarité vectorielle à partir d'une demande utilisateur
  8. La réponse aux questions sur les données à l’aide d’un modèle d’achèvement Azure OpenAI

Le modèle RAG, avec l’ingénierie d’invite, a pour but d’améliorer la qualité de la réponse en offrant des informations plus contextuelles au modèle. RAG permet au modèle d’appliquer une base de connaissances plus large en incorporant des sources externes pertinentes dans le processus de génération, ce qui aboutit à des réponses plus complètes et mieux fondées. Pour plus d’informations, consultez Grounding LLMs.

Comment implémenter les fonctionnalités de la base de données vectorielle intégrée

Vous pouvez implémenter les fonctionnalités de la base de données vectorielle intégrée sur les API Azure Cosmos DB suivantes :

API NoSQL

Azure Cosmos DB for NoSQL est la première base de données vectorielle serverless NoSQL du monde. Stockez vos vecteurs et vos données ensemble dans Azure Cosmos DB pour NoSQL avec des fonctionnalités de base de données vectorielles intégrées , où vous pouvez créer un index vectoriel basé sur DiskANN, suite d’algorithmes d’indexation de vecteurs hautes performances développés par Microsoft Research.

DiskANN vous permet d’effectuer des queriers hautement précis et à faible latence à toute échelle tout en tirant parti de tous les avantages d’Azure Cosmos DB pour NoSQL, tels que 99,999% SLA (avec haute disponibilité), la géoréplication, la transition transparente du débit serverless au débit provisionné (RU) dans un magasin de données.

Azure Cosmos DB pour MongoDB

Utilisez la base de données vectorielle intégrée en mode natif dans Azure Cosmos DB for MongoDB (architecture vCore). Elle offre un moyen efficace de stocker, d'indexer et de rechercher des données vectorielles construites directement avec les autres données de l'application dans un espace à haute dimension. Cette approche supprime la nécessité de migrer vos données vers des bases de données vectorielles alternatives coûteuses et fournit une intégration transparente de vos applications basées sur l’IA.

Exemples de code

API pour PostgreSQL

Utilisez la base de données vectorielle intégrée dans Azure Cosmos DB for PostgreSQL en mode natif, qui offre un moyen efficace de stocker, d’indexer, puis de rechercher des données vectorielles à haute dimension directement avec d’autres données d’application. Cette approche supprime la nécessité de migrer vos données vers des bases de données vectorielles alternatives coûteuses et fournit une intégration transparente de vos applications basées sur l’IA.

Exemple de code

Étape suivante