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) ?

Les vecteurs épars sont des plongements numériques à haute dimension dans lesquels la majorité des éléments sont nuls, une structure qui optimise à la fois le stockage et l'efficacité computationnelle. Contrairement aux récupérateurs denses, les récupérateurs épars utilisent des techniques de recherche traditionnelles telles que la fréquence des termes et la fréquence inverse des documents (TF-IDF) ou BM25 pour faire correspondre les requêtes aux documents en fonction de mots-clés. Par exemple, une recherche sur « collation saine » peut produire un vecteur épars qui s'étend et attribue des pondérations à des termes connexes tels que ["pomme" (3.0), "carotte" (2.5), "vitamine" (1.2)], tandis que tous les autres termes du vocabulaire ont une pondération nulle. Cette structure est hautement compatible avec les index inversés traditionnels, ce qui permet une recherche efficace.

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

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 :

  1. 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.
  2. 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.