Tous les cours
Les grands modèles de langage · Palier 1 · Comment ça marche — Voir le parcours

Quiz d'entraînement : les trois quarts des bonnes réponses pour le réussir.

Les embeddings : le sens en coordonnées

Un moteur de recherche qui trouve « mode d'emploi » quand tu tapes « notice d'utilisation », une application qui te propose une série d'après celles que tu as aimées, un assistant qui retrouve le bon passage parmi mille pages : derrière chacun, la même idée. Au lieu de comparer des lettres, on compare des positions. Chaque mot, chaque phrase, chaque document devient un embedding : une liste de nombres, un point dans un espace où la proximité veut dire quelque chose. Deux textes de sens voisin y sont proches ; deux textes sans rapport y sont loin.

Dans ce cours, on construit de vrais embeddings sur un petit corpus de vingt mots, et on les manipule. On les regarde se former à partir des fréquentations des mots, on invente un mot et on le place, on lit une carte et ses pièges, on compare deux vecteurs de trois façons, on suit une recherche de la question aux résultats, puis on cherche vite parmi des millions de vecteurs. C'est la brique de la recherche sémantique, de la recommandation et du RAG. Tu n'as besoin d'aucune formule pour suivre : si tu sais ce qu'est une liste de nombres, tu as tout ce qu'il faut, et deux blocs « Les maths derrière » restent repliés pour qui veut vérifier. Chaque bloc marqué « Figure interactive » réagit : parie, tire, choisis, regarde ce qui change.


Des numéros aux vecteurs

Le tokenizer transforme un texte en numéros : « chat » devient, par exemple, le 4 812, et « chien » le 90 000. Mais un numéro ne dit rien. Le 4 812 n'est pas « plus proche » du 4 813 que du 90 000, et rien dans ces numéros ne dit que le chat ressemble au chien. Même en donnant à chaque mot sa propre colonne, avec un 1 dans la sienne et des 0 partout ailleurs (le codage one-hot), tous les mots restent à égale distance les uns des autres : le chat est aussi loin du chien que de la voiture.

Un embedding fait mieux : c'est un vecteur, une liste de nombres. Dix dans les figures de ce cours, quelques centaines à quelques milliers dans les vrais modèles : le modèle all-MiniLM-L6-v2, par exemple, en écrit 384 par texte (sa fiche, consultée le 21 octobre 2026). Ces nombres ne sont pas écrits à la main. Ils sont appris, de sorte que la géométrie reflète le sens : des mots qui s'emploient de la même façon finissent au même endroit. En général, aucune dimension n'a de nom, et l'on ne peut pas dire que la septième est « la taille de l'animal ». Le sens est réparti sur l'ensemble, et c'est la position d'ensemble qui compte. Une fois le texte devenu vecteur, chercher ce qui ressemble à quelque chose devient un calcul de distance.


Dis-moi avec qui tu traînes

L'idée remonte aux linguistes des années 1950 : on reconnaît un mot à ses fréquentations. Harris (1954) l'énonce en termes de distribution, et Firth (1957) la résume d'une phrase restée célèbre, « you shall know a word by the company it keeps » : tu reconnaîtras un mot aux compagnons qu'il fréquente. « Chat » et « chien » apparaissent avec « caresser », « vétérinaire », « poils » ; « vélo » et « voiture » avec « freiner », « se garer ». Si l'on décrit chaque mot par ses contextes, les mots de même sens se ressemblent.

C'est ce que fait la figure, à la manière des premiers embeddings, sur un corpus de phrases tirées au hasard : on compte avec quels mots de contexte chaque mot apparaît, on garde ce qui dépasse le hasard, puis on résume chaque mot en dix nombres. Le calcul n'a reçu que des comptes. Avant d'ouvrir la figure, parie : de quel mot l'embedding du chat va-t-il se rapprocher ?

Figure interactiveDis-moi avec qui tu traînesParie d'abord, puis choisis un mot : regarde ses contextes, puis ses voisins.

