De la misère à la richesse
De la misère à la richesse Un conte de transformation
10 Applications de la recherche vectorielle pour comprendre profondément vos données et modèles
Alors que les modèles linguistiques de grande taille (LLMs) prennent le monde d’assaut, les moteurs de recherche vectorielle les ont accompagnés. Les bases de données vectorielles constituent le socle des systèmes de mémoire à long terme pour les LLMs.
En trouvant efficacement des informations pertinentes à transmettre en tant que contexte au modèle linguistique, les moteurs de recherche vectorielle peuvent fournir des informations à jour au-delà de la date de fin de l’entraînement et améliorer la qualité de la sortie du modèle sans ajustement fin. Ce processus, couramment appelé récupération augmentée de génération (RAG), a propulsé le défi algorithmique autrefois ésotérique de la recherche d’un voisin le plus proche approximatif (ANN) sous les feux de la rampe !
En plein milieu de toute cette agitation, on pourrait pardonner à quelqu’un de penser que les moteurs de recherche vectorielle sont indissociablement liés aux modèles linguistiques de grande taille. Mais il y a tellement plus à cette histoire. La recherche vectorielle a une pléthore d’applications puissantes qui vont bien au-delà de l’amélioration de la RAG pour les LLMs !
Dans cet article, je vous montrerai dix de mes utilisations préférées de la recherche vectorielle pour comprendre les données, explorer les données, interpréter les modèles, et plus encore.
- FineShare Review La meilleure caméra virtuelle IA en 2023 ?
- Maîtriser l’Univers des Données Étapes Clés pour une Carrière Florissante en Science des Données
- Transformer la recherche d’entreprise avec l’IA générative
Voici les applications que nous allons couvrir, dans un ordre approximatif de complexité croissante :
- Recherche de similarité d’images
- Recherche inversée d’images
- Recherche de similarité d’objets
- Recherche robuste de documents OCR
- Recherche sémantique
- Récupération croisée de modalités
- Exploration de similarité perceptuelle
- Comparaison des représentations de modèle
- Interpolation de concepts
- Traversée de l’espace de concepts
Recherche de similarité d’images
Peut-être le moyen le plus simple de commencer est la recherche de similarité d’images. Dans cette tâche, vous disposez d’un ensemble de données constitué d’images – cela peut être n’importe quoi, d’un album photo personnel à un référentiel massif de milliards d’images capturées par des milliers de caméras réparties sur plusieurs années.
La configuration est simple : calculez des embeddings pour chaque image de cet ensemble de données et générez un index vectoriel à partir de ces vecteurs d’embedding. Après cette première étape de calcul, aucune autre inférence n’est requise. Une excellente façon d’explorer la structure de votre ensemble de données est de sélectionner une image de l’ensemble de données et de rechercher dans l’index vectoriel les k
voisins les plus proches – les images les plus similaires. Cela peut vous donner une idée intuitive de la densité de la population de l’espace des images autour des images de recherche.
Pour plus d’informations et le code de travail, voir ici.
Recherche d’image inversée
Dans le même ordre d’idées, une extension naturelle de la recherche de similarité d’images consiste à trouver les images les plus similaires dans l’ensemble de données par rapport à une image externe. Il peut s’agir d’une image de votre système de fichiers local ou d’une image d’Internet !
Pour effectuer une recherche d’image inversée, vous créez l’indice vectoriel pour l’ensemble de données comme dans l’exemple de recherche de similarité d’images. La différence intervient lors de l’exécution, lorsque vous calculez l’incorporation pour l’image de requête, puis interrogez la base de données vectorielle avec ce vecteur.
Pour plus d’informations et le code de travail, voir ici.
Recherche de similarité d’objets
Si vous souhaitez approfondir le contenu des images, la recherche de similarité d’objets, ou de “patchs”, peut être ce que vous recherchez. Un exemple en est la réidentification de personne, où vous avez une seule image avec une personne d’intérêt, et vous voulez trouver toutes les occurrences de cette personne dans votre ensemble de données.
La personne peut prendre seulement de petites portions de chaque image, de sorte que les incrustations pour les images entières dans lesquelles ils se trouvent peuvent dépendre fortement du contenu des autres images. Par exemple, il peut y avoir plusieurs personnes sur une image.
Une meilleure solution consiste à traiter chaque patch de détection d’objet comme s’il s’agissait d’une entité distincte et à calculer une incorporation pour chacun. Ensuite, créez un index vectoriel avec ces incorporations de patch, et exécutez une recherche de similarité contre un patch de la personne que vous souhaitez réidentifier. Comme point de départ, vous voudrez peut-être essayer d’utiliser un modèle ResNet.
Deux subtilités ici :
- Dans l’index vectoriel, vous devez stocker des métadonnées qui font correspondre chaque patch à son image correspondante dans l’ensemble de données.
- Vous devrez exécuter un modèle de détection d’objet pour générer ces patchs de détection avant d’instancier l’index. Vous voudrez peut-être également ne calculer les incorporations de patch que pour certaines classes d’objets, comme
personne
, et pas pour d’autres –chaise
,table
, etc.
Pour plus d’informations et le code de travail, voir ici.
Recherche robuste de documents OCR
La reconnaissance optique de caractères (OCR) est une technique qui vous permet de numériser des documents tels que des notes manuscrites, des anciens articles de journaux, des dossiers médicaux et ces lettres d’amour cachées dans votre placard. Les moteurs OCR comme Tesseract et PaddleOCR fonctionnent en identifiant les caractères et symboles individuels dans les images et en créant des blocs de texte continus – pensez à des paragraphes.
Une fois que vous avez ce texte, vous pouvez effectuer des recherches de mots-clés traditionnelles sur les blocs de texte prédits, comme illustré ici. Cependant, cette méthode de recherche est susceptible de comporter des erreurs d’un seul caractère. Si le moteur OCR reconnaît accidentellement un “l” comme un “1”, une recherche de mot-clé pour “contrôle” échouerait (quelle ironie!).
Nous pouvons surmonter ce défi en utilisant la recherche vectorielle ! Intégrez les blocs de texte à l’aide d’un modèle d’intégration de texte comme GTE-base de la bibliothèque Sentence Transformers de Hugging Face, et créez un index vectoriel. Nous pouvons ensuite effectuer des recherches floues et/ou sémantiques au sein de nos documents numérisés en intégrant le texte de recherche et en interrogeant l’index. En gros, les blocs de texte de ces documents sont analogues aux patchs de détection d’objet dans les recherches de similarité d’objets !
Pour plus d’informations et du code fonctionnel, consultez ici.
Recherche sémantique
Avec les modèles multimodaux, nous pouvons étendre la notion de recherche sémantique du texte aux images. Des modèles comme CLIP, OpenCLIP et MetaCLIP ont été entraînés à trouver des représentations communes d’images et de leurs légendes, de sorte que le vecteur d’intégration pour une image d’un chien soit très similaire au vecteur d’intégration pour la légende texte “une photo d’un chien”.
Cela signifie qu’il est judicieux (c’est-à-dire que nous sommes “autorisés”) de créer un index vectoriel à partir des intégrations CLIP des images de notre ensemble de données, puis d’exécuter une requête de recherche vectorielle contre cette base de données vectorielle où le vecteur de requête est l’intégration CLIP d’une indication textuelle.
💡 En traitant les images individuelles d’une vidéo comme des images et en ajoutant l’intégration de chaque image à un index vectoriel, vous pouvez également effectuer une recherche sémantique à travers des vidéos !
Pour plus d’informations et du code fonctionnel, consultez ici.
Récupération croisée modale
La récupération croisée modale d’images correspondant à un fichier audio d’un train. Implémentée à l’aide de ImageBind avec un index vectoriel Qdrant, sur la division de validation COCO 2017. Vidéo gracieuseté de l’auteur.
En un sens, la recherche sémantique à travers un ensemble de données d’images est une forme de récupération croisée modale. Une façon de le conceptualiser est que nous récupérons les images correspondant à une requête textuelle. Avec des modèles comme ImageBind, nous pouvons aller encore plus loin !
ImageBind intègre des données provenant de six modalités différentes dans le même espace d’intégration : images, texte, audio, profondeur, thermique et unité de mesure d’inertie (IMU). Cela signifie que nous pouvons générer un index vectoriel pour des données dans l’une de ces modalités et interroger cet index avec un échantillon de n’importe quelle autre modalité. Par exemple, nous pouvons prendre un extrait audio d’un klaxon de voiture et récupérer toutes les images de voitures !
Pour plus d’informations et du code fonctionnel, consultez ici.
Exploration de similitude perceptuelle
Une partie très importante de l’histoire de la recherche vectorielle que nous n’avons qu’effleurée jusqu’à présent est le modèle. Les éléments de notre index vectoriel sont des intégrations provenant d’un modèle. Ces intégrations peuvent être la sortie finale d’un modèle d’intégration sur mesure, ou ils peuvent être des représentations cachées ou latentes d’un modèle entraîné sur une autre tâche comme la classification.
Quoi qu’il en soit, le modèle que nous utilisons pour incorporer nos échantillons peut avoir un impact substantiel sur les échantillons qui sont considérés comme les plus similaires aux autres échantillons. Un modèle CLIP capture des concepts sémantiques, mais a du mal à représenter les informations structurelles à l’intérieur des images. Un modèle ResNet, en revanche, est très bon pour représenter la similitude dans la structure et la mise en page, opérant au niveau des pixels et des patches. Ensuite, il existe des modèles d’incorporation comme DreamSim, qui visent à combler le fossé et à capturer une similarité de niveau intermédiaire – alignant la notion de similarité du modèle avec ce qui est perçu par les humains.
La recherche vectorielle nous permet d’explorer comment un modèle “voit” le monde. En créant un index vectoriel séparé pour chaque modèle qui nous intéresse (sur les mêmes données), nous pouvons rapidement développer une intuition sur la façon dont différents modèles représentent les données en interne, pour ainsi dire.
Voici un exemple présentant des recherches de similarité avec les incorporations de modèles CLIP, ResNet et DreamSim pour la même image de requête sur le jeu de données NIGHTS :
Pour plus d’informations et du code fonctionnel, voir ici.
Comparaison des représentations des modèles
Nous pouvons obtenir un nouvel éclairage sur les différences entre deux modèles en combinant la recherche vectorielle et des techniques de réduction de dimension comme la méthode d’approximation de variété uniforme (UMAP). Voici comment :
Les embeddings de chaque modèle contiennent des informations sur la manière dont le modèle représente les données. En utilisant UMAP (ou t-SNE ou PCA), nous pouvons générer des représentations de plus basse dimension (2D ou 3D) des embeddings du modèle1. Ce faisant, nous sacrifions certains détails, mais espérons préserver des informations sur les échantillons perçus comme similaires à d’autres échantillons. Ce que nous gagnons, c’est la possibilité de visualiser ces données.
Avec la visualisation des embeddings du modèle1 en arrière-plan, nous pouvons choisir un point sur ce graphique et effectuer une requête de recherche vectorielle sur cet échantillon par rapport aux embeddings du modèle2. Vous pouvez alors voir où se situent les points récupérés dans la visualisation en 2D !
L’exemple ci-dessus utilise le même jeu de données NIGHTS que dans la dernière section, en visualisant les embeddings de ResNet, qui capturent une similarité plus compositionnelle et structurelle, et en effectuant une recherche de similarité avec les embeddings de CLIP (sémantiques).
Interpolation de concepts
Nous arrivons à la fin des dix applications, mais heureusement pour vous, j’ai conservé quelques-unes des meilleures pour la fin. Jusqu’à présent, les seuls vecteurs avec lesquels nous avons travaillé sont des embeddings : l’index des vecteurs est rempli avec des embeddings, et les vecteurs de requête sont également des embeddings. Mais parfois, il y a une structure supplémentaire dans l’espace des embeddings que nous pouvons exploiter pour interagir de manière plus dynamique avec nos données.
Un exemple d’interaction dynamique est ce que j’appelle “l’interpolation de concepts”. Voici comment cela fonctionne : prenez un jeu de données d’images et générez un index de vecteurs à l’aide d’un modèle multimodal (texte et image). Choisissez deux prompts textuels tels que “ensoleillé” et “pluvieux”, qui servent de concepts, et définissez une valeur alpha
dans l’intervalle [0,1]
. Nous pouvons générer les vecteurs d’embedding pour chaque concept textuel, et additionner ces vecteurs avec une combinaison linéaire spécifiée par alpha
. Ensuite, nous normalisons le vecteur et l’utilisons comme requête pour notre index de vecteurs d’embeddings d’images.
Parce que nous interpolons linéairement entre les vecteurs d’embedding des deux prompts textuels (concepts), nous interpolons également de manière très souple entre les concepts eux-mêmes ! Nous pouvons changer dynamiquement alpha
et interroger notre base de données vectorielle à chaque interaction.
💡Cette notion d’interpolation de concepts est expérimentale (comprenez : ce n’est pas toujours une opération bien définie). Je trouve que cela fonctionne mieux lorsque les prompts textuels sont conceptuellement liés et que le jeu de données est suffisamment diversifié pour produire des résultats différents à différents endroits de la plage d’interpolation.
Pour plus d’informations et du code fonctionnel, consultez ici.
Parcours de l’espace de concepts
Enfin, mais certainement pas le moindre, nous avons ce que j’appelle le “parcours de l’espace de concepts”. Comme pour l’interpolation de concepts, commencez par un jeu de données d’images et générer des embeddings avec un modèle multimodal comme CLIP. Ensuite, sélectionnez une image du jeu de données. Cette image servira de point de départ, à partir duquel vous allez “traverser” l’espace des concepts.
À partir de là, vous pouvez définir une direction dans laquelle vous souhaitez vous déplacer en fournissant une chaîne de texte comme substitut à un concept. Définissez l’amplitude du “pas” que vous souhaitez faire dans cette direction, et le vecteur d’embedding de la chaîne de texte (avec un coefficient multiplicatif) sera ajouté au vecteur d’embedding de l’image initiale. Le vecteur “destination” sera utilisé pour interroger la base de données vectorielle. Vous pouvez ajouter arbitrairement de nombreux concepts en quantités arbitraires, et observer comment l’ensemble des images récupérées se met à jour en temps réel.
Tout comme avec “l’interpolation de concept”, ce processus n’est pas toujours strictement bien défini. Cependant, je le trouve captivant et il fonctionne raisonnablement bien lorsque le coefficient appliqué aux représentations de texte est suffisamment élevé pour qu’ils soient pris en compte de manière adéquate.
Pour plus d’informations et du code fonctionnel, voir ici.
Conclusion
Les moteurs de recherche vectoriels sont des outils incroyablement puissants. Certes, ils sont les stars du meilleur spectacle en ville, le RAG-time. Mais les bases de données vectorielles sont bien plus polyvalentes que cela. Elles permettent une compréhension plus approfondie des données, offrent un aperçu de la façon dont les modèles représentent ces données et ouvrent de nouvelles perspectives pour interagir avec nos données.
Les bases de données vectorielles ne sont pas limitées aux LLM. Elles se révèlent utiles chaque fois que des représentations vectorielles sont impliquées, et les représentations vectorielles se situent précisément à l’intersection du modèle et des données. Plus nous comprenons rigoureusement la structure des espaces vectoriels, plus nos interactions avec les données et les modèles, rendues possibles par la recherche vectorielle, deviendront dynamiques et omniprésentes.
Si vous avez trouvé ce post intéressant, vous voudrez peut-être également consulter ces articles propulsés par la recherche vectorielle :
- 🔗 Comment j’ai transformé les documents de mon entreprise en base de données interrogeable avec OpenAI
- 🔗 Comment j’ai transformé ChatGPT en un traducteur SQL-Like pour les jeux de données d’images et de vidéos
- 🔗 Ce que j’ai appris en poussant l’ingénierie Prompt à la limite
We will continue to update IPGirl; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- LlamaIndex Améliorez facilement vos candidatures LLM avec des données personnalisées
- L’impact des grands modèles de langage sur l’analyse des textes médicaux
- La simulation axée sur les hypothèses comme une boussole pour naviguer dans un avenir incertain
- Optimiser l’IA pour amplifier les capacités humaines en matière de cybersécurité
- ReactJS Avec ChatGPT Intégrer l’IA Conversationnelle dans Vos Applications Web
- Les 5 meilleures plateformes et outils de machine learning dans le cloud
- Rencontrez LoftQ LoRA-Fine-Tuning-Aware Quantization pour les grands modèles de langage