La prédiction du token suivant.
Jusqu’ici, nous avons préparé le texte : il a été découpé en tokens, chaque token a reçu un identifiant, puis une fiche de nombres, son embedding. Mais que cherche à faire le modèle avec tout ça ? Dans cette leçon, nous allons découvrir une tâche fondamentale : prédire le token suivant, puis répéter cette prédiction pour construire une réponse.
La prédiction du token suivant
Si je vous dis « Il était une… », vous pensez sûrement « fois ». Vous avez lu et entendu assez d’histoires pour que cette suite vous vienne naturellement. Le clavier de votre téléphone propose lui aussi des mots pour poursuivre votre message.
Un modèle de langage causal reçoit une séquence de tokens et prédit le token qui pourrait la poursuivre. Les tokens précédents dont il dispose constituent son contexte. On dit « causal » parce que la prédiction utilise les tokens précédents, sans accéder aux tokens futurs.
Cette tâche, répétée, permet au modèle de construire une réponse. Nous étudions d’abord ce qu’il prédit ; les prochaines leçons expliqueront les étapes du calcul.
Une distribution de probabilités
Après « Il était une », le mot « fois » est très probable. Mais « petite » ou « belle » seraient possibles aussi. Le modèle attribue une probabilité à chaque token de son vocabulaire. L’ensemble de ces valeurs forme une distribution de probabilités : elle indique les suites que le modèle estime plus ou moins probables pour ce contexte.
Il était une …
fois → 85 %
petite → 8 %
belle → 5 %
voiture → moins de 1 %
…Toutes les probabilités, additionnées sur le vocabulaire, font 100 %. Dans cet exemple, les points de suspension représentent les autres candidats. Une méthode consiste à choisir systématiquement le token le plus probable : ici, « fois ». Ce choix s’appelle le décodage glouton, ou greedy decoding ; c’est la méthode utilisée dans notre laboratoire.
Dans un modèle moderne, ces probabilités sont calculées à partir des embeddings, en passant par les étapes que nous découvrirons dans les prochaines leçons. Nous verrons aussi pourquoi on ne choisit pas toujours le candidat le plus probable.
La génération autorégressive
Pour écrire une réponse entière, le modèle prédit un token, l’ajoute à la séquence, puis recommence avec ce contexte un peu plus long.
bonjo → u
bonjou → r
bonjour → !
bonjour! → …Cette boucle, où chaque nouveau token s’appuie sur les tokens précédents, s’appelle la génération autorégressive. Elle décrit la répétition des prédictions ; le décodage glouton décrit, lui, la façon de choisir un token à chaque étape.
Un modèle de langage par n-grammes
Bien avant les réseaux de neurones, on savait déjà prédire la suite d’un texte, par simple comptage : c’est l’approche historique du modèle par n-grammes, utilisée pendant des décennies, par exemple en reconnaissance vocale. Pour observer cette tâche, le laboratoire utilise un modèle de ce type, qui compte les caractères. Son texte de référence, appelé corpus, contient les quinze premiers chapitres du roman Le Tour du monde en quatre-vingts jours de Jules Verne, soit environ 154 000 caractères.
C’est un modèle de langage par n-grammes : un n-gramme est une suite de n éléments consécutifs, ici des caractères. Pour prédire la suite, le modèle compte les caractères qui ont suivi un contexte dans le corpus. Leur fréquence lui permet d’estimer une probabilité pour chaque candidat.
Vous choisissez la taille du contexte utilisé, de 1 à 5 caractères. Avec cinq caractères de contexte et un caractère à prédire, le modèle s’appuie sur des suites de six caractères.
contexte de 1 caractère, il voit « r » :
e → 1 981 fois sur 8 228 → 24 %
espace → 1 123 fois sur 8 228 → 14 %
a → 862 fois sur 8 228 → 10 %
…
contexte de 5 caractères, il voit « separ » :
t → 145 fois sur 145 → 100 %Avec un seul caractère, beaucoup de lettres ont suivi r. Avec cinq caractères, le modèle retrouve que « separ » est suivi de « t » dans les 145 occurrences observées. Dans cet exemple, le contexte plus long donne une prédiction plus précise. Mais un contexte long peut aussi être rare : même une probabilité de 100 % peut reposer sur très peu d’observations.
Ce compteur n’utilise ni les embeddings, ni les étapes que nous découvrirons ensuite. Il illustre la même tâche de prédiction, avec un mécanisme différent de celui d’un modèle de langage moderne.
Tester le contexte et la prédiction
Dans le laboratoire, tapez Passepar. Avec un contexte de 5 caractères, réglage de départ, le t s’impose à 100 %, et la génération pas à pas termine « Passepartout ». Descendez ensuite à 1 caractère : le modèle ne voit plus que le r et propose un e, parce que c’est le caractère qui suit le plus souvent un « r » dans le roman.
Essayez aussi Phileas F, le héros du roman : avec cinq caractères de contexte, le modèle complète « Fogg ». Cliquez plusieurs fois sur le bouton « Ajouter » : vous répétez vous-même la boucle de génération. La carte « Une génération pas à pas » la répète automatiquement, jusqu’à quinze fois.
Les limites du modèle de comptage
Même avec cinq caractères, le contexte de notre modèle reste minuscule. Il ne sait pas de quoi parle votre phrase : il compte seulement les caractères qui suivent les derniers dans le corpus. Un modèle de langage moderne peut tenir compte de nombreux tokens précédents, dans la limite de sa fenêtre de contexte. Cela lui donne accès à davantage d’informations, sans garantir une réponse cohérente.
Notre modèle tourne aussi en rond. Avec un seul caractère de contexte, en choisissant toujours le candidat le plus fréquent, il finit par écrire de de de de. Avec cinq caractères, sa suite ressemble à du français, mais elle ne veut pas nécessairement dire quelque chose. Les modèles modernes peuvent aussi se répéter ; nous étudierons plus tard les méthodes de génération qui influencent ce comportement.
Enfin, notre modèle ne connaît que le roman du corpus. Si les derniers caractères de votre texte n’y apparaissent jamais, il essaie un contexte plus court. Cette stratégie de repli est appelée backoff. Si le dernier caractère lui-même est absent du roman, comme X ou œ, il n’a rien à proposer. Les modèles modernes sont entraînés sur des corpus bien plus vastes, mais leurs données restent elles aussi limitées.
Retenez bien cette faiblesse : le compteur ne sait rien d’une suite exacte de caractères qu’il n’a jamais vue. Il ne peut pas se dire qu’elle ressemble à une autre suite, rencontrée cent fois. C’est précisément pour surmonter cette limite que les LLM modernes ne comptent pas des suites exactes. Ils s’appuient sur les embeddings, vus dans la leçon 03, qui rapprochent les éléments similaires, et sur le Transformer, que nous découvrirons dans les prochaines leçons. Un modèle peut ainsi faire une prédiction raisonnable sur une phrase qu’il n’a jamais lue.
Nous savons maintenant ce que le modèle cherche à prédire. Il reste à comprendre comment il transforme les embeddings en une prédiction qui tient compte du contexte. Les embeddings seuls ne précisent pas la place de chaque token dans la séquence : dans la prochaine leçon, nous verrons comment le modèle reçoit une information sur leur position grâce à l’encodage positionnel.
Un modèle de langage causal prédit le token suivant à partir des tokens précédents disponibles dans son contexte. Il produit une distribution de probabilités sur son vocabulaire : une valeur par token, dont la somme vaut 100 % (ou 1).
La génération est autorégressive : le token choisi est ajouté au contexte, puis le modèle est appelé de nouveau. Choisir à chaque étape le token le plus probable s’appelle le décodage glouton (greedy).
Le laboratoire utilise un modèle de n-grammes par comptage. Pour un contexte formé des k derniers caractères (de 1 à 5), la probabilité d’un caractère est le nombre de fois où il suit ce contexte dans le corpus, divisé par le nombre total d’observations après ce contexte. Si le contexte n’a jamais été vu, le modèle se replie sur un contexte plus court (backoff). Un contexte plus long peut affiner la prédiction, mais les contextes deviennent aussi plus rares et les estimations moins fiables.
Modèles de langage et n-grammes · Google Machine Learning Crash Course ↗
Causal language modeling · Hugging Face ↗