Google, eBay et d’autres ont la possibilité de trouver des images « similaires ». Vous êtes-vous déjà demandé comment cela fonctionnait ? Cette fonctionnalité transcende ce qui est possible avec la recherche par mot-clé ordinaire et utilise à la place la recherche sémantique pour renvoyer des images similaires ou associées. Ce blog couvrira un bref historique de la recherche sémantique, de son utilisation de vecteurs et de ses différences avec la recherche par mots clés.
Développer la compréhension avec la recherche sémantique
La recherche textuelle traditionnelle comporte une limitation fondamentale : la correspondance exacte. Tout ce qu’il peut faire, c’est vérifier, à grande échelle, si une requête correspond à du texte. Les moteurs haut de gamme contournent ce problème avec des astuces supplémentaires comme la lemmatisation et la recherche de radicaux, par exemple en faisant correspondre de manière équivalente « envoyer », « envoyé » ou « envoyer », mais lorsqu’une requête particulière exprime un concept avec un mot différent de celui du corpus (le ensemble de documents à rechercher), les requêtes échouent et les utilisateurs sont frustrés. En d’autres termes, le moteur de recherche n’a pas compréhension du corpus.
Notre cerveau ne fonctionne tout simplement pas comme les moteurs de recherche. Nous pensons en concepts et en idées. Au cours de notre vie, nous assemblons progressivement un modèle mental du monde, tout en construisant un paysage interne de pensées, de faits, de notions, d’abstractions et un réseau de connexions entre eux. Puisque des concepts apparentés vivent « à proximité » dans ce paysage, il est facile de rappeler quelque chose avec un mot différent mais apparenté qui correspond toujours au même concept.
Même si la recherche sur l’intelligence artificielle est loin de reproduire l’intelligence humaine, elle a produit des informations utiles qui permettent d’effectuer des recherches à un niveau plus élevé, ou sémantique, en faisant correspondre des concepts plutôt que des mots-clés. Les vecteurs, et recherche de vecteurssont au cœur de cette révolution.
Des mots-clés aux vecteurs
Une structure de données typique pour la recherche de texte est un index inversé, qui fonctionne un peu comme l’index situé à la fin d’un livre imprimé. Pour chaque mot-clé pertinent, l’index conserve une liste d’occurrences dans des documents particuliers du corpus ; la résolution d’une requête implique ensuite de manipuler ces listes pour calculer une liste classée de documents correspondants.
En revanche, la recherche vectorielle utilise une manière radicalement différente de représenter les éléments : les vecteurs. Notez que la phrase précédente est passée de parler de texte à un terme plus générique, éléments. Nous y reviendrons momentanément.
Qu’est-ce qu’un vecteur ? Simplement une liste ou un tableau de nombres (pensez, java.util.Vector par exemple), mais en mettant l’accent sur ses propriétés mathématiques. L’une des propriétés utiles des vecteurs, également appelés intégrations, est qu’ils forment un espace dans lequel les éléments sémantiquement similaires sont proches les uns des autres.

Dans l’espace vectoriel de la figure 1 ci-dessus, nous voyons qu’un CPU et un GPU sont conceptuellement proches. Une chips de pomme de terre est lointainement apparentée. Un CPA, ou comptable, bien que lexicalement similaire à un CPU, est assez différent.
L’histoire complète des vecteurs nécessite un bref voyage à travers un pays de réseaux neuronaux, d’intégrations et de milliers de dimensions.
Réseaux de neurones et intégrations
Les articles abondent décrivant la théorie et le fonctionnement des réseaux de neurones, qui sont librement calqué sur la façon dont les neurones biologiques s’interconnectent. Cette section donnera un bref rappel. Schématiquement, un réseau neuronal ressemble à la figure 2 :