Le calcul n'a reçu que des comptes : avec quels mots de contexte chaque mot apparaît. Il ne sait pas ce qu'est un animal. De quel mot l'embedding du chat va-t-il le plus se rapprocher ?

Un petit corpus de phrases tirées au hasard. Pour chaque mot, on compte avec quels mots de contexte il apparaît, on garde ce qui dépasse le hasard (PPMI), puis on résume chaque mot en un vecteur de 10 nombres (SVD). Voisins : similarité cosinus entre ces vecteurs.

Du chien, de très près (cosinus 0,98), puis du lapin (0,77), du cheval, et de l'oiseau en dernier (0,33). Personne n'a dit au calcul ce qu'est un animal : les groupes sortent des comptes. Essaie le train, dont les voisins sont d'abord un bus, puis des villes, parce qu'il partage « billet » et « gare » avec le bus, mais aussi « gare » avec les villes. Et regarde l'oiseau : son compagnon « voler » n'appartient presque qu'à lui, alors il reste isolé même parmi les animaux.

Ce qui rend cela possible, c'est un filtre. Un mot de contexte comme « manger » apparaît avec la moitié des mots du corpus : le voir à côté de « chat » n'apprend presque rien. « Vétérinaire », lui, apparaît surtout avec des animaux : le voir à côté de « chat » en dit long. La PPMI (information mutuelle ponctuelle positive) mesure exactement cela : de combien deux mots apparaissent ensemble plus que le hasard ne le voudrait, et 0 si c'est moins. Une décomposition en valeurs singulières résume ensuite les 24 colonnes de contextes en 10 nombres par mot, en gardant les directions où les mots diffèrent le plus.

Les méthodes plus connues apprennent la même chose autrement. word2vec (Mikolov et al., 2013) apprend à prédire un mot à partir de ses voisins ; GloVe (Pennington et al., 2014) factorise les cooccurrences. Levy et Goldberg (2014) ont montré que word2vec, dans sa version courante, factorise sans le dire une matrice de PMI décalée d'une constante : une cousine de celle de la figure.

Les maths derrière · De la table de comptes aux vecteurs

On part d'une table de comptes : n(w, c) est le nombre de fois où le mot w apparaît avec le contexte c, N le total de la table, n(w) et n(c) les totaux de la ligne et de la colonne. La PPMI compare ce qu'on observe à ce que le hasard donnerait (logarithme népérien) :

PPMI(w, c) = max( 0 , ln( n(w, c) · N / ( n(w) · n(c) ) ) )

Si w et c apparaissent ensemble exactement comme le hasard le voudrait, le rapport vaut 1 et la PPMI vaut 0. S'ils apparaissent deux fois plus souvent, elle vaut ln 2 ≈ 0,69.

On range ces valeurs dans une matrice M (20 mots × 24 contextes) et on la décompose : M ≈ U Σ Vᵀ. Le vecteur d'un mot est sa ligne de U Σ, gardée sur les 10 premières directions. Un mot nouveau se place avec la même recette : sa ligne de PPMI, multipliée par V, donne son vecteur. C'est ce que fait la figure suivante.


Invente un mot

Le calcul ne connaît que des fréquentations. Alors donne-lui un mot qui n'existe pas, avec les compagnons de ton choix, et regarde où il tombe. Que deviendra un mot qui n'apparaît qu'avec « voler » ? Et un mot qui apparaît avec « caresser » et avec « rouler » ? Joue : il n'y a ni pari ni bonne réponse, seulement un calcul qu'on laisse tourner.

Figure interactiveInvente un motChoisis jusqu'à quatre compagnons pour un mot qui n'existe pas : le calcul le place.

