- Les embeddings constituent l’ossature sémantique des LLM, en transformant le texte en vecteurs numériques pour le rendre compréhensible par le modèle
- L’évolution des embeddings est passée par de nombreux changements, des techniques statistiques comme les vecteurs de comptage et le TF-IDF jusqu’aux approches modernes comme Word2Vec, BERT et la famille GPT
- Un bon embedding doit trouver un équilibre entre la préservation de la similarité sémantique des mots et le contrôle du nombre de dimensions ; dans les LLM, il est entraîné conjointement et optimisé pour les données d’apprentissage et la tâche visée
- Des méthodes d’embedding représentatives comme TF-IDF, Word2Vec et BERT sont expliquées à l’aide d’exemples et de visualisations ; en particulier, dans les LLM, les embeddings convertissent d’abord les tokens d’entrée en vecteurs de grande dimension, puis sont mis à jour hiérarchiquement selon le contexte
- Grâce à du code pratique, comme la couche d’embedding de Torch, et à des analyses graphiques de vecteurs d’embedding, l’article guide le lecteur vers une compréhension intuitive du fonctionnement réel des embeddings
Qu’est-ce qu’un embedding ?
- Un embedding est une technique qui transforme des données comme le texte, les images ou l’audio en vecteurs de grande dimension
- En NLP en particulier, il s’agit du processus qui convertit des mots ou des tokens en vecteurs afin de les rendre exploitables par l’ordinateur
- Les embeddings peuvent s’appliquer à différents types de données, mais cet article se concentre sur les embeddings de texte
Évolution et types d’embeddings
- Les premières techniques d’embedding reposaient surtout sur des approches statistiques comme les vecteurs de comptage, le TF-IDF ou les matrices de cooccurrence
- Ensuite sont apparus des embeddings fondés sur les réseaux de neurones, comme Word2Vec, GloVe et FastText, qui ont commencé à refléter la similarité sémantique dans l’espace vectoriel
- Avec les modèles basés sur les transformers comme BERT et GPT, l’embedding de chaque token est mis à jour après l’entrée pour intégrer progressivement l’information contextuelle à travers les couches (embeddings dynamiques/contextualisés)
Les conditions d’un bon embedding
Représentation sémantique (semantic representation)
- Les mots au sens proche occupent aussi des positions proches dans l’espace vectoriel
Exemple : cat et dog sont mappés de manière plus similaire que dog et strawberry
Taille de la dimension (dimensionality)
- Si la dimension d’embedding est trop petite, la capacité de représentation est insuffisante ; si elle est trop grande, on gaspille de la mémoire et on augmente le risque de surapprentissage
Exemple : GPT-2 utilise une dimension d’embedding minimale de 768
Technique d’embedding traditionnelle : TF-IDF
- Le TF-IDF calcule l’importance d’un mot en multipliant sa fréquence par sa rareté (fréquence inverse de document)
- TF : à quelle fréquence un mot apparaît dans un document
- IDF : à quel point ce mot est rare dans l’ensemble des documents
- Le résultat du TF-IDF est utilisé pour des analyses simples comme la recherche d’information ou l’extraction de mots-clés, mais il reflète mal la similarité sémantique
- Lorsqu’on le visualise, la plupart des mots se regroupent dans un même cluster, avec une faible séparation sémantique
Word2Vec
- Word2Vec est un embedding fondé sur les réseaux de neurones qui reflète efficacement les relations sémantiques dans l’espace vectoriel
- Il existe notamment les approches CBOW (prédire le mot central à partir des mots voisins) et Skipgram (prédire les mots voisins à partir du mot central)
- Grâce à l’entraînement, la matrice d’embedding de la couche cachée sert de vecteur sémantique pour les mots
- Des techniques d’optimisation comme le negative sampling permettent un apprentissage efficace même sur de grands volumes de données
- Avec des outils de visualisation comme TensorFlow Embedding Projector, on peut observer que les mots sémantiquement proches se regroupent en clusters
BERT et les embeddings basés sur les transformers
- BERT est un modèle transformer de type Encoder-only qui intègre dynamiquement l’information contextuelle à mesure que l’on progresse dans les couches
- Étape d’entrée : le tokenizer segmente le texte en tokens → conversion en vecteurs d’embedding de tokens → addition avec les embeddings positionnels
- Ensuite, en traversant plusieurs couches de transformer, les embeddings évoluent dynamiquement pour refléter l’information contextuelle
- Des tokens spéciaux comme
[CLS] et [SEP] servent aussi à gérer l’information globale de la phrase ou la séparation
- Après BERT, de nombreux LLM ont adopté cette approche d’embeddings dynamiques (contextualisés)
Structure et entraînement des embeddings dans les LLM
- Les embeddings des LLM sont implémentés comme une première couche (lookup table) qui convertit les tokens d’entrée en vecteurs de grande dimension
- Ils se présentent sous la forme d’une table qui reçoit des ID de tokens et renvoie les vecteurs d’embedding correspondants, comme avec
torch.nn.Embedding
- Pendant l’apprentissage, le LLM optimise aussi les poids de la couche d’embedding, ce qui affine les embeddings en fonction des données traitées et des objectifs du modèle
- Exemple : le modèle DeepSeek-R1-Distill-Qwen-1.5B utilise des vecteurs d’embedding de dimension 1536
Visualisation des embeddings et analyse en graphe
- À partir de la similarité entre vecteurs d’embedding (comme la similarité cosinus), on peut analyser l’espace d’embedding sous forme de graphe
- Exemple : il est possible de tokeniser la phrase
AI agents will be the most hot topic... et de visualiser les liens entre les tokens les plus similaires à partir de leurs embeddings
- Différentes variantes d’un même mot (par ex.
list, _list, List) présentent elles aussi souvent des embeddings similaires
Conclusion
- Les embeddings sont un élément central des LLM et du NLP : ils transforment les données d’entrée en vecteurs numériques afin que le modèle puisse traiter la structure sémantique et l’information contextuelle
- Même à l’ère des LLM, les principes fondamentaux et la structure des embeddings n’ont pas radicalement changé, et ils continuent à jouer un rôle crucial dans les performances et l’interprétation des modèles
- Grâce à des exemples de code intuitifs et à des supports de visualisation, il est possible de comprendre facilement le fonctionnement concret des embeddings
2 commentaires
king - man + woman = queen
Réactions sur Hacker News
Il est vraiment surprenant que les embeddings soient l’un des aspects les moins discutés de la pile LLM ; intuitivement, je pensais que c’était un élément qui influençait énormément la capacité du réseau à inférer des connexions sémantiques, mais les gens en parlent peu.
Le problème des embeddings, c’est qu’ils sont presque illisibles en dehors du modèle lui-même ; ils encodent bien le sens de la séquence d’entrée, mais cette information est tellement compressée pendant l’entraînement qu’elle ne peut être décodée que par la tête de décodage du modèle. Anthropic a mené une étude qui a rendu interprétables les features internes de Sonnet 3, mais cela reste coûteux car il faut entraîner en parallèle un réseau séparé pour interpréter les activations des couches internes.
Ce qui est étrange dans les espaces de grande dimension, c’est que la plupart des valeurs y sont orthogonales entre elles et très éloignées ; pourtant, il est fascinant de voir qu’on peut quand même y regrouper des concepts, même dans 50 000 dimensions, grâce à des techniques de réduction de dimension.
Quand j’ai commencé à apprendre sérieusement les embeddings, je me suis dit que « au moins un tiers de la magie des LLM vient des embeddings ». Le simple fait que les mots soient déjà organisés d’une manière sémantiquement utile enlève un peu de mystère aux LLM ; cela reste impressionnant, mais on a un peu l’impression d’entrevoir l’envers du décor.
Les embeddings jouent un peu le rôle d’une « pierre de Rosette » qui permet aux ordinateurs de quantifier le langage humain. Je pense que cela devrait être un sujet vraiment central, mais j’admets aussi que tenter de comprendre un espace vectoriel à 1 000 dimensions peut être assez intimidant.
Je ne comprends pas bien l’idée selon laquelle on ne parlerait pas assez des embeddings ; en particulier dans les exemples d’usage de RAG ou les discussions sur les bases de données vectorielles, les embeddings sont toujours un sujet central.
Le tutoriel était excellent — la différence entre embeddings contextuels et embeddings statiques est importante. Beaucoup de gens connaissent word2vec (embedding statique), mais les embeddings contextuels sont souvent bien plus puissants. (Au passage, la page détourne gravement l’historique du navigateur : le simple fait de scroller ajoute une quantité énorme d’entrées dans l’historique.)
Le point qui mériterait, selon moi, une explication plus avancée, c’est la différence entre les transformers encodeur-décodeur (BERT) et les modèles génératifs decoder-only, du point de vue des embeddings.
Petite correction nécessaire : BERT est un encodeur (pas un encodeur-décodeur), ChatGPT est un décodeur. Les modèles encodeurs (BERT) peuvent voir toute la phrase, ce qui est avantageux pour la représentation du sens. Par exemple, dans « The bank was steep and muddy », ils peuvent déterminer le sens de bank (berge ou institution financière) en regardant toute la phrase. En revanche, les modèles de type GPT (modèles décodeurs) ne voient que la séquence de gauche à droite et prédisent sans accès à la suite de la phrase. Pour aller plus loin, voir le billet de Hugging Face sur modernBERT ainsi que l’article sur neoBERT.
Pour compléter l’explication de dust42 : BERT est un encodeur, GPT un décodeur, et T5 un encodeur-décodeur. Aujourd’hui, les encodeurs-décodeurs sont moins populaires. Les modèles encodeurs sont beaucoup utilisés pour la classification, l’extraction d’information et la recherche, tandis que les décodeurs conviennent à la génération de texte, au résumé et à la traduction. Des travaux récents (papier Ettin) le confirment. Comme les deux sont des transformers, on peut aussi transformer un encodeur en décodeur et inversement. La différence de conception tient à l’attention bidirectionnelle (tous les tokens peuvent voir tous les autres) versus l’attention autorégressive (chaque token ne voit que les précédents).
Utiliser un embedding projector permet de développer une intuition non seulement pour plus de 50 mots, mais aussi pour la visualisation de données 3D. Voir Tensorflow Embedding Projector.
Excellent guide visuel ! J’ai moi aussi créé sur app.vidyaarthi.ai une leçon sur les embeddings LLM, en visuel + audio + quiz, avec un concept similaire pour aider à mieux comprendre le deep learning : lien pour l’essayer directement. L’idée est d’adopter une approche « apprendre en manipulant » afin de rendre les concepts abstraits plus intuitifs et interactifs. Les retours sont bienvenus (ce n’est pas de l’auto-promo, c’est vraiment un outil réalisé avec passion).
L’accès semble mal fonctionner ; il y a plein de messages d’erreur dans la console, du type « Content-Security-Policy: The page’s settings blocked an inline style… ».
Je pense qu’une visualisation en nuage de mots, ou l’affichage des résultats top-k d’une requête, pourrait être plus intuitif. Je recommande d’essayer Tensorflow Embedding Projector, d’y saisir un mot puis de choisir une projection UMAP.
Une explication avec une approche plus pratique figure aussi dans cet article de sgnt.ai sur les embeddings, que j’ai rédigé moi-même.
Merci pour cette excellente ressource ! Si j’ai bien compris, les LLM ont trois grands problèmes :
Ton approche est bien plus intuitive ; je me demandais justement pourquoi tu n’avais pas montré d’exemple d’embeddings pour des caractéristiques catégorielles ou scalaires.
C’est un article très pédagogique et bien structuré, merci à son auteur.
Les embeddings des LLM font généralement partie de la couche d’entrée et, contrairement à des modèles préentraînés comme Word2Vec, ils sont mis à jour pendant l’entraînement.
Autre question que je me pose : à l’inférence, l’embedding est une table de lookup de type « token ID -> vecteur ».
Mathématiquement, cela revient à encoder l’identifiant du token sous forme de long vecteur one-hot, puis à le faire passer dans une couche linéaire pour obtenir le vecteur d’embedding.
Est-ce que cette même structure est utilisée telle quelle pour apprendre les embeddings, c’est-à-dire en les traitant comme une couche linéaire entraînée par rétropropagation ?
Les embeddings font bien partie du processus normal de rétropropagation. En pratique, on n’utilise toutefois pas réellement de one-hot encoding pour des raisons d’efficacité ;
on implémente l’indexation de manière différentiable afin que le gradient ne circule que vers le vecteur sélectionné.
Pour un exemple concret, tu peux regarder le code de ma mini-bibliothèque de deep learning, source de SmallPebble.
Pour développer un peu l’autre commentaire,
l’indexation et la multiplication par un vecteur one-hot sont mathématiquement équivalentes.
Par exemple, si le vocabulaire contient N éléments et que la séquence a une longueur L, il faudrait multiplier une matrice creuse NxL par la matrice d’embedding ;
mais en pratique, comme un seul indice par colonne suffit, on le représente en interne par un simple nombre (l’indice).
De cette façon, en plus de la passe avant, la rétropropagation est elle aussi implémentée spécifiquement sur la base de l’indexation,
de sorte que le gradient soit propagé vers les vecteurs d’embedding sélectionnés.