
Comment un LLM lit une phrase : la tokenization en profondeur
Les modèles de langage comme GPT, BERT ou LLaMA ne traitent pas du texte comme nous. Avant même d’activer un neurone, ils doivent le convertir en unités numériques compréhensibles : les tokens.
Mais derrière cette étape apparemment anodine se cache un enjeu majeur pour les performances, la généralisation et la gestion du multilingue. Cet article vous propose une plongée technique dans le fonctionnement des tokenizers modernes, de Byte-Pair Encoding à SentencePiece.
Qu’est-ce qu’un token dans un LLM ?
Les modèles de langage ne manipulent pas directement du texte brut : ils opèrent sur des tokens, c’est-à-dire des unités élémentaires du texte qui sont converties en entiers. Ces tokens peuvent représenter :
- des mots entiers ("chat")
- des sous-mots ("ation" dans "ration")
- des caractères isolés ("x", "@")
- voire des byte-pairs ("ĠThe", "##ing")
Exemple :
"internationalization" → ["inter", "national", "ization"] (BPE)
Le texte est découpé en tokens, puis chaque token est associé à un ID entier à l’aide d’un vocabulaire appris.
Tokenization : Pourquoi tokenize-t-on le texte ?
- Réduire la taille du vocabulaire à quelques dizaines de milliers d’entrées
- Gérer les mots inconnus (out-of-vocabulary)
- Permettre un traitement linguistiquement robuste et multilingue
- Maintenir des séquences de taille gérable (coût quadratique de l’attention)
Modèle/tokenizer | Résultat |
---|---|
GPT-2 (BPE) | ['I', '’', 'm', ' testing', ' token', 'ization', ' algorithms', '.'] |
BERT (WordPiece) | ['[CLS]', 'i', ''', 'm', 'testing', 'token', '##ization', 'algorithms', '.', '[SEP]'] |
LLaMA (SentencePiece) | ['▁I', '’', 'm', '▁testing', '▁token', 'ization', '▁algorithms', '.'] |
Les préfixes ## en WordPiece indiquent un sous-mot.
GPT-2 utilise des espaces codés (' testing') pour préserver la segmentation.
Aperçu des principales méthodes de tokenization
✅ BPE (Byte-Pair Encoding)
Utilisé par : GPT-2, GPT-3, GPT-J, CLIP…
Principe : part d’un vocabulaire minimal (souvent des caractères ou byte-level tokens), puis apprend à fusionner les paires de symboles les plus fréquentes du corpus.
Processus :
- Décomposer chaque mot en caractères (ou bytes)
- Compter les paires adjacentes les plus fréquentes
- Fusionner ces paires en un seul token
- Répéter jusqu’à atteindre une taille de vocabulaire cible (souvent entre 30k et 50k)
Initial : ['l', 'o', 'w', 'e', 'r']
Fusion : ['l', 'ow', 'e', 'r']
Fusion finale : ['l', 'ow', 'er']
- Très bon compromis entre granularité et compacité
- Robuste face aux néologismes, fautes, noms propres
- Vocabulaire stable une fois entraîné
- Dépendance au corpus d’entraînement
- Pas de notion linguistique
- Découpage parfois peu intuitif
✅ WordPiece (BERT)
Utilisé par : BERT, RoBERTa, DistilBERT, Albert…
Principe : inspiré de BPE, mais avec un algorithme probabiliste basé sur la vraisemblance du corpus.
Exemple comparatif :
Mot | WordPiece tokens |
---|---|
Playing | ['play', '##ing'] |
Football | ['foot', '##ball'] |
Again | ['again'] |
En pratique avec Hugging Face
from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
tokens = tokenizer.tokenize("Unbelievable results!")
print(tokens)
# ['un', '##bel', '##iev', '##able', 'results', '!']
Particularités BERT
- [CLS] : token spécial ajouté en début de séquence (pour classification)
- [SEP] : token séparateur entre deux phrases (pour le Next Sentence Prediction)
- Casse : modèles uncased minusculisent et suppriment les accents ; les modèles cased les conservent
SentencePiece
Utilisé par : LLaMA, T5, mT5, XLNet, ByT5, ALBERT (avec variantes), MarianMT, etc.
Principe : SentencePiece est un tokenizer auto-suffisant, entraîné directement sur du texte brut, sans présupposer que les mots sont séparés par des espaces.
Fonctionnement
- Ne suppose aucune séparation par espaces (utile pour les langues agglutinantes ou logographiques)
- Peut fonctionner à un niveau caractère, byte, ou unicode codepoint
- Implémente deux algorithmes :
- Unigram Language Model (par défaut dans T5)
- BPE modifié (optionnel)
- Entraîné via une probabilité jointe des sous-tokens, maximisant la probabilité tout en minimisant la complexité du vocabulaire
['▁The', '▁cat', '▁sat', '.']
Le caractère ▁ représente un espace intégré dans le token, permettant une reconstruction exacte du texte d’origine.
Exemple multilingue
→
['▁私', 'は', 'AI', 'が', '好', 'き', 'です']
- Indépendant de la langue ou des conventions d’écriture
- Gère parfaitement les langues sans espace
- Représentation fidèle du texte brut (reversibilité exacte)
- Tokens peu lisibles pour un humain
- Découpage parfois contre-intuitif
- Unigram LM plus coûteux à entraîner
En pratique avec SentencePiece
import sentencepiece as spm
sp = spm.SentencePieceProcessor()
sp.load("m.model")
tokens = sp.encode("The cat sat.", out_type=str)
print(tokens)
# ['▁The', '▁cat', '▁sat', '.']
📦 Utilisations typiques
Modèle | Méthode utilisée | Caractéristiques |
---|---|---|
T5 | Unigram LM | Full-text-to-text, position agnostique |
LLaMA | BPE dans SentencePiece | Contextes longs, multilingue |
mT5 | Unigram | 101 langues, performance équilibrée |
ByT5 | Byte-level | Directement sur UTF-8 (robustesse maximale) |
⚠️ Cas limites de la tokenization
Prenons un identifiant de variable ou un nom rare :
input = "z3r0C00l@#"
GPT-2 :
['z', '3', 'r', '0', 'C', '00', 'l', '@', '#']
BERT :
['z', '##3', '##r', '##0', '##c', '##00', '##l', '@', '#']
Plus un mot est inconnu, plus il sera fragmenté — ce qui impacte :
- La longueur des séquences (et donc le coût quadratique de l’attention)
- La capacité du modèle à raisonner sémantiquement
- Le cross-attention dans les architectures encoder-decoder
Impact sur les performances
- Tokenisation trop fine : séquences plus longues, consommation mémoire accrue
- Tokenisation trop grossière : perte de généralisation, augmentation des OOV
Tokenization - exemple Python
from transformers import GPT2TokenizerFast
tokenizer = GPT2TokenizerFast.from_pretrained("gpt2")
tokens = tokenizer.tokenize("The cat sat.")
print(tokens)
# ['The', 'Ġcat', 'Ġsat', '.']
Le caractère Ġ encode un espace. Le vocabulaire est entraîné à reconnaître les formes fréquentes du corpus d’origine.
Conclusion
La tokenization est bien plus qu’un simple prétraitement textuel : c’est la porte d’entrée fondamentale d’un modèle de langage. Le choix de l’algorithme (BPE, WordPiece, SentencePiece) influence directement la manière dont le modèle perçoit et encode l’information.
- Mieux interpréter les sorties d’un LLM
- Optimiser l’entraînement et l’inférence
- Adapter la chaîne de traitement aux contraintes du domaine
C’est aussi une étape clé pour tout projet de fine-tuning ou de pré-entraînement custom d’un LLM.
Pour aller plus loin
MARGO AI Solutions vous accompagne dans la mise en place de pipelines robustes, l’optimisation des performances et l’industrialisation de vos cas d’usage IA.
📞 Contactez nos experts IA