actu-image
Artificial intelligence - 25 Aug 2025

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")
À retenir : un token n’est pas nécessairement un mot : il peut être un mot complet, un sous-mot, un caractère ou même une combinaison de bytes.

Exemple :

"internationalization" → ["international", "##ization"] (WordPiece)
"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)
Prenons la phrase suivante : "I’m testing tokenization algorithms."
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 underscore ▁ indiquent une séparation de mot en SentencePiece.
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)
Exemple simplifié sur "lower" :
Initial : ['l', 'o', 'w', 'e', 'r']
Fusion : ['l', 'ow', 'e', 'r']
Fusion finale : ['l', 'ow', 'er']
Avantages
  • Très bon compromis entre granularité et compacité
  • Robuste face aux néologismes, fautes, noms propres
  • Vocabulaire stable une fois entraîné
Inconvénients
  • 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.

Contrairement à BPE, WordPiece cherche à maximiser la probabilité globale du corpus selon un modèle de langage.

Exemple comparatif :

Mot WordPiece tokens
Playing ['play', '##ing']
Football ['foot', '##ball']
Again ['again']

En pratique avec Hugging Face

Exemple Python :
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
Exemple sur "The cat sat." :
['▁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

Phrase japonaise : "私はAIが好きです"
['▁私', 'は', 'AI', 'が', '好', 'き', 'です']
Avantages
  • 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)
Inconvénients
  • 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
Les nouveaux tokenizers comme tiktoken (OpenAI) optimisent ce compromis en combinant BPE et heuristiques Unicode.

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

💡 Vous souhaitez intégrer efficacement les LLMs dans vos applications métiers ?
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