Remarque : pour des informations importantes sur la recherche vectorielle, consultez la partie 1 de notre Introduction à la recherche sémantique : Des mots-clés aux vecteurs.
Lors de la création d’une application de recherche de vecteurs, vous allez finir par gérer de nombreux vecteurs, également appelés intégrations. Et l’une des opérations les plus courantes dans ces applications consiste à trouver d’autres vecteurs à proximité. Une base de données vectorielles stocke non seulement les intégrations, mais facilite également ces opérations de recherche courantes sur celles-ci.
La raison pour laquelle il est utile de trouver des vecteurs proches est que les éléments sémantiquement similaires se retrouvent proches les uns des autres dans l’espace d’intégration. En d’autres termes, trouver les voisins les plus proches est l’opération utilisée pour retrouver des objets similaires. Avec les schémas d’intégration disponibles pour le texte multilingue, les images, les sons, les données et de nombreux autres cas d’utilisation, il s’agit d’une fonctionnalité intéressante.
Génération d’intégrations
Un point de décision clé dans le développement d’une application de recherche sémantique utilisant des vecteurs consiste à choisir le service d’intégration à utiliser. Chaque élément sur lequel vous souhaitez effectuer une recherche devra être traité pour produire une intégration, tout comme chaque requête. En fonction de votre charge de travail, la préparation de ces intégrations peut entraîner des frais généraux importants. Si le fournisseur d’intégration se trouve dans le cloud, la disponibilité de votre système, même pour les requêtes, dépendra de la disponibilité du fournisseur.
Il s’agit d’une décision qui doit être soigneusement prise en considération, car la modification des intégrations impliquera normalement de repeupler l’ensemble de la base de données, ce qui est une proposition coûteuse. Différents modèles produisent des intégrations dans un espace d’intégration différent, de sorte que les intégrations ne sont généralement pas comparables lorsqu’elles sont générées avec différents modèles. Certaines bases de données vectorielles permettent cependant de stocker plusieurs intégrations pour un élément donné.
Un service d’intégration de texte hébergé dans le cloud populaire est Ada v2 d’OpenAI. Le traitement d’un million de jetons coûte quelques centimes et est largement utilisé dans différents secteurs. Google, Microsoft, HuggingFace et d’autres proposent également des options en ligne.
Si vos données sont trop sensibles pour être envoyées hors de vos murs, ou si la disponibilité du système est une préoccupation majeure, il est possible de produire localement des intégrations. Certaines bibliothèques populaires pour ce faire incluent Transformateurs de phrases, GénSimet plusieurs frameworks de traitement du langage naturel (NLP).
Pour le contenu autre que le texte, il existe une grande variété de modèles d’intégration possibles. Par exemple, SentenceTransfomers permet aux images et au texte d’être dans le même espace d’intégration, afin qu’une application puisse trouver des images similaires à des mots, et vice versa. Une multitude de modèles différents sont disponibles, et il s’agit d’un domaine de développement en croissance rapide.
Recherche du voisin le plus proche
Qu’entend-on précisément par vecteurs « proches » ? Pour déterminer si les vecteurs sont sémantiquement similaires (ou différents), vous devrez calculer les distances, avec une fonction appelée a mesure de distance. (Vous pouvez voir cela aussi appelé un métrique, qui a une définition plus stricte ; dans la pratique, les termes sont souvent utilisés de manière interchangeable.) En règle générale, une base de données vectorielles aura des index optimisés basés sur un ensemble de mesures disponibles. Voici quelques-uns des plus courants :
Une distance directe et en ligne droite entre deux points est appelée une Métrique de distance euclidienneou parfois L2, et est largement pris en charge. Le calcul en deux dimensions, utilisant x et y pour représenter le changement le long d’un axe, est sqrt(x^2 + y^2) — mais gardez à l’esprit que les vecteurs réels peuvent avoir des milliers de dimensions ou plus, et tous ces termes doivent être calculés.
Un autre est le Mesure de distance de Manhattanappelé quelques fois L1. C’est comme euclidien si vous sautez toutes les multiplications et la racine carrée, en d’autres termes, dans la même notation qu’avant, simplement abs(x) + abs(y). Pensez-y comme à la distance que vous auriez besoin de parcourir, en suivant uniquement des chemins à angle droit sur une grille.
Dans certains cas, l’angle entre deux vecteurs peut être utilisé comme mesure. UN produit scalaireou produit intérieur, est l’outil mathématique utilisé dans ce cas, et certains matériels sont spécialement optimisés pour ces calculs. Il intègre l’angle entre les vecteurs ainsi que leurs longueurs. En revanche, un mesure du cosinus ou similarité cosinus ne prend en compte que les angles, produisant une valeur comprise entre 1,0 (vecteurs pointant dans la même direction) et 0 (vecteurs orthogonaux) à -1,0 (vecteurs distants de 180 degrés).
Il existe un certain nombre de mesures de distance spécialisées, mais celles-ci sont moins couramment mises en œuvre « prêtes à l’emploi ». De nombreuses bases de données vectorielles permettent d’intégrer des mesures de distance personnalisées au système.
Quelle mesure de distance choisir ? Souvent, la documentation d’un modèle d’intégration indique ce qu’il faut utiliser ; vous devez suivre ces conseils. Sinon, Euclidien est un bon point de départ, à moins que vous n’ayez des raisons spécifiques de penser autrement. Il peut être utile d’expérimenter différentes mesures de distance pour voir laquelle fonctionne le mieux dans votre application.
Sans quelques astuces astucieuses, pour trouver le point le plus proche dans l’espace d’intégration, dans le pire des cas, la base de données devrait calculer la mesure de distance entre un vecteur cible et tous les autres vecteurs du système, puis trier la liste résultante. Cela devient rapidement incontrôlable à mesure que la taille de la base de données augmente. En conséquence, toutes les bases de données de niveau production incluent voisin le plus proche (ANNE) algorithmes. Ceux-ci échangent un tout petit peu de précision pour de bien meilleures performances. La recherche sur les algorithmes ANN reste un sujet brûlant, et une mise en œuvre solide de celui-ci peut être un facteur clé dans le choix d’une base de données vectorielles.
Sélection d’une base de données vectorielles
Maintenant que nous avons discuté de certains des éléments clés pris en charge par les bases de données vectorielles (stockage des intégrations et calcul de la similarité des vecteurs), comment devez-vous procéder pour sélectionner une base de données pour votre application ?
Les performances de recherche, mesurées par le temps nécessaire pour résoudre les requêtes sur les index vectoriels, sont ici une considération primordiale. Il est utile de comprendre comment une base de données implémente l’indexation et la correspondance approximatives du voisin le plus proche, car cela affectera les performances et l’évolutivité de votre application. Mais étudiez également les performances de mise à jour, la latence entre l’ajout de nouveaux vecteurs et leur apparition dans les résultats. L’interrogation et l’ingestion simultanées de données vectorielles peuvent également avoir des implications en termes de performances. Assurez-vous donc de tester cela si vous prévoyez de faire les deux simultanément.
Ayez une bonne idée de l’ampleur de votre projet et de la vitesse à laquelle vous attendez une croissance de vos utilisateurs et de vos données vectorielles. Combien d’intégrations devrez-vous stocker ? La recherche vectorielle à l’échelle d’un milliard est certainement réalisable aujourd’hui. Votre base de données vectorielle peut-elle évoluer pour répondre aux exigences QPS de votre application ? Les performances se dégradent-elles à mesure que l’échelle des données vectorielles augmente ? Même si la base de données utilisée pour le prototypage importe moins, vous souhaiterez réfléchir plus en profondeur à ce qu’il faudrait pour mettre en production votre application de recherche vectorielle.
Les applications de recherche de vecteurs nécessitent également souvent un filtrage des métadonnées. Il est donc judicieux de comprendre comment ce filtrage est effectué et quelle est son efficacité lors de la recherche de bases de données vectorielles. La base de données pré-filtre-t-elle, post-filtre-t-elle ou recherche-t-elle et filtre-t-elle en une seule étape afin de filtrer les résultats de la recherche vectorielle à l’aide de métadonnées ? Différentes approches auront des implications différentes sur l’efficacité de votre recherche vectorielle.
Une chose souvent négligée à propos des bases de données vectorielles est qu’elles doivent également être de bonnes bases de données ! Ceux qui font du bon travail en gérant le contenu et les métadonnées à l’échelle requise devraient figurer en haut de votre liste. Votre analyse doit inclure des préoccupations communes à toutes les bases de données, telles que les contrôles d’accès, la facilité d’administration, la fiabilité et la disponibilité, ainsi que les coûts d’exploitation.
Conclusion
Le cas d’utilisation le plus courant aujourd’hui pour les bases de données vectorielles consiste probablement à compléter les grands modèles linguistiques (LLM) dans le cadre d’un flux de travail piloté par l’IA. Il s’agit d’outils puissants pour lesquels l’industrie ne fait qu’effleurer la surface de ce qui est possible. Soyez averti : cette technologie étonnante est susceptible de vous inspirer de nouvelles idées sur de nouvelles applications et possibilités pour votre pile de recherche et votre entreprise.
Découvrez comment Rockset prend en charge la recherche vectorielle ici.