Tokenisation : Comment l'IA Lit le Texte
Découvrez comment les LLMs décomposent le texte en tokens, pourquoi le français coûte plus cher que l'anglais, et comment maîtriser vos coûts d'API avec tiktoken.
Par Alex Perey
Les LLMs ne lisent pas des mots
Quand vous envoyez "Bonjour, comment allez-vous ?" à un LLM, il ne reçoit pas des mots. Il reçoit une séquence de nombres entiers, chacun représentant un token. Un token est un fragment de texte : parfois un mot entier, parfois une syllabe, parfois un simple caractère.
Cette distinction impacte directement vos coûts, les limites de contexte, et la qualité des réponses selon la langue.
Un token représente en moyenne 4 caractères en anglais, mais seulement 3 caractères en français. Cette asymétrie a des conséquences concrètes sur votre facture d'API.
BPE : l'algorithme pas à pas
Byte-Pair Encoding (BPE) est utilisé par GPT-4, Llama, Mistral et la plupart des LLMs modernes.
Principe :
- On part de l'alphabet de base (chaque caractère = un token)
- On compte toutes les paires de tokens adjacentes dans le corpus
- On fusionne la paire la plus fréquente en un nouveau token
- On répète jusqu'à atteindre la taille de vocabulaire cible (~100k tokens)
Exemple avec "tokenization" :
Départ : t o k e n i z a t i o n
Étape 1 : tok en iz ation ← fusions des paires fréquentes
Résultat : ["token", "ization"] → 2 tokens seulement
Tiktoken en Python : tokeniser, compter, décoder
import tiktoken
enc = tiktoken.encoding_for_model("gpt-4o")
texte_fr = "Bonjour, comment allez-vous aujourd'hui ?"
texte_en = "Hello, how are you doing today?"
tokens_fr = enc.encode(texte_fr)
tokens_en = enc.encode(texte_en)
print(f"Français : {len(tokens_fr)} tokens")
print(f"Anglais : {len(tokens_en)} tokens")
# Décoder chaque token
for token_id in tokens_fr:
print(f" {token_id} → '{enc.decode([token_id])}'")
Pourquoi le français coûte ~30% plus cher
| Phrase | Tokens | Coût relatif |
|---|---|---|
| "Hello, how are you doing today?" | 8 | 1x |
| "Bonjour, comment allez-vous aujourd'hui ?" | 11 | 1.37x |
| "こんにちは、今日はいかがですか?" (japonais) | 14 | 1.75x |
| "مرحباً، كيف حالك اليوم؟" (arabe) | 16 | 2x |
Les corpus d'entraînement des tokenizers sont majoritairement en anglais. Les mots français avec accents (é, è, ù), les mots composés et les terminaisons verbales correspondent rarement à des tokens complets.
Sur un projet avec 10M de requêtes en français, vous payez 30 à 40% de plus qu'une application équivalente en anglais. Prévoyez ce surcoût dès la conception.
Calculer son budget avant de déployer
import tiktoken
def estimer_cout(texte: str, modele: str = "gpt-4o", role: str = "input") -> dict:
enc = tiktoken.encoding_for_model(modele)
n_tokens = len(enc.encode(texte))
# Tarifs approximatifs ($/1M tokens)
tarifs = {
"gpt-4o": {"input": 2.50, "output": 10.00},
"gpt-4o-mini": {"input": 0.15, "output": 0.60},
}
cout_par_million = tarifs.get(modele, {}).get(role, 0)
cout = (n_tokens / 1_000_000) * cout_par_million
return {
"tokens": n_tokens,
"cout_unitaire_usd": round(cout, 6),
"cout_1000_req_usd": round(cout * 1000, 4)
}
print(estimer_cout("Résume ce document de 500 mots..." * 10, "gpt-4o", "input"))
Context window en tokens : limites des modèles majeurs
| Modèle | Context window | ~Pages A4 |
|---|---|---|
| GPT-3 (2020) | 4 096 | 5 |
| GPT-4 Turbo | 128 000 | 160 |
| Claude 3.5 Sonnet | 200 000 | 250 |
| Gemini 2.0 Flash | 1 048 576 | 1 300 |
| Llama 3.3 (70B) | 128 000 | 160 |
Les cas pièges
Emojis composés : 👨💻 (homme + ZWJ + ordinateur) = 3 tokens. 🏳️🌈 = 4+ tokens.
Code source : L'indentation (espaces/tabs) est tokenisée séquentiellement. Un fichier Python très imbriqué consomme ~20% de tokens supplémentaires.
URLs : https://api.exemple.com/v2/users/123 peut générer 12-15 tokens.
Micro-exercice : Ouvrez le tokenizer playground d'OpenAI et comparez la tokenisation de votre propre nom, d'un terme technique de votre domaine, et d'une URL typique de votre application.
À propos de l'auteur
Alex Perey
Diplômé d'un master en intelligence artificielle, je travaille au quotidien sur des projets IA en entreprise. J'ai créé IwanttolearnAI pour rendre l'apprentissage de l'IA accessible à tous, gratuitement.
Continuer à apprendre
Continuous Batching : Servir des Dizaines d'Utilisateurs sur un Seul GPU
Pourquoi un GPU qui génère pour un seul utilisateur tourne à vide, comment le continuous batching et PagedAttention corrigent ça, et comment régler vLLM en production.
18 min de lecture · 5 vues
Le KV Cache : Pourquoi les LLMs Génèrent Vite (et Mangent la Mémoire)
Comprenez le KV cache, la structure qui évite de recalculer toute l'attention à chaque token généré, et apprenez à estimer combien de mémoire GPU il consomme.
12 min de lecture · 5 vues
Faire Tourner un LLM en Local avec Ollama
Installez et utilisez des LLMs directement sur votre machine avec Ollama : confidentialité totale, coût zéro, et intégration Python en quelques lignes.
15 min de lecture · 40 vues