Un LLM ne voit jamais le texte que tu lui envoies. Entre ta chaîne de caractères et le modèle, il y a une étape obligatoire : la tokenization, qui découpe le texte en unités d'un vocabulaire fixe — les tokens — puis les convertit en identifiants entiers. Le modèle ne manipule que ces entiers, en entrée comme en sortie. Tout ce qu'il « connaît » du langage est indexé sur ce découpage.
Ce n'est pas un détail d'implémentation. Le tokenizer explique pourquoi un prompt en français coûte plus cher que le même en anglais, pourquoi " chien" et "chien" ne sont pas la même entrée, pourquoi un modèle bute sur l'arithmétique posée, et pourquoi la mécanique d'inférence se compte en tokens et pas en mots. Le découpage le plus répandu s'appelle BPE (Byte Pair Encoding), et sa logique mérite d'être comprise plutôt que subie.
Ni des mots, ni des caractères
On pourrait découper le texte en mots. Problème : le vocabulaire d'une langue est ouvert (noms propres, néologismes, fautes de frappe, agglutinations), un vocabulaire par mots serait énorme et raterait tout ce qu'il n'a jamais vu — le fameux out-of-vocabulary. À l'inverse, découper caractère par caractère donne un vocabulaire minuscule mais des séquences très longues : chaque token porte alors très peu de sens, et le modèle doit dépenser sa capacité à recomposer des mots avant même de raisonner.
Le découpage en sous-mots est le compromis. Les mots fréquents restent d'un seul tenant (the, de, ing), les mots rares se cassent en morceaux réutilisables (tokenization → token + ization). Le vocabulaire reste borné (typiquement 30 000 à 200 000 entrées) et rien n'est jamais vraiment hors-vocabulaire : au pire, un mot inconnu retombe sur ses octets.
BPE : fusionner les paires fréquentes
L'algorithme d'entraînement du tokenizer est presque trivial. On part d'un vocabulaire réduit aux caractères de base (ou aux 256 octets). Puis on répète : compter toutes les paires de symboles adjacents dans le corpus, prendre la paire la plus fréquente, l'ajouter au vocabulaire comme un nouveau symbole, et réécrire le corpus avec cette fusion. On s'arrête quand le vocabulaire atteint la taille voulue. Le résultat n'est pas une liste de mots : c'est une liste ordonnée de règles de fusion.
À l'inférence, tokenizer un texte, c'est appliquer ces fusions dans l'ordre où elles ont été apprises, jusqu'à ce qu'aucune ne s'applique plus. C'est déterministe et rapide. Deux conséquences directes : le découpage d'un mot dépend de ce que le corpus d'entraînement contenait (un mot courant à l'époque = peu de tokens), et il est contextuel au niveau des caractères mais pas au niveau du sens — "lire" le verbe et "lire" la monnaie donnent les mêmes tokens.
Les variantes modernes (le BPE au niveau octet de GPT, WordPiece de BERT, Unigram de SentencePiece) changent les détails — gestion des espaces, critère de sélection des fusions — mais l'idée reste : un vocabulaire de sous-mots construit statistiquement sur un corpus.
Un token n'est pas un mot
C'est le contresens le plus courant. Un token, c'est en moyenne trois quarts de mot en anglais, souvent moins en français. Il inclut la ponctuation, et surtout l'espace qui précède : dans la plupart des tokenizers, "chien" en début de phrase et " chien" après un mot sont deux tokens différents. D'où des comportements déroutants quand on assemble des prompts par concaténation ou qu'on force un préfixe de réponse.
| Entrée | Découpage typique (BPE octet) | Tokens |
|---|---|---|
tokenization | token · ization | 2 |
anticonstitutionnellement | anti · const · itution · nellement | 4+ |
1234567 | 123 · 45 · 67 (groupes arbitraires) | 3 |
🙂 | plusieurs octets → plusieurs tokens | 2–4 |
| « Bonjour, comment ça va ? » (FR) | mots + accents fragmentés | ~9 |
| « Hello, how are you? » (EN) | mots quasi entiers | ~6 |
Le découpage des nombres explique une partie des ratés arithmétiques : si 127 et 128 tombent sur des tokens sans rapport, le modèle ne « voit » pas qu'ils sont consécutifs. Les tokenizers récents corrigent ça en forçant les chiffres à un token chacun.
Côté français, le surcoût est structurel : les vocabulaires BPE grand public sont entraînés très majoritairement sur de l'anglais. Les mots français fréquents et les lettres accentuées se retrouvent découpés en plus de morceaux — à budget de contexte égal, on fait tenir moins de texte utile, et chaque appel est plus cher. C'est un paramètre à garder en tête quand on estime un budget d'appels et un rate limit.
Le vocabulaire est figé à l'entraînement
Une fois le modèle entraîné, son tokenizer est gelé : on ne peut pas lui ajouter un mot métier sans réentraîner. Le jargon de ton domaine (noms de produits, identifiants, termes techniques) sera systématiquement redécoupé en fragments, ce qui gonfle la note et disperse le signal. Si un terme revient dans tous tes prompts, mesure son coût réel en tokens avant de le répéter mille fois par jour.
Autre curiosité : les glitch tokens. Certains tokens ont été créés par BPE à partir de chaînes très fréquentes dans le corpus de tokenization (pseudos de forums, artefacts de scraping) mais quasi absentes du corpus d'entraînement du modèle. Le modèle a un identifiant pour eux mais n'a presque jamais appris à les manier — les invoquer produit des sorties incohérentes. C'est rare, mais c'est un rappel utile : le tokenizer et le modèle sont deux artefacts distincts, entraînés sur des données qui ne se recouvrent pas parfaitement.
En pratique, retenir trois réflexes : raisonner en tokens et pas en caractères pour tout ce qui touche au coût et au budget de prompt ; se méfier des espaces et préfixes quand on assemble des chaînes ; et savoir que le français paie une taxe de tokenization qu'aucun réglage côté API ne supprime.
FAQ
Un token, est-ce un mot ?
Non. Un token est une unité d'un vocabulaire de sous-mots : cela peut être un mot entier fréquent, un fragment de mot, un signe de ponctuation ou un caractère isolé. En anglais, un token vaut environ trois quarts de mot ; en français, souvent moins.
Pourquoi un texte français consomme-t-il plus de tokens que le même en anglais ?
Parce que les vocabulaires BPE grand public sont entraînés majoritairement sur de l'anglais. Les mots français courants et les lettres accentuées ne font pas partie des fusions apprises et se découpent donc en davantage de morceaux.
Peut-on ajouter ses propres mots au vocabulaire d'un modèle ?
Pas sans réentraîner le tokenizer et, en pratique, le modèle. Certains modèles acceptent quelques tokens spéciaux ajoutés, mais le vocabulaire général est figé : le jargon métier reste redécoupé en fragments.