Tokenizer (Tokeniseur)
| Propriete | Detail |
|---|---|
| Categorie | Preprocessing NLP |
| Role | Convertir texte brut en sequence de token IDs (et inversement) |
| Algorithmes courants | BPE, SentencePiece, WordPiece, Unigram |
| Implementations | tiktoken (OpenAI), HuggingFace Tokenizers, SentencePiece (Google) |
| Impact | Determine le vocabulaire, le cout par requete et la fenetre de contexte effective |
Pourquoi un tokenizer est necessaire
Les reseaux de neurones ne traitent pas du texte directement : ils operent sur des nombres. Le tokenizer est le traducteur qui convertit le texte humain en sequences de nombres comprehensibles par le modele, et inversement. Chaque token recoit un identifiant unique (token ID) correspondant a une entree dans le vocabulaire du modele.
La granularite de la tokenisation est un choix de conception fondamental. Tokeniser au niveau des caracteres individuels produit un vocabulaire tres petit mais des sequences tres longues (chaque caractere est un token). Tokeniser au niveau des mots entiers produit des sequences courtes mais un vocabulaire immense, avec l’impossibilite de representer des mots inconnus. La tokenisation en sous-mots (subword tokenization) est le compromis optimal adopte par tous les LLMs modernes.
Le tokenizer est entraine separement du modele, sur un corpus de texte, pour apprendre quelles sequences de caracteres sont suffisamment frequentes pour constituer un token. Les mots courants (« le », « de », « the ») deviennent des tokens uniques, tandis que les mots rares sont decomposes en sous-parties. Par exemple, « anticonstitutionnellement » pourrait etre decoupe en « anti » + « constit » + « ution » + « nellement ».
Approches de tokenisation
Tokenisation par mots
L’approche la plus naive decoupe le texte aux espaces et a la ponctuation. Chaque mot est un token. Les problemes sont nombreux : vocabulaire gigantesque (des millions de mots dans un corpus reel), impossibilite de traiter les mots inconnus (out-of-vocabulary, OOV), et inefficacite pour les langues agglutinantes (turc, finnois, japonais) ou les mots peuvent etre tres longs. Cette approche n’est plus utilisee dans les LLMs modernes.
Tokenisation par caracteres
Chaque caractere individuel est un token. Le vocabulaire est minuscule (quelques centaines d’entrees), et aucun mot n’est inconnu. Mais les sequences deviennent extremement longues (un texte de 1000 mots peut produire 5000+ tokens), ce qui est problematique vu la complexite quadratique de l’attention. Les relations semantiques entre caracteres individuels sont aussi beaucoup plus difficiles a apprendre.
Tokenisation en sous-mots (subword)
C’est le standard universel depuis 2018. Les algorithmes de sous-mots comme BPE (Byte Pair Encoding), WordPiece et Unigram decoupent le texte en morceaux de taille variable : les mots frequents restent entiers, les mots rares sont decomposes en parties connues. Le vocabulaire typique contient entre 32 000 et 150 000 tokens.
Byte Pair Encoding (BPE)
BPE est l’algorithme de tokenisation le plus repandu. Il commence avec un vocabulaire de caracteres individuels, puis fusionne iterativement les paires de tokens les plus frequentes. Apres chaque fusion, les frequences sont recalculees et le processus continue jusqu’a atteindre la taille de vocabulaire desiree.
Par exemple, si « th » et « e » apparaissent frequemment ensemble, ils sont fusionnes en « the ». Si « the » et » » (espace) apparaissent souvent ensemble, ils forment « the » (espace inclus). Ce processus bottom-up construit un vocabulaire ou les tokens frequents sont longs et les tokens rares sont courts.
Byte-level BPE, utilise par GPT et Claude (via tiktoken), opere au niveau des bytes plutot que des caracteres Unicode. Cela garantit que tout byte est representable, eliminant le probleme des caracteres inconnus. Le vocabulaire inclut les 256 bytes de base plus les fusions apprises.
WordPiece et Unigram
WordPiece
Utilise par BERT, WordPiece est similaire a BPE mais choisit les fusions qui maximisent la vraisemblance du corpus d’entrainement plutot que simplement les frequences. Les sous-mots qui ne sont pas en debut de mot sont prefixes par « ## » (par exemple, « playing » -> « play » + « ##ing »). C’est un detail d’implementation qui aide a distinguer les sous-mots de debut et de continuation.
Unigram
L’algorithme Unigram (Kudo, 2018) prend l’approche inverse de BPE. Il commence avec un vocabulaire tres large et supprime iterativement les tokens dont la suppression impacte le moins la vraisemblance globale du corpus. A chaque etape, il cherche la segmentation optimale de chaque mot parmi toutes les segmentations possibles. Cette approche produit generalement un vocabulaire legerement plus « propre » que BPE, avec moins de fragments arbitraires.
SentencePiece
SentencePiece (Kudo et Richardson, 2018) n’est pas un algorithme de tokenisation mais un framework qui implemente BPE et Unigram de maniere language-agnostic. Sa particularite est de traiter le texte comme une sequence brute de caracteres Unicode, sans pre-tokenisation basee sur les espaces. L’espace est traite comme un caractere ordinaire (remplace par un caractere special « ▁ »).
Cela le rend ideal pour les modeles multilingues qui doivent traiter des langues sans espaces (chinois, japonais, thai). Llama, Mistral, T5 et de nombreux modeles multilingues utilisent SentencePiece.
tiktoken (OpenAI)
tiktoken est l’implementation de tokenisation d’OpenAI, utilisee par les modeles GPT-4 et GPT-4o. C’est un BPE byte-level implemente en Rust pour la performance. Il est tres rapide (10-100x plus rapide que les implementations Python) et expose une API simple pour encoder/decoder du texte.
Le vocabulaire de GPT-4 (cl100k_base) contient environ 100 000 tokens. Le vocabulaire de GPT-4o (o200k_base) est encore plus large avec 200 000 tokens, incluant de meilleurs tokens pour les langues non-anglophones et le code. Un vocabulaire plus large signifie des sequences plus courtes (chaque token couvre plus de texte), ce qui est avantageux pour la fenetre de contexte et le cout par requete.
Impact du tokenizer sur les performances
Efficacite par langue
Les tokenizers entraines principalement sur de l’anglais tokenisent les autres langues de maniere inefficace : un meme texte en francais peut necessiter 30 a 50% de tokens en plus qu’en anglais. Cela reduit la fenetre de contexte effective et augmente le cout (les API facturent au token). Les tokenizers modernes (GPT-4o, Llama 3) ameliorent ce probleme avec des vocabulaires multilingues plus equilibres.
Code et tokenisation
Le code est un defi particulier. L’indentation (espaces, tabs) peut consommer beaucoup de tokens si le tokenizer n’a pas appris des tokens multi-espaces. Les noms de variables et de fonctions en camelCase ou snake_case sont souvent decomposes en de nombreux sous-tokens. Les tokenizers recents incluent des tokens specifiques au code pour ameliorer l’efficacite.
Cout et tarification
Les APIs de LLMs facturent au token. Comprendre comment votre tokenizer decoupe le texte permet d’estimer les couts. Des outils en ligne (le tokenizer playground d’OpenAI, le tiktokenizer de Hugging Face) permettent de visualiser la tokenisation et compter les tokens avant d’envoyer une requete.
Tokenizers des principaux LLMs en 2026
| Modele | Tokenizer | Taille vocabulaire | Methode |
|---|---|---|---|
| GPT-4o | tiktoken (o200k_base) | ~200 000 | Byte-level BPE |
| Claude | tiktoken-like | ~100 000 | Byte-level BPE |
| Llama 3 | tiktoken | 128 000 | Byte-level BPE |
| Mistral | SentencePiece | 32 000 | BPE |
| Gemini | SentencePiece | 256 000 | Unigram + BPE |
| BERT | WordPiece | 30 522 | WordPiece |
Questions frequentes
Qu’est-ce qu’un token exactement ?
Un token est l’unite elementaire de texte traitee par un LLM. Ce n’est ni un mot ni un caractere, mais un morceau de texte de taille variable, typiquement entre 1 et 4 caracteres. Les mots frequents sont un seul token (« le », « de »), les mots rares sont decomposes en plusieurs tokens (« anticonstitutionnel » -> 3-5 tokens).
Pourquoi le meme texte peut avoir un nombre de tokens different selon le modele ?
Chaque modele utilise son propre tokenizer, entraine sur des donnees differentes avec des tailles de vocabulaire differentes. Un texte en francais peut donner 100 tokens avec GPT-4o (vocabulaire large, bon support multilingue) et 150 tokens avec Mistral (vocabulaire plus petit). Le tokenizer n’est pas interchangeable entre modeles.
Comment compter les tokens d’un texte ?
Utilisez la librairie officielle du modele. Pour OpenAI : pip install tiktoken, puis tiktoken.encoding_for_model(« gpt-4o »).encode(« votre texte »). Pour les modeles Hugging Face : AutoTokenizer.from_pretrained(« meta-llama/Llama-3-8B »). Des outils web comme le Tokenizer Playground d’OpenAI offrent une visualisation interactive.
Le tokenizer affecte-t-il la qualite du modele ?
Oui, significativement. Un tokenizer inefficace pour une langue donnee produit des sequences plus longues, consommant plus de fenetre de contexte pour le meme contenu. Il peut aussi mal decouper les mots, rendant les representations semantiques moins efficaces. C’est pourquoi les modeles recents investissent dans des vocabulaires multilingues.
Peut-on changer le tokenizer d’un modele existant ?
En theorie oui, mais c’est tres couteux. Le tokenizer determine la couche d’embedding du modele. Changer de tokenizer signifie changer cette couche et re-entrainer (ou au minimum fine-tuner intensivement) le modele. En pratique, on choisit le tokenizer avant l’entrainement et on ne le change plus.