À retenir
- Les plongements textuels transforment des mots, des phrases ou des documents en vecteurs afin que les logiciels puissent comparer leur sens plutôt que seulement des mots-clés.
- Les plongements sont la couche de base de la recherche sémantique, des recommandations, du regroupement, de la détection des doublons et de nombreux systèmes RAG.
- Le test important est la qualité de la recherche : le bon contexte revient-il pour les questions que les utilisateurs posent réellement?
Les grands modèles de langage.
Vous avez certainement déjà entendu ces mots. Ils représentent un type précis d’algorithmes fondés sur l’apprentissage automatique qui comprennent et peuvent générer du langage, un domaine souvent appelé traitement du langage naturel ou NLP.
Vous avez certainement entendu parler du modèle de langage le plus connu et le plus puissant : GPT-3. Comme je l’ai expliqué dans la vidéo qui le présente, GPT-3 peut recevoir du langage, le comprendre et générer du langage en retour. Mais attention, il ne le comprend pas réellement. En fait, il est loin de vraiment comprendre. GPT-3 et les autres modèles fondés sur le langage utilisent simplement ce que nous appelons des dictionnaires de mots pour les représenter par des nombres, mémorisent leur position dans la phrase, et c’est tout.


À l’aide de quelques nombres et indices positionnels appelés plongements, ces modèles peuvent regrouper des phrases semblables. Cela signifie aussi qu’ils peuvent en quelque sorte comprendre les phrases en les comparant à des phrases connues, par exemple celles de notre jeu de données. Les modèles de synthèse d’images qui reçoivent une phrase pour générer une image suivent le même processus. Ils ne comprennent pas vraiment la phrase, mais peuvent la comparer à des images semblables et produire une certaine compréhension des concepts qu’elle contient.
Dans cet article, nous verrons ce que ces puissants modèles d’apprentissage automatique perçoivent à la place des mots, soit les plongements lexicaux, ainsi que la façon de les produire avec un exemple fourni par Cohere.
Nous avons parlé des plongements et de GPT-3, mais quel est le lien entre les deux? Les plongements sont ce que les modèles voient et la façon dont ils traitent les mots que nous connaissons. Pourquoi les utiliser? Parce que, pour le moment, les machines ne peuvent pas traiter des mots et que nous avons besoin de nombres pour entraîner ces grands modèles. Grâce à un jeu de données soigneusement construit, nous pouvons utiliser les mathématiques pour mesurer la distance entre les plongements et corriger notre réseau selon cette distance. Nos prédictions se rapprochent ainsi de façon itérative du vrai sens et les résultats s’améliorent.


Les plongements sont aussi ce que des modèles comme CLIP, Stable Diffusion et DALL-E utilisent pour comprendre des phrases et générer des images. Ils comparent les images et le texte dans le même espace de plongement. Le modèle ne comprend donc ni le texte ni les images, mais il peut déterminer si une image ressemble à un texte précis. Si nous trouvons suffisamment de paires image-description, nous pouvons entraîner un immense et puissant modèle comme DALL-E à recevoir une phrase, à la transformer en plongement, à trouver son équivalent visuel le plus proche et à le générer.
L’apprentissage automatique appliqué au texte consiste donc à comparer des plongements, mais comment les obtenons-nous?

Nous utilisons un autre modèle entraîné à trouver la meilleure façon de générer des plongements semblables pour des phrases semblables, tout en préservant les différences de sens entre des mots identiques, contrairement à un simple dictionnaire un à un. Les phrases sont habituellement représentées avec des jetons spéciaux qui marquent le début et la fin du texte.

Comme je l’ai dit, nous avons ensuite nos plongements positionnels, qui indiquent la position de chaque mot par rapport aux autres, souvent à l’aide de fonctions sinusoïdales. J’ai ajouté un excellent article à ce sujet dans les références si vous souhaitez en apprendre davantage.
Enfin, nous avons nos plongements lexicaux. Nous commençons par séparer tous les mots dans un tableau, comme une table de mots. À partir de ce moment, ce ne sont plus des mots. Ce sont simplement des jetons, ou des nombres, provenant de tout le dictionnaire anglais.
Vous pouvez voir ici que tous les mots sont maintenant représentés par un nombre qui indique leur position dans le dictionnaire. Le mot « bank » reçoit donc le même nombre dans les deux cas, même si son sens change dans nos phrases.
Nous ajoutons maintenant un peu d’intelligence au processus, mais pas trop. Un modèle entraîné reçoit cette nouvelle liste de nombres et l’encode davantage dans une autre liste de nombres qui comprend mieux la phrase. Par exemple, il n’utiliserait plus le même plongement pour les deux occurrences du mot « bank ». C’est possible parce que le modèle a été entraîné sur une grande quantité de données textuelles annotées. Il a appris à encoder près les unes des autres les phrases qui ont un sens semblable, et loin les unes des autres celles qui s’opposent. Nos plongements dépendent donc moins des mots précis que nous avons choisis que la simple association initiale un à un entre un mot et son indice.