Aucun compagnon (jusqu'à 4).

Un mot est ses fréquentations. Choisis un compagnon ou deux dans une famille, puis dans une autre : ton mot atterrit près des mots qui ont les mêmes.

Ses plus proches voisins

Même calcul que la figure précédente, rejoué sur une seule ligne de comptes : les compagnons choisis, en proportions égales (PPMI, puis les mêmes directions de la décomposition en valeurs singulières). Aucun apprentissage de plus. Au plus 4 compagnons : le plus ancien cède sa place.

Trois choses à retenir de tes essais. Un mot dont le seul compagnon est « voler » atterrit chez l'oiseau, avec un cosinus de 0,93 : un compagnon rare suffit à le placer. Un mot dont le seul compagnon est « manger » ne ressemble à personne en particulier, parce que la moitié des mots de la table mangent : un compagnon vaut par ce qu'il distingue, pas par sa fréquence. Et « caresser » avec « rouler » donne un mot entre deux mondes, qui s'arrête près du cheval : un mot qui s'emploie de deux façons a un vecteur qui mêle les deux. C'est la mécanique des vingt mots d'origine : tu viens de leur ajouter une ligne de comptes.


La carte : une ombre en deux dimensions

Pour regarder des embeddings, on les projette sur un plan, comme l'ombre d'un objet sur un mur. C'est utile, parce qu'on y voit les groupes. C'est trompeur, parce que deux points collés sur l'ombre peuvent être très éloignés en vrai : deux objets, l'un derrière l'autre, donnent des ombres qui se touchent. Sur la carte de nos vingt mots (une analyse en composantes principales), l'oiseau finit contre la voiture. Dans l'espace complet, quel est son vrai voisin ? Parie avant de regarder.

Figure interactiveLa carte des mots, et ce qu'elle cacheParie d'abord, puis choisis un mot : le trait plein mène à son vrai plus proche voisin, le pointillé à celui de la carte quand ils diffèrent.

Sur la carte, l'oiseau finit tout près de la voiture. Mais une carte n'est qu'une ombre. Dans l'espace complet à dix dimensions, quel est son vrai plus proche voisin ?

Les vecteurs à 10 dimensions, aplatis en 2 par analyse en composantes principales. Couleur : la catégorie du mot, que le calcul n'a jamais vue.

La projection garde les grands groupes : les quatre catégories y forment quatre îlots. Mais elle écrase les distances fines. Pour la moitié des mots, le plus proche voisin sur la carte n'est pas le vrai, et le trait pointillé le montre. Choisis le chat : la carte le colle au cheval, alors que son vrai voisin est le chien. Choisis Paris : cette fois, carte et espace complet s'accordent. Les méthodes de projection plus élaborées (t-SNE, UMAP) font de plus jolies cartes, avec les mêmes limites : on regarde avec la carte, on mesure dans l'espace complet.


Mesurer la proximité : le cosinus

Il y a plusieurs façons de dire que deux vecteurs sont proches, et le choix compte. Dans la figure, Q est une requête, et A, B, C sont trois documents, dessinés en flèches. « Le plus proche » peut vouloir dire le plus petit angle avec Q, le plus grand produit scalaire, ou la pointe la plus proche. Parie avant de tirer : si on raccourcit B sans le tourner, lequel des trois classements est certain de ne pas bouger ?

Figure interactiveCosinus, produit scalaire, distanceParie d'abord. Puis tire la pointe de la requête Q, ou allonge et raccourcis B : qui est le plus proche de Q, selon chaque mesure ?

On raccourcit le document B sans le tourner : même direction, donc même sens. Parmi les trois classements, lequel est certain de ne jamais bouger ?

Q est une requête ; A, B et C sont trois documents. Chacun est dessiné en flèche depuis l'origine. Trois façons de dire « le plus proche » : le plus petit angle (cosinus), le plus grand produit scalaire (angle et longueur à la fois), la pointe la plus proche (distance, qui dépend aussi de la longueur). Les classements sont calculés. B ne peut que s'allonger ou se raccourcir, sans se tourner.

Le cosinus ne regarde que l'angle entre deux vecteurs : 1 s'ils pointent dans la même direction, 0 s'ils sont sans rapport, −1 s'ils sont opposés. Le produit scalaire et la distance dépendent aussi de la longueur. Raccourcis B jusqu'au bout : son rang selon le cosinus ne bouge pas, mais il perd la tête du classement au produit scalaire, et la distance le fait remonter devant C. Tire ensuite Q ailleurs et regarde les classements se séparer ou se rejoindre. Puis appuie sur le bouton : une fois tous les vecteurs ramenés à la longueur 1, les trois mesures donnent exactement le même classement.

Voilà pourquoi on compare souvent au cosinus. La longueur d'un vecteur reflète en effet souvent autre chose que le sens : la fréquence d'un mot, la longueur d'un texte. Le produit scalaire n'est pas pour autant un mauvais choix : quand la longueur porte une information utile, on la garde. Les systèmes de recommandation par factorisation de matrice (Koren, Bell et Volinsky, 2009, au moment du concours Netflix Prize) placent utilisateurs et objets dans un même espace et mesurent l'intérêt d'un utilisateur pour un objet par un produit scalaire.

Les maths derrière · Pourquoi les trois mesures s'accordent à la longueur 1

Le cosinus de deux vecteurs est leur produit scalaire divisé par le produit de leurs longueurs :

cos(a, b) = (a · b) / (‖a‖ ‖b‖)

Si les deux vecteurs ont la longueur 1, le cosinus est le produit scalaire. Et le carré de la distance entre leurs pointes s'écrit :

‖a − b‖² = ‖a‖² + ‖b‖² − 2 a · b = 2 − 2 cos(a, b)

La distance décroît donc quand le cosinus croît : classer par cosinus décroissant ou par distance croissante, c'est la même liste. Exemple : un cosinus de 0,8 donne une distance au carré de 0,4, donc une distance d'environ 0,63.


Des mots aux phrases

Les embeddings de la figure donnent un vecteur par mot, quel que soit son sens dans la phrase. C'est le cas de word2vec et de GloVe, dits statiques : « avocat » n'aura qu'un seul vecteur, qui mêle le juriste et le fruit. Les modèles modernes produisent des embeddings contextuels : le vecteur d'« avocat » n'est pas le même dans « l'avocat plaide » et dans « l'avocat est mûr ». ELMo (Peters et al., 2018) puis BERT (Devlin et al., 2018) ont popularisé cette idée : BERT, un Transformer, lit chaque mot avec ce qui l'entoure, à gauche comme à droite.

Pour une phrase ou un document entier, faire la moyenne des vecteurs de mots est une base grossière. Elle ignore l'ordre : « le chien mord l'homme » et « l'homme mord le chien » ont exactement la même moyenne. Elle ignore la négation : « pas bon » ressemble à « bon ». Les modèles d'embeddings de phrases sont entraînés pour que deux phrases de même sens aient des vecteurs proches (Sentence-BERT, Reimers et Gurevych, 2019). Ils règlent aussi un problème de coût : d'après cet article, trouver la paire la plus proche parmi 10 000 phrases demande environ 50 millions de passages dans BERT, soit environ 65 heures, contre environ 5 secondes une fois les embeddings de phrases calculés. Ce sont eux qu'utilisent la recherche sémantique et le RAG.


De la question aux résultats

Mettons tout bout à bout. Une recherche sémantique se fait en deux temps. Hors ligne, chaque document passe par le modèle, et son vecteur est rangé dans un index. En ligne, la question passe par le même modèle, et l'index rend les vecteurs les plus proches. Que se passe-t-il si, par erreur, la question passe par un autre modèle ? Avance dans le schéma, et parie à la quatrième étape.

Figure interactiveUne recherche, de la question aux résultatsAvance étape par étape : le jeton suit le chemin de la donnée. À la quatrième étape, tu paries.
DocumentsModèleVecteursIndexRequêteMêmemodèleVecteurrequête

Le modèle lit « chat » et écrit son vecteur : (2,79 ; -0,87 ; -0,85 ; …). Il en fait autant pour chacun des vingt documents.

Étape 1 sur 5

Hors ligne : on encode les documents

Le modèle lit chaque document et le résume en un vecteur de dix nombres. On le fait une seule fois, bien avant la première question.

Les vingt mots du cours jouent les documents ; la requête est « chat » (le mot lui-même n'est pas renvoyé). Les voisins sont calculés au cosinus. Le second modèle est le premier dont on a tourné les axes au hasard : même géométrie, autres coordonnées. Deux vrais modèles diffèrent aussi par la forme, ce qui est pire.

Un embedding n'a de sens que dans l'espace de son modèle. Deux modèles n'écrivent pas dans les mêmes axes : même avec autant de dimensions, la requête tombe dans un autre repère, et l'index répond au hasard. Dans la figure, le cosinus entre les deux versions du vecteur de « chat » est de 0,07, alors que le second modèle est une simple rotation du premier, ce qui est le cas le plus favorable. Conséquence pratique : changer de modèle, c'est ré-encoder tous les documents et reconstruire l'index. Autre conséquence : certains modèles veulent un traitement différent pour les questions et pour les documents. La famille E5, par exemple, attend un préfixe « query: » ou « passage: » devant chaque texte, faute de quoi sa fiche annonce une baisse de performance (fiche de e5-base-v2, consultée le 21 octobre 2026).


Chercher vite : la recherche vectorielle

Trouver les documents les plus proches d'une requête, c'est calculer une distance avec chacun. Pour mille documents, c'est instantané. Pour dix millions de vecteurs de 768 nombres, chaque requête demande 7,7 milliards de multiplications, et la base seule occupe environ 31 gigaoctets en 32 bits. C'est le principe du plus proche voisin vu dans Voisins, marges et probabilités, mais à une échelle où l'on ne peut plus tout comparer à chaque requête. Combien de documents faut-il fouiller pour retrouver presque tous les vrais voisins ? Devine, puis règle le nombre de cellules fouillées.

Figure interactiveChercher parmi des millions de vecteursChoisis une requête, puis le nombre de cellules fouillées.
Distances88calculées (exact : 600)
Trouvés4/10vrais voisins
Rappel moyen87 %sur 40 requêtes

1 cellule fouillée, 88 distances au lieu de 600 : 6 vrais voisins manqués, tombés dans une cellule voisine (cerclés). C'est le prix de l'approximation ; fouiller une cellule de plus le paie souvent (rappel moyen : 87,0 %).

600 documents (des points, en 2 dimensions pour qu'on les voie), rangés en 12 cellules par k-means : c'est un index IVF. On cherche les 10 plus proches d'une requête en ne fouillant que les cellules dont le centre est le plus proche.

Un index IVF range d'avance les documents en cellules (par k-means) et ne fouille que les cellules les plus proches de la requête. On calcule beaucoup moins de distances, au prix de quelques vrais voisins manqués quand ils sont tombés dans une cellule voisine. Le rappel mesure ce prix ; le nombre de cellules fouillées le règle, et chaque cellule de plus coûte des distances en plus. Les bibliothèques de recherche vectorielle (FAISS, Johnson et al., 2021) combinent cette idée avec la compression des vecteurs (Jégou et al., 2011) ou avec des graphes de voisinage. L'index HNSW (Malkov et Yashunin) navigue de proche en proche dans un graphe à plusieurs étages et vise, selon ses auteurs, un coût qui croît comme le logarithme de la taille de la base. Dans tous les cas, on mesure le rappel sur ses propres requêtes avant de choisir un réglage.


Ce qu'on oublie souvent

  • Comparer des embeddings de deux modèles différents. Chaque modèle a son propre espace : un vecteur d'un modèle n'a aucun sens dans l'espace d'un autre, même avec le même nombre de dimensions.
  • Les textes trop longs. Un modèle d'embeddings lit un nombre limité de tokens : all-MiniLM-L6-v2 tronque au-delà de 256 morceaux de mots (sa fiche, consultée le 21 octobre 2026), et le reste du texte n'est pas lu. On découpe les longs documents en passages avant de les encoder.
  • Les analogies spectaculaires. « roi − homme + femme ≈ reine » est un exemple choisi ; beaucoup d'analogies échouent, et le calcul usuel interdit même de répondre par l'un des mots de départ (Nissim et al., 2020).
  • Les stéréotypes. Un embedding apprend les associations de ses textes, y compris entre métiers et genres (Bolukbasi et al., 2016). Caliskan et ses coauteurs (2017) ont retrouvé, dans des embeddings GloVe appris sur le Web, des biais proches de ceux que mesurent les tests d'association implicite chez l'humain. À mesurer avant de s'en servir pour trier des candidatures.
  • Le choix du modèle. Aucun modèle ne domine toutes les tâches (benchmark MTEB, Muennighoff et al., 2022) : un modèle entraîné sur du texte général connaît mal le jargon médical ou juridique, et se choisit en l'évaluant sur ses propres données.
  • Les nombres. « 1 500 » et « 1 501 » ne sont pas forcément proches : les embeddings capturent mal les grandeurs.

Teste-toi

Quelques questions sur les idées qu'on vient de croiser, dont plusieurs sur les figures. La raison s'affiche après chaque réponse : c'est elle qui compte.

Figure interactiveTeste-toi : les embeddingsAprès chaque réponse, la raison s'affiche.

Question 1 sur 11

9 bonnes réponses attendues sur 11.

Qu'est-ce qu'un embedding ?

Une bonne réponse par question. Ces idées servent partout : recherche, recommandation, RAG.


Le vocabulaire en un coup d'œil

TermeEn une phrase
EmbeddingUn vecteur de nombres, appris, qui place les mots ou textes de sens proche à proximité.
One-hotUne colonne par mot, un 1 dans la sienne : tous les mots sont à égale distance, aucun sens n'y apparaît.
Hypothèse distributionnelleDes mots qui apparaissent dans les mêmes contextes ont des sens proches.
CooccurrenceLe fait que deux mots apparaissent ensemble ; la matière première des premiers embeddings.
PPMIUne mesure de combien deux mots apparaissent ensemble plus que le hasard ne le voudrait.
Similarité cosinusLa mesure de proximité qui ne regarde que l'angle entre deux vecteurs.
ProjectionAplatir des vecteurs en 2 dimensions pour les voir (ACP, t-SNE, UMAP), au prix de distances déformées.
Embedding statique ou contextuelUn vecteur par mot, toujours le même ; ou un vecteur qui dépend de la phrase où le mot apparaît.
Embedding de phraseUn vecteur pour une phrase entière, appris pour que les phrases de même sens soient proches.
IndexLa structure où l'on range les vecteurs des documents pour répondre vite à une requête.
Recherche vectorielleTrouver les vecteurs les plus proches d'une requête parmi une grande base.
IVFUn index qui range les vecteurs en cellules et ne fouille que les plus proches.
RappelLa part des vrais plus proches voisins que la recherche approchée retrouve.

Ce qu'il faut retenir

  • Un embedding transforme un texte en position : la proximité y veut dire ressemblance de sens.
  • Le sens vient des contextes : des mots qui s'emploient pareil finissent proches, sans qu'on leur dise pourquoi, et un contexte vaut par ce qu'il distingue.
  • Une carte 2D garde les groupes mais déforme les distances : on mesure toujours dans l'espace complet.
  • On compare au cosinus (ou sur des vecteurs de longueur 1) : la longueur d'un vecteur n'est pas son sens.
  • Documents et requêtes doivent passer par le même modèle : changer de modèle, c'est tout ré-encoder.
  • La recherche approchée calcule bien moins de distances, au prix d'un rappel un peu inférieur à 100 %.
  • Un embedding reflète ses données, biais compris, et se choisit en l'évaluant sur ses propres données.

Pour aller plus loin

Et maintenant ?