# Que sont les jetons, et pourquoi les modèles de langage lisent-ils le texte en morceaux?

Date: 2020-07-18 · Author: Robert Scales · https://guidetoartificialintelligence.com/fr/apprendre/jetons-modeles-de-langage-lisent-texte/

**Answer:** Les jetons (tokens) sont les petits morceaux de texte qu’un modèle de langage lit et écrit réellement : des mots courants entiers, des parties de mots plus rares, des signes de ponctuation et des espaces. Des modèles comme GPT-2 et GPT-3 utilisent une liste fixe d’environ 50 000 jetons, parce qu’elle leur permet de traiter n’importe quel texte tout en gardant les mots fréquents compacts.

Quand vous écrivez à GPT-3 par la nouvelle API d’OpenAI, le modèle ne voit jamais les lettres ni les mots comme vous les voyez. Avant toute chose, votre texte est découpé en morceaux appelés jetons (*tokens*), et chaque jeton est remplacé par un nombre tiré d’une liste fixe. Le modèle lit cette liste de nombres, prédit le nombre suivant, et le résultat est retransformé en texte pour vous.

Le découpage n’est pas aléatoire. Les mots courants comme « the » ou « morning » restent entiers. Les mots plus rares sont divisés en morceaux familiers : « tokenization » devient ainsi « token » plus « ization ». C’est important pour quiconque utilise GPT-3, parce que le nombre de jetons fixe la longueur maximale de votre prompt, et la façon dont le texte est découpé explique certaines forces et faiblesses étonnantes du modèle.

## Pourquoi ne pas simplement utiliser des mots, ou des lettres?

Il y a deux façons évidentes de fournir du texte à un modèle, et toutes deux posent problème.

- **Des mots entiers.** Une liste de tous les mots serait immense, et il y manquerait quand même des noms, des fautes de frappe, de l’argot récent et des mots d’autres langues. Tout ce qui ne figure pas dans la liste devient un marqueur « inconnu », et le sens est perdu.
- **Des lettres seules.** Tout texte peut s’épeler avec des lettres; rien n’est donc inconnu. Mais les phrases deviennent de très longues séquences, et le modèle doit travailler beaucoup plus fort pour voir que « c », « a », « t » forment un chat (*cat*).

Les jetons de sous-mots se situent entre les deux. En 2015, Rico Sennrich et ses collègues de l’Université d’Édimbourg ont montré que les systèmes de traduction traitent mieux les mots rares quand ceux-ci sont découpés en unités plus petites. Une des méthodes qu’ils ont utilisées est le codage par paires d’octets (*byte pair encoding*, ou BPE), emprunté à la compression de données. Il part de caractères isolés et fusionne à répétition la paire de symboles la plus fréquente dans un grand corpus de texte, en ajoutant chaque paire fusionnée à la liste. Après des dizaines de milliers de fusions, les mots fréquents sont devenus des jetons uniques, tandis que les mots rares restent formés de quelques morceaux courants.

GPT-2 a adapté cette idée pour qu’elle fonctionne sur des octets bruts, les unités de base que les ordinateurs utilisent pour stocker du texte. Selon l’article sur GPT-2, cela donne un ensemble de départ de seulement 256 symboles, si bien que n’importe quelle chaîne, dans n’importe quelle langue, peut être encodée sans mot inconnu. Le vocabulaire final de GPT-2 compte 50 257 jetons. L’article sur GPT-3 indique que GPT-3 réutilise ce même découpeur (*tokenizer*).

## Un exemple concret : découper de vraies phrases

Voici comment le découpeur de GPT-2, que GPT-3 partage, divise quelques courts textes. Chaque barre verticale marque une frontière entre deux jetons. Une espace appartient généralement au début du jeton suivant : « cat » précédé de son espace forme donc un seul jeton.

| Texte | Jetons | Nombre |
|---|---|---|
| The cat sat on the mat. | The \| cat \| sat \| on \| the \| mat \| . | 7 |
| Tokenization is surprisingly important. | Token \| ization \| is \| surprisingly \| important \| . | 6 |
| I would like a croissant, please. | I \| would \| like \| a \| cro \| iss \| ant \| , \| please \| . | 10 |
| Bonjour, je voudrais un croissant. | Bon \| j \| our \| , \| je \| v \| oud \| ra \| is \| un \| cro \| iss \| ant \| . | 14 |
| épanouissement | é \| pan \| ou \| isse \| ment | 5 |