Exemple de phrase tiré de Chris McCormick.
Voici à quoi ressemble l’utilisation des plongements dans un très court exemple de NLP. Vous trouverez plus de liens ci-dessous pour découvrir les plongements et apprendre à les programmer vous-même.
Nous allons prendre quelques publications de Hacker News et construire un modèle capable de retrouver la publication la plus semblable à une nouvelle phrase d’entrée.
Pour commencer, il nous faut un jeu de données. Dans ce cas-ci, il s’agit d’un ensemble préencodé de trois mille publications de Hacker News déjà transformées en nombres.

Image tirée du carnet de Cohere sur les plongements textuels.
Nous construisons ensuite une mémoire qui conserve tous ces plongements pour de futures comparaisons. En gros, nous les enregistrons simplement de façon efficace.

Image tirée du carnet de Cohere sur les plongements textuels.
Lorsqu’une nouvelle requête arrive, par exemple « Quelle est votre réflexion la plus profonde sur la vie? », nous pouvons générer son plongement avec le même réseau de plongement. Il s’agit habituellement de BERT ou d’une de ses versions. Nous comparons ensuite la distance dans l’espace de plongement à toutes les autres publications de Hacker News dans notre mémoire. Il est très important de toujours utiliser le même réseau, que ce soit pour générer le jeu de données ou pour l’interroger. Comme je l’ai dit, il n’y a aucune véritable intelligence ici et le modèle ne comprend pas réellement les mots. Il a simplement appris à placer les phrases semblables près les unes des autres dans l’espace de plongement, rien de plus.

Image tirée du carnet de Cohere sur les plongements textuels.
Si vous envoyez votre phrase à un autre réseau pour produire un plongement, puis comparez ce plongement à ceux créés par le premier réseau, rien ne fonctionnera.
Ce serait comme les personnes qui ont essayé de me parler en hébreu à l’ECCV la semaine dernière. Ce langage ne se trouvait simplement pas dans un espace de plongement que mon cerveau pouvait comprendre.
Heureusement pour nous, notre cerveau peut apprendre à passer d’un espace de plongement à un autre, comme je peux le faire avec le français et l’anglais. Cela demande toutefois beaucoup de travail et de pratique, et il en va de même pour les machines.

Quoi qu’il en soit, revenons à notre problème. Nous avons pu trouver les publications les plus semblables. C’est plutôt génial, mais comment y sommes-nous arrivés? Comme je l’ai mentionné, le réseau, BERT dans ce cas-ci, apprend à créer des plongements semblables à partir de phrases semblables. Nous pouvons même les visualiser en deux dimensions comme ceci, où deux points rapprochés représentent des sujets similaires.

Image tirée du carnet de Cohere sur les plongements textuels.
Une fois ces plongements obtenus, vous pouvez accomplir bien d’autres choses, comme extraire des mots-clés, effectuer une recherche sémantique, analyser les sentiments ou même générer des images, comme nous l’avons mentionné et démontré dans des vidéos précédentes. J’ai de nombreuses vidéos sur ces sujets et j’ai ajouté quelques carnets intéressants pour apprendre à expérimenter avec les encodages, grâce à l’équipe de Cohere.
Merci de m’avoir lu!
Louis
Références
►Tutoriel sur les plongements lexicaux de BERT : https://mccormickml.com/2019/05/14/BERT-word-embeddings-tutorial/#why-bert-embeddings
►Carnet de Cohere utilisé pour l’exemple de code : https://colab.research.google.com/github/cohere-ai/notebooks/blob/main/notebooks/Basic_Semantic_Search.ipynb
►Mon infolettre (une nouvelle application de l’IA expliquée chaque semaine par courriel!) : /fr/newsletter/
FAQ
Qu’est-ce qu’un plongement textuel?
Un plongement textuel est une représentation vectorielle qui place les textes ayant un sens semblable plus près les uns des autres dans un espace mathématique.
Pourquoi les plongements sont-ils utiles?
Ils permettent aux applications de comparer le sens, ce qui aide la recherche sémantique, les recommandations, le regroupement, la classification et la recherche de contexte pour les LLMs.
Comment les plongements sont-ils utilisés dans un système RAG?
Un système RAG crée des plongements pour les documents et les requêtes, récupère les sections les plus pertinentes, puis fournit ce contexte à un modèle de langage.
Qu’est-ce qui peut mal fonctionner avec les plongements textuels?
Ils peuvent récupérer la mauvaise section, manquer du vocabulaire rare, reproduire des biais ou bien fonctionner dans les exemples tout en échouant avec de vraies requêtes.
Comment les développeurs devraient-ils évaluer les plongements?
Créez des requêtes réalistes, indiquez les résultats attendus, mesurez la qualité de la recherche et examinez les échecs avant de changer de modèle ou de découpage.

