Aller au contenu
Fondamentaux

Token

Le morceau de texte, mot, bout de mot ou caractère, que le modèle lit et génère, un par un.

6 min de lecture
  • #tokenisation
  • #vocabulaire
  • #génération

Un token est un morceau de texte, parfois un mot entier, parfois un bout de mot, parfois un seul caractère, et c’est l’unité de base qu’un LLM lit et génère, un par un.

Imagine que tu découpes un texte en briques de LEGO avant de le donner à quelqu’un. Les mots fréquents tiennent sur une seule brique (« chat », « le »), les mots rares sont cassés en plusieurs morceaux (« anticonstitutionnellement » en demande une poignée). Le modèle ne voit jamais le texte brut : il ne voit que des briques, et il ne dispose que de celles de sa boîte, dont le contenu a été fixé une fois pour toutes.

Tu sais déjà qu’un LLM prédit la suite d’un texte. Reste à savoir la suite de quoi : un modèle ne manipule que des nombres. La tokenisation transforme le texte en une suite d’identifiants, piochés dans un vocabulaire fixe, construit avant l’entraînement et jamais modifié ensuite. Sa taille varie beaucoup d’un modèle à l’autre : GPT-2 (2019) compte 50 257 entrées, Llama 3 (2024) 128 256, Gemma 2 (2024) 256 000. On y trouve les mots courants, les bouts de mots, la ponctuation, les espaces, les émojis, plus quelques tokens spéciaux qui signalent le début ou la fin d’un texte.

  • Avec des lettres : vocabulaire minuscule, mais des suites très longues et un sens difficile à capter.
  • Avec des mots entiers : il faudrait un vocabulaire quasi infini, toutes les formes conjuguées, tous les mots rares, toutes les langues, et le moindre mot inconnu resterait illisible.
  • Le compromis gagnant : les sous-mots. Les mots fréquents gardent leur brique unique, les mots rares se décomposent, et plus rien n’est hors vocabulaire.

Deux algorithmes et une bibliothèque se partagent le terrain. BPE (byte-pair encoding), amené au traitement du langage par Sennrich, Haddow et Birch en 2016, part des caractères bruts et fusionne, encore et encore, la paire la plus fréquente du corpus : « e » + « r » donne « er », puis « er » + « s » donne « ers ». On arrête quand le vocabulaire atteint la taille visée. WordPiece, celui de BERT, suit la même mécanique mais retient à chaque tour la fusion qui fait le plus progresser la vraisemblance du corpus, plutôt que la plus fréquente. SentencePiece n’est pas un troisième algorithme : c’est l’outil de Google qui exécute les deux précédents en traitant l’espace comme un caractère ordinaire, ce qui lui permet d’attaquer une langue sans espaces comme le japonais. Llama et Gemma s’appuient dessus.

  • L’espace fait partie du token. Chez la plupart des tokeniseurs modernes, il est collé au début du mot qui suit : « chat » et « ␣chat » sont deux entrées distinctes, avec deux identifiants distincts.
  • Les nombres sont hachés. Les tokeniseurs de GPT-4 et de Llama 3 découpent les longs nombres en tranches d’au plus trois chiffres, en partant de la gauche : 21645 devient « 216 » puis « 45 ». Le modèle ne reçoit donc pas une valeur, mais des fragments d’écriture, ce qui explique une partie de ses erreurs de calcul.
  • Les accents coûtent cher. Les tokeniseurs par octets travaillent sur l’UTF-8, où « é » occupe deux octets contre un seul pour « e ». Si la séquence n’était pas assez fréquente à l’entraînement pour mériter sa propre entrée, un caractère accentué finit coupé en deux tokens qui, séparément, ne veulent rien dire.
  • La génération : le modèle produit un token à la fois, puis relit l’ensemble pour produire le suivant.
  • La facturation : les API facturent au token, en entrée comme en sortie, et affichent leurs tarifs par million de tokens.
  • La mémoire : la fenêtre de contexte se mesure en tokens. Un modèle annoncé « 128k » en avale environ 128 000 d’un coup, soit quelques centaines de pages de français.

Suis le parcours d’une phrase, du texte que tu tapes aux nombres que le modèle reçoit vraiment.

Comment le modèle découpe-t-il une phrase ?

Le chat dort sur le canapé parce qu'il est fatigué.

Étape 1/5 Voici une phrase, écrite comme tu l'écrirais.

Chiffres illustratifs, choisis pour rendre le mécanisme lisible.

  • Estimer le budget d’une application qui appelle une API commence toujours par compter des tokens, jamais des mots : c’est la seule unité que facturent OpenAI, Anthropic ou Mistral.
  • Le français coûte plus cher que l’anglais à texte égal. Sur Llama 3.1, on mesure environ 1,4 token par mot en anglais contre 2 en français : la même idée, traduite, se paie près d’une fois et demie plus cher. C’est l’un des arguments qui ont conduit l’équipe de CroissantLLM, un modèle bilingue français-anglais de 1,3 milliard de paramètres publié début 2024 et entraîné sur autant de français que d’anglais, à se doter de son propre tokeniseur plutôt que de reprendre celui d’un modèle anglophone.
  • Le fameux « combien de r dans strawberry ? », que beaucoup de modèles ratent, tient en partie au découpage : le mot arrive en deux ou trois briques et le modèle n’a jamais vu les lettres qui les composent.
  • Quand une longue conversation se met à « oublier » son début, c’est un compteur de tokens qui a atteint sa limite, pas une baisse d’attention du modèle.
  • « Un token = un mot. » Non, c’est en général un peu moins. En anglais, la règle d’usage donne 100 tokens pour environ 75 mots. En français, moins bien servi par des vocabulaires construits surtout sur de l’anglais, compte plutôt 50 à 65 mots pour 100 tokens.
  • « Le modèle voit des mots. » Il ne voit que des nombres : chaque token est d’abord un identifiant, sans plus de sens qu’un numéro de dossard, converti ensuite en embedding, un vecteur qui, lui, porte le sens.
  • « Tous les modèles découpent pareil. » Chaque famille a son tokeniseur et son vocabulaire, et ils se recouvrent bien moins qu’on ne l’imagine. Un même texte n’a donc ni la même longueur ni le même prix d’un fournisseur à l’autre : un compteur de tokens n’est valable que pour le modèle sur lequel il a été réglé.

Voir aussi