La tendance est claire. Les mots anglais ordinaires occupent surtout un jeton chacun, alors que « croissant » en demande trois. La phrase française, à peu près aussi longue que la phrase anglaise, demande 14 jetons au lieu de 10, et le seul mot français « épanouissement » se brise en cinq morceaux.

La raison, ce sont les données d’entraînement. Les fusions ont été apprises à partir de textes Web surtout en anglais; les mots anglais ont donc obtenu leurs propres jetons, et les autres langues sont restées en fragments. L’article sur GPT-3 rapporte lui-même que le modèle traduit beaucoup mieux vers l’anglais qu’à partir de l’anglais, et suggère que ses résultats de traduction les plus faibles pourraient venir en partie de la réutilisation d’un découpeur conçu pour des données presque entièrement anglaises.

## Ce que les jetons changent pour vous

Il en découle trois conséquences pratiques.

1. **La longueur se compte en jetons.** Les limites des prompts et des réponses sont fixées en jetons, pas en mots ni en caractères. Un texte en français, en espagnol ou en allemand en utilise davantage pour le même sens.
2. **Les tâches d’orthographe sont difficiles.** Le modèle voit « croissant » comme trois morceaux, pas comme neuf lettres. L’article sur GPT-3 note que ses tests de remise en ordre de lettres exigent un travail au niveau des caractères, que ses jetons BPE rendent difficile.
3. **Les nombres sont découpés bizarrement.** « 2,048 » devient « 2 », « , », « 048 ». C’est une des raisons pour lesquelles l’arithmétique sur de longs nombres fait trébucher le modèle.

> **À essayer :** prenez un paragraphe que vous avez écrit aujourd’hui et comptez ses mots. Puis devinez son nombre de jetons, en suivant la règle empirique selon laquelle les mots courts et courants valent un jeton, et les mots longs ou inhabituels, deux ou trois. Réécrivez ensuite le même paragraphe avec des mots plus longs et plus rares, ou dans une autre langue que vous connaissez, et devinez de nouveau. Quelle version occuperait une plus grande part de la fenêtre du modèle?

## Combien de texte tient dans la fenêtre de 2 048 jetons de GPT-3?

GPT-3, comme GPT-2 avant lui, lit son entrée à travers une fenêtre de taille fixe appelée la fenêtre de contexte. Pour GPT-3, cette fenêtre est de 2 048 jetons, le double des 1 024 de GPT-2. Tout ce que le modèle peut prendre en compte à la fois doit y tenir : vos instructions, les exemples éventuels et le texte que le modèle produit.

Un paragraphe type donne une idée de l’échelle. Un paragraphe anglais de 77 mots sur une boulangerie de quartier se découpe en 92 jetons, soit environ 1,2 jeton par mot. À ce rythme, 2 048 jetons contiennent environ 1 700 mots d’anglais courant. Si l’on compte environ 500 mots pour une page à interligne simple, cela fait trois pages à trois pages et demie. En français, les premières phrases du même paragraphe ont donné environ 1,8 jeton par mot; la fenêtre contient donc nettement moins de texte, plus près de 1 100 mots.

Ce budget détermine la façon dont on utilise GPT-3. L’article explique que les prompts à quelques exemples en contiennent habituellement entre 10 et 100, tout simplement parce que c’est ce qui tient dans 2 048 jetons. Un long document ne peut pas être collé en entier; il faut le résumer par sections ou le réduire à la partie qui compte. Et si votre prompt occupe la majeure partie de la fenêtre, il reste peu de place pour la réponse. Une bonne habitude consiste à garder les instructions et les exemples courts, et à laisser quelques centaines de jetons libres pour la réponse.

## Sources

- Language Models are Unsupervised Multitask Learners: https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf
- Language Models are Few-Shot Learners: https://arxiv.org/abs/2005.14165
- Neural Machine Translation of Rare Words with Subword Units: https://arxiv.org/abs/1508.07909
