Qu'est-ce qu'une base de données vectorielle ?
Qu'est-ce qu'une base de données vectorielle ?
Une base vectorielle est une base de données spécialisée conçue pour stocker, gérer et rechercher des plongements vectoriels à haute dimension. Sa fonction principale est de servir de base de connaissances externe qu'un grand modèle de langage (LLM) peut interroger, « ancrant » ainsi les réponses du modèle dans les données stockées dans la base de connaissances et atténuant le risque d'hallucination. La fonctionnalité principale d'une base vectorielle est d'effectuer des recherches de similarité sémantique, qui identifient les points de données conceptuellement similaires, plutôt que de simplement faire correspondre des mots-clés. Elle indexe et stocke à la fois les plongements vectorielles denses et éparses provenant de modèles de machine learning afin de permettre une recherche et une récupération rapides par similarité. Ces plongements capturent les relations sémantiques au sein de données non structurées telles que du texte, des images ou de l'audio. Dans l'espace vectoriel créé par la base de données, les éléments connexes sont positionnés plus près les uns des autres, ce qui permet au système de classer les résultats par pertinence.
Plongements vectoriels
Que sont les plongements vectoriels et comment sont-ils créés ?
Les plongements vectoriels sont des tableaux numériques de valeurs à virgule flottante qui représentent des données telles que des mots, des phrases ou des documents entiers. Ils sont générés par des modèles de machine learning, tels que les grands modèles de langage, qui transforment les médias numériques en points dans un espace à haute dimension. Ce processus capture la signification sémantique sous-jacente et les relations des données d'origine. Par exemple, l'image d'un « golden retriever jouant dans un parc » pourrait être convertie en un plongement numériquement proche de celui du texte « chien heureux dehors ». Il est important de noter que les plongements créés par le modèle d'un fournisseur ne peuvent pas être compris par un autre ; par exemple, un plongement provenant d'un modèle OpenAI n'est pas compatible avec celui d'un autre fournisseur.
Que sont les vecteurs denses (plongements) ?
Les vecteurs denses sont des plongements numériques à haute dimension où presque tous les éléments sont des valeurs non nulles. Une caractéristique essentielle des vecteurs denses est que tous les vecteurs générés par un modèle particulier doivent avoir le même nombre fixe de dimensions, ce qui est une condition préalable à la mesure de la similarité. Par exemple, les plongements des modèles Azure OpenAI ont 1 536 dimensions. Généralement produits par des modèles de transformations, ils capturent une signification sémantique riche et nuancée, ce qui les rend parfaits pour la recherche de similarité sémantique. Un vecteur dense pour le mot « chat », par exemple, peut apparaître sous la forme [0.135, -0.629, 0.327, 0.366, ...].
Que sont les vecteurs épars (plongements) ?
Qu'est-ce que la recherche vectorielle ?
La recherche vectorielle est une technique qui permet de trouver des données similaires en les représentant sous forme de vecteurs numériques à haute dimension, souvent appelés « plongements ». Cette méthode est très polyvalente, car les modèles de machine learning peuvent générer des plongements pour tout type de média numérique, y compris le texte, les images et l'audio. Le concept fondamental consiste à transformer les données en un espace vectoriel où la distance géométrique entre les vecteurs indique leur similarité sémantique. Une recherche vectorielle est une opération de requête qui trouve les vecteurs les plus similaires à un vecteur de requête donné sur la base d'un indicateur de similarité spécifique. Par exemple, une recherche sur le mot « canin » pourrait correspondre sémantiquement à un document contenant le mot « chien », contrairement à la recherche traditionnelle par mot-clé, qui correspond au terme littéral plutôt qu'à sa signification sous-jacente.
Mesurer la similarité
Comment mesure-t-on la similarité vectorielle et la distance ?
Dans la recherche vectorielle, la similarité est quantifiée en calculant la distance ou l'angle entre deux vecteurs dans un espace à haute dimension ; les vecteurs qui sont plus proches sont considérés comme plus similaires sémantiquement. Les mesures courantes utilisées pour mesurer cette proximité incluent la similarité cosinus, la distance euclidienne, le produit scalaire, la distance de Hamming et la distance de Manhattan.
- La distance L2 (distance euclidienne) est la mesure la plus courante et représente la distance en ligne droite « à vol d'oiseau » entre deux points vectoriels.
- La distance L1 (distance de Manhattan) mesure la distance en additionnant les différences absolues des composantes du vecteur, comme si l'on naviguait dans un réseau urbain.
- La distance Linf (distance de Chebyshev) est la différence maximale le long d'une seule dimension.
- La similarité cosinus mesure le cosinus de l'angle entre deux vecteurs pour déterminer s'ils pointent dans une direction similaire, quelle que soit leur magnitude. Un score de 1 signifie que les vecteurs sont identiques, et –1 qu'ils sont opposés. C'est un choix courant pour les espaces de plongements normalisés, tels que ceux des modèles OpenAI.
- La similitude du produit scalaire prend en compte à la fois l'angle et la magnitude des vecteurs. Elle est équivalente à la similarité cosinus pour les vecteurs normalisés, mais elle est souvent plus efficace sur le plan computationnel.
- La distance de Hamming calcule le nombre de dimensions sur lesquelles deux vecteurs diffèrent.
- Le produit intérieur maximal (MaxSim) est une mesure de similarité utilisée lorsqu'un seul élément de données (comme un document) est représenté par plusieurs vecteurs (par exemple, un vecteur pour chaque mot). Il calcule la similarité en comparant chaque vecteur d'un document au vecteur le plus similaire de l'autre document, puis en agrégeant les résultats.
Algorithmes de rechercher efficaces
Comment des algorithmes comme HNSW et ANN permettent-ils une recherche vectorielle efficace ?
La recherche de vecteurs similaires dans un ensemble de données volumineux et à haute dimension représente un défi considérable. Une approche par force brute, qui consiste à comparer un vecteur de requête à tous les autres vecteurs, est irréalisable sur le plan computationnel à mesure que l'ensemble de données s'agrandit. Ce problème est résolu à l'aide d'algorithmes approximative nearest neighbor (ANN). Ces techniques permettent de trouver rapidement les vecteurs les plus proches d'une requête sans effectuer de comparaison exhaustive. Un des algorithmes ANN courants est le hierarchical navigable small world (HNSW), qui organise les vecteurs en une structure graphique en couches où les vecteurs sont connectés en fonction de leur similarité, ce qui permet un parcours rapide. Cette méthode est plus efficace et plus précise qu'une recherche FLAT (force brute), qui est plus intensive en termes de calcul mais plus précise. En réduisant considérablement le champ de recherche, ces structures permettent de gagner énormément en vitesse, en échange d'une légère réduction, généralement acceptable, de la précision absolue.
Qu'est-ce qu'une recherche en plusieurs étapes dans les systèmes de recherche vectorielle ?
Une récupération en plusieurs étapes ou un framework de récupération (pour simplifier, nous pouvons également l'appeler pipeline de recherche) est un workflow orchestré qui définit la séquence d'étapes pour le traitement d'une requête. Cela comprend généralement des étapes telles que l'analyse de la requête, la recherche initiale à partir d'un ou plusieurs index (par exemple, en combinant la recherche lexicale et vectorielle pour une approche hybride), le filtrage des résultats et une étape finale de reclassement avant de renvoyer les résultats à l'utilisateur.
Quels sont les avantages de l'utilisation du framework de récupération pour la création de pipelines de recherche ?
Le principal avantage est sa modularité et sa flexibilité. Il permet aux développeurs de combiner facilement différentes stratégies de recherche et de classement (telles que la recherche hybride) et de construire des pipelines de récupération complexes à plusieurs étapes adaptés à des besoins spécifiques sans avoir à construire l'ensemble du système à partir de zéro.
Qu'est-ce que le reclassement sémantique ?
Le reclassement sémantique est un processus de deuxième étape qui améliore la pertinence des résultats de recherche. Après une première étape de recherche rapide qui récupère un large éventail de documents candidats, un modèle plus complexe mais plus précis est utilisé pour réorganiser ce petit ensemble afin d'obtenir un classement final plus précis.
Comment fonctionne un processus de « récupération et reclassement » en plusieurs étapes ?
Un pipeline de « récupération et reclassement » fonctionne en deux étapes distinctes :
- Récupération : une méthode de recherche efficace et évolutive (comme la recherche vectorielle ANN ou la recherche lexicale BM25) est utilisée pour récupérer un ensemble initial de documents candidats à partir de l'index complet.
- Reclassement : cet ensemble de candidats plus restreint est ensuite transmis à un modèle plus puissant (tel qu'un encodeur croisé) qui effectue une analyse plus approfondie de la relation sémantique entre la requête et chaque document, en les réorganisant afin d'améliorer la pertinence finale.
Quelle est la différence entre les architectures à double encodeur et à encodeur croisé pour le reclassement ?
- Un double encodeur génère des plongements distincts pour la requête et les documents de manière indépendante. Étant donné que les plongements de documents peuvent être précalculés et indexés, cette architecture est très rapide et est utilisée pour la phase initiale de récupération initiale.
- Un encodeur croisé traite la requête et le document ensemble comme une seule entrée. Cela lui permet de capturer des interactions contextuelles beaucoup plus profondes, ce qui le rend très précis mais aussi bien plus lent. En raison de son coût de calcul, il ne convient qu'à la phase de reclassement sur un petit ensemble de résultats candidats.
Stockage et optimisation
Comment les vecteurs sont-ils généralement stockés dans une base vectorielle, et quels défis de stockage se posent ?
Les vecteurs sont généralement stockés sous forme de tableaux de nombres à virgule flottante de 32 bits (float32). Le principal défi réside dans l'espace de stockage considérable requis : un seul vecteur à 384 dimensions occupe environ 1,5 Ko. Un index de 100 millions de documents peut donc voir sa taille multipliée par sept simplement en ajoutant un champ vectoriel. Étant donné que les algorithmes de recherche vectorielle tels que HNSW nécessitent que l'index soit chargé dans la mémoire RAM pour être performants, cela pose des défis importants en termes de coût de mémoire et de scalabilité.
Qu'est-ce que la quantification vectorielle ?
La quantification vectorielle est une technique de compression avec perte qui réduit les besoins en mémoire et en calcul d'un modèle en représentant ses paramètres avec moins de bits. Elle est particulièrement utile pour les LLM, qui peuvent comporter des milliards de paramètres. En convertissant des nombres flottants de haute précision float32 en entiers de moindre précision tels que int8 ou int4, la quantification peut réduire considérablement la taille du modèle et accélérer l'inférence avec un impact minimal sur la précision.
Qu'est-ce que la quantification scalaire (SQ) ?
La quantification scalaire compresse les vecteurs en mappant la plage continue des valeurs float32 à un ensemble discret de valeurs entières de plus faible précision (par exemple, int8). Cela permet de réduire jusqu'à 4 fois la taille du stockage tout en préservant une grande partie des informations relatives à l'amplitude du vecteur, ce qui est important pour la pertinence.
Qu'est-ce que la quantification binaire (BQ) ?
La quantification binaire est une technique de compression plus agressive qui convertit chaque composant d'un vecteur float32 en une représentation binaire (par exemple, 1 bit). Cette compression peut atteindre 32x, ce qui permet d'économiser un maximum de mémoire et d'effectuer des calculs plus rapides à l'aide d'opérations basées sur des nombres entiers, souvent au prix d'une certaine perte de précision.
Quels sont les avantages d'une plateforme intégrée de stockage vectoriel (base de données) et de recherche ?
Une plateforme intégrée qui combine le stockage et la recherche vectoriels avec les fonctionnalités traditionnelles des bases de données (telles que la recherche lexicale et le filtrage) offre des avantages significatifs. Elle simplifie l'architecture en éliminant le besoin de synchroniser les données entre des systèmes distincts. Plus important encore, elle permet une recherche hybride puissante, où la recherche lexicale, la recherche vectorielle et le filtrage des métadonnées peuvent être effectués dans une seule requête unifiée, ce qui conduit à des résultats plus pertinents et à une expérience de développement plus simple.
En quoi la recherche vectorielle diffère-t-elle de la recherche lexicale ?
- La recherche lexicale (par exemple, BM25) repose sur la correspondance de mots-clés. Elle trouve les documents qui contiennent les termes exacts présents dans la requête. Bien que précise, elle ne comprend pas le contexte ni les synonymes.
- La recherche vectorielle repose sur la signification sémantique. Elle trouve des documents qui sont conceptuellement similaires à la requête, même s'ils ne partagent aucun mot-clé. Elle est parfaite pour comprendre l'intention de l'utilisateur, mais peut s'avérer moins précise que la recherche lexicale.
Quels sont les cas d'utilisation courants des bases vectorielles ? Que peuvent réaliser les développeurs grâce à la recherche vectorielle ?
Les développeurs utilisent des Bases vectorielles pour créer des applications sophistiquées qui reposent sur la compréhension de la signification sémantique des données. Les cas d'utilisation courants incluent :
- Recherche sémantique : créer des expériences de recherche qui comprennent l'intention de l'utilisateur au-delà des mots clés, comme dans le e-commerce ou les systèmes de découverte de documents.
- Génération augmentée de récupération (RAG) : fournir aux LLM et aux chatbots l'accès à des connaissances externes actualisées afin de générer des réponses plus précises et factuelles
- Moteurs de recommandation : recommander des produits, des articles ou des médias en fonction de la similitude conceptuelle avec les centres d'intérêt ou le comportement passé de l'utilisateur.
- Recherche d'images et recherche multimodale : rechercher des images visuellement similaires ou effectuer des recherches dans différents types de données (par exemple, utiliser du texte pour trouver une image).