Un réseau neuronal est constitué de couches de « neurones » dont chacune accepte plusieurs entrées avec des poids, additifs ou multiplicatifs, qu’elle combine en un signal de sortie. La configuration des couches dans un réseau neuronal varie considérablement selon les différentes applications, et la création des « hyperparamètres » appropriés pour un réseau neuronal nécessite une main experte.
Un rite de passage pour les étudiants en apprentissage automatique consiste à créer un réseau neuronal pour reconnaître les chiffres manuscrits à partir d’un ensemble de données appelé MNIST, qui comporte des images étiquetées de chiffres manuscrits, chacune mesurant 28 x 28 pixels. Dans ce cas, la couche la plus à gauche aurait besoin de 28 x 28 = 784 neurones, un recevant un signal de luminosité de chaque pixel. Une « couche cachée » intermédiaire possède un réseau dense de connexions avec la première couche. Habituellement, les réseaux neuronaux comportent de nombreuses couches cachées, mais ici, il n’y en a qu’une. Dans l’exemple MNIST, la couche de sortie aurait 10 neurones, représentant ce que le réseau « voit », à savoir les probabilités des chiffres 0 à 9.
Au départ, le réseau est essentiellement aléatoire. La formation du réseau implique de modifier à plusieurs reprises les poids pour les rendre un peu plus précis. Par exemple, une image nette d’un « 8 » devrait éclairer la sortie n°8 à 1,0, laissant les neuf autres à 0. Dans la mesure où ce n’est pas le cas, cela est considéré comme une erreur, qui peut être quantifiée mathématiquement. Avec quelques calculs intelligents, il est possible de revenir en arrière à partir du résultat, en poussant les poids pour réduire l’erreur globale dans un processus appelé rétropropagation. Entraîner un réseau de neurones est un problème d’optimisation : trouver une aiguille appropriée dans une vaste botte de foin.
Les entrées de pixels et les sorties numériques ont toutes une signification évidente. Mais après la formation, que représentent les couches cachées ? C’est une bonne question!
Dans le cas du MNIST, pour certains réseaux entraînés, un neurone particulier ou un groupe de neurones dans une couche cachée peut représenter un concept tel que « l’entrée contient un trait vertical » ou « l’entrée contient une boucle fermée ». Sans aucune orientation explicite, le processus de formation construit un modèle optimisé de son espace d’entrée. L’extraction de cela du réseau donne une intégration.
Vecteurs de texte et plus encore
Que se passe-t-il si nous entraînons un réseau de neurones sur du texte ?
L’un des premiers projets visant à populariser les vecteurs de mots s’appelle word2vec. Il entraîne un réseau neuronal avec une couche cachée de 100 à 1 000 neurones, produisant un intégration de mots.
Dans cet espace d’intégration, les mots apparentés sont proches les uns des autres. Mais des relations sémantiques encore plus riches peuvent être exprimées sous forme de vecteurs supplémentaires. Par exemple, le vecteur entre les mots ROI et PRINCE est presque le même que le vecteur entre REINE et PRINCESSE. L’addition vectorielle de base exprime des aspects sémantiques du langage qui n’avaient pas besoin d’être explicitement enseignés.
Étonnamment, ces techniques fonctionnent non seulement sur des mots isolés, mais également sur des phrases, voire des paragraphes entiers. Différentes langues coderont de manière à ce que les mots comparables soient proches les uns des autres dans l’espace d’intégration.
Des techniques analogues fonctionnent sur les images, l’audio, la vidéo, les données analytiques et tout ce sur quoi un réseau neuronal peut être formé. Certains intégrations « multimodales » permettent, par exemple, aux images et au texte de partager le même espace d’intégration. Une image de chien finirait à côté du texte « chien ». Cela ressemble à de la magie. Les requêtes peuvent être mappées sur l’espace d’intégration, et les vecteurs proches, qu’ils représentent du texte, des données ou toute autre chose, seront mappés au contenu pertinent.
Quelques utilisations de la recherche de vecteurs
En raison de son ascendance commune avec les LLM et les réseaux de neurones, la recherche vectorielle s’intègre naturellement dans les applications d’IA générative, fournissant souvent une récupération externe pour l’IA. Certaines des principales utilisations de ces types de cas d’utilisation sont :
- Ajout de « mémoire » à un LLM au-delà de la taille limitée de la fenêtre contextuelle
- Un chatbot qui trouve rapidement les sections de documents les plus pertinentes dans votre réseau d’entreprise et les transmet à un LLM pour les résumer ou comme réponses aux questions-réponses. (C’est ce qu’on appelle la génération augmentée de récupération)
De plus, la recherche vectorielle fonctionne très bien dans les domaines où l’expérience de recherche doit être plus proche de notre façon de penser, en particulier pour regrouper des éléments similaires, tels que :
- Rechercher dans des documents en plusieurs langues
- Trouver des images visuellement similaires ou des images similaires à des vidéos.
- Détection de fraude ou d’anomalie, par exemple si une transaction/un document/un e-mail particulier produit une intégration plus éloignée d’un groupe d’exemples plus typiques.
- Applications de recherche hybrides, utilisant à la fois la technologie des moteurs de recherche traditionnels et la recherche vectorielle pour combiner les atouts de chacun.
Parallèlement, la recherche traditionnelle basée sur des mots clés conserve ses atouts et reste utile pour de nombreuses applications, en particulier lorsqu’un utilisateur sait exactement ce qu’il recherche, notamment les données structurées, l’analyse linguistique, la découverte juridique et la recherche à facettes ou paramétrique.
Mais ce n’est qu’un petit avant-goût de ce qui est possible. La recherche de vecteurs gagne en popularité et alimente de plus en plus d’applications. Comment votre prochain projet utilisera-t-il la recherche vectorielle ?
Continuez votre apprentissage avec la partie 2 de notre Introduction à la recherche sémantique : –Embeddings, métriques de similarité et bases de données vectorielles.
Découvrez comment Rockset prend en charge la recherche vectorielle ici.