Débutant 9 minBases

Tokens et tokenization : comprendre ce que mange un LLM

Un LLM ne lit pas des mots ni des lettres : il lit des tokens, des fragments de texte issus d'un découpage appelé tokenization. Cette unité invisible décide de tout — combien votre modèle peut mémoriser, à quelle vitesse il répond, et pourquoi le même texte en français « pèse » plus lourd qu'en anglais. Ce guide explique concrètement ce qu'est un token, comment fonctionne la tokenization d'un LLM, et ce que ça change quand vous faites tourner un modèle en local.

Par Mohamed Meguedmi·Màj 2026-09-13·Testé sur Windows, macOS, Linux

#Pourquoi parler de tokens

Quand vous discutez avec un LLM local via Ollama ou LM Studio, vous tapez des phrases. Le modèle, lui, ne voit jamais vos phrases telles quelles. Avant même le premier calcul, votre texte est transformé en une suite de nombres, chacun représentant un token. Tout ce que fait le modèle — comprendre, générer — se passe au niveau de ces tokens, pas des mots.

Comprendre les tokens n'est pas un détail académique. C'est ce qui explique trois choses très concrètes : pourquoi un document « rentre » ou non dans la fenêtre de contexte, pourquoi votre modèle génère à telle vitesse (les fameux tokens par seconde), et pourquoi une facturation d'API cloud ou une limite de contexte se compte toujours en tokens, jamais en mots.

i
Le mot-clé à retenir
La tokenization d'un LLM est l'étape qui découpe votre texte en tokens avant traitement. C'est un pré-traitement déterministe : le même texte donne toujours les mêmes tokens pour un modèle donné.

#Un token, c'est quoi exactement

Le kit IA Locale

Ton ChatGPT privé et gratuit sur ta machine en 1 heure — LM Studio, Ollama, Open WebUI, tes documents, sans cloud.

  • Espace en ligne à vie
  • PDF + fichiers
  • Remboursé 30 j

Un token est un fragment de texte : parfois un mot entier, souvent un morceau de mot, parfois un simple caractère ou un signe de ponctuation. Ce n'est ni une lettre, ni un mot au sens strict — c'est une unité statistique choisie par l'algorithme de tokenization pour représenter le texte le plus efficacement possible.

La règle empirique la plus utile : en anglais, 1 token ≈ 4 caractères ≈ 0,75 mot. Autrement dit, 100 tokens font environ 75 mots anglais. Pour le français, le ratio est nettement moins favorable, on y revient plus bas.

"chat"
Un mot fréquent et court : souvent 1 seul token.
"anticonstitutionnellement"
Un mot rare et long : découpé en plusieurs tokens (anti / constitution / nelle / ment…).
" " (espace)
L'espace est généralement collé au début du token suivant, pas isolé.
"123456"
Les nombres sont souvent découpés chiffre par chiffre ou par petits groupes.
😀
Un emoji peut coûter plusieurs tokens à lui seul.

Les mots très courants héritent d'un token unique parce qu'ils reviennent partout dans les données d'entraînement. Les mots rares, techniques ou dans une langue peu représentée sont reconstruits à partir de sous-morceaux — ce qui les rend plus « chers » en tokens.

#Comment un texte est réellement découpé

La plupart des LLM modernes utilisent une famille d'algorithmes appelée BPE (Byte Pair Encoding) ou ses variantes (WordPiece, Unigram). Le principe : partir des caractères bruts, puis fusionner progressivement les paires de symboles les plus fréquentes du corpus d'entraînement jusqu'à obtenir un vocabulaire de taille fixe — typiquement de 32 000 à 200 000 tokens selon le modèle.

  1. 01
    Découpage initial
    Le texte est ramené à ses octets ou caractères de base. Rien n'est perdu : toute chaîne peut être représentée.
  2. 02
    Fusions apprises
    Le tokenizer applique la liste de fusions apprise à l'entraînement (par ex. « t » + « ion » → « tion »), dans l'ordre de fréquence.
  3. 03
    Conversion en identifiants
    Chaque token final est remplacé par son numéro dans le vocabulaire. Le modèle ne manipule plus que ces entiers.

Conséquence importante : le vocabulaire est figé à l'entraînement. Un modèle entraîné surtout sur de l'anglais aura un vocabulaire optimisé pour l'anglais, et découpera le français en morceaux plus petits et plus nombreux. C'est la racine du surcoût francophone.

Chaque modèle a son tokenizer
Le même texte ne donne pas le même nombre de tokens sur Llama, Qwen, Mistral ou Gemma. Un décompte est toujours relatif à un modèle précis. Pour un décompte fiable, utilisez le tokenizer du modèle que vous faites vraiment tourner.

#Pourquoi le français coûte plus cher que l'anglais

À contenu équivalent, un texte français consomme couramment 15 à 30 % de tokens de plus que sa traduction anglaise. Sur certains modèles très centrés sur l'anglais, l'écart peut dépasser 50 %. Trois raisons se cumulent.

Vocabulaire déséquilibré
Les tokenizers sont entraînés majoritairement sur de l'anglais : les mots anglais fréquents ont leur token dédié, pas les mots français.
Accents et caractères spéciaux
é, è, à, ç, œ… sont plus rares dans le vocabulaire et sont parfois éclatés en plusieurs tokens (voire en octets).
Morphologie plus riche
Conjugaisons, accords, élisions (l', d', qu') multiplient les formes d'un même mot, moins bien couvertes par le vocabulaire.

Exemple concret : la phrase anglaise « The cat is on the table » fait environ 6 tokens. Sa version française « Le chat est sur la table » en fait plutôt 7 à 8 selon le modèle. Sur un paragraphe entier, l'écart devient significatif — et il se paie deux fois : en place dans la fenêtre de contexte, et en temps de génération.

i
Bonne nouvelle : ça s'améliore
Les modèles récents et multilingues (Qwen, Gemma, Mistral) ont des tokenizers bien plus équilibrés que les premières générations. L'écart français/anglais reste, mais il s'est nettement réduit sur les modèles pensés multilingues dès le départ.

#Tokens et fenêtre de contexte

La fenêtre de contexte d'un modèle se mesure en tokens, pas en mots ni en caractères. Un modèle annoncé avec 32 768 tokens de contexte peut « voir » à un instant donné l'équivalent de ~24 000 mots anglais — mais seulement ~18 000 à 20 000 mots français, à cause du surcoût de tokenization.

Cette fenêtre inclut tout : le system prompt, l'historique de la conversation, votre message actuel, les documents collés, et la réponse en cours de génération. Quand le total dépasse la limite, le modèle tronque — généralement le plus ancien — et « oublie » le début de l'échange.

System prompt
Compté à chaque appel. Un prompt système bavard grignote le contexte en permanence.
Historique
Chaque tour de conversation s'accumule. Une longue discussion finit par saturer la fenêtre.
Documents (RAG, copier-coller)
Un PDF de 10 pages, c'est vite plusieurs milliers de tokens.
Réponse générée
La sortie occupe aussi de la place : il faut réserver de quoi répondre.
!
Le piège du contexte qui gonfle la VRAM
En local, agrandir la fenêtre de contexte n'est pas gratuit : le KV cache grossit avec le nombre de tokens et consomme de la VRAM en plus des poids du modèle. Un contexte de 32k peut réclamer plusieurs gigaoctets supplémentaires. Trop de contexte peut faire déborder votre GPU et écrouler la vitesse.

#Tokens et vitesse en local

La vitesse d'un LLM se mesure en tokens par seconde (tok/s). C'est l'unité universelle des benchmarks. Deux moments à distinguer, souvent confondus.

Prompt / prefill
Le temps pour « lire » votre prompt entier. Plus il y a de tokens en entrée, plus la première réponse tarde à démarrer.
Génération / decode
Le rythme auquel les tokens de réponse sortent, un par un. C'est le tok/s qu'on observe à l'écran.

Conséquence directe pour le français : puisque le même contenu représente plus de tokens, votre modèle met mécaniquement plus de temps à traiter un prompt francophone et à générer une réponse francophone de longueur équivalente. Le ressenti « c'est plus lent en français » n'est pas subjectif — c'est du comptage de tokens.

La vitesse de decode dépend surtout du modèle et du matériel (paramètres actifs par token, bande passante mémoire, quantization). Mais à matériel fixe, réduire le nombre de tokens en entrée — prompt système plus court, historique élagué — accélère nettement le time-to-first-token.

#Compter les tokens d'un texte soi-même

Le meilleur moyen d'acquérir l'intuition, c'est de mesurer. Voici trois approches, de la plus simple à la plus précise.

#Estimer à la louche

Pour une estimation rapide sans rien installer : divisez le nombre de caractères par 4 pour l'anglais, par 3 à 3,5 pour le français. C'est grossier mais suffisant pour savoir si un document tient dans une fenêtre de contexte.

#Compter en Python avec le vrai tokenizer

Pour un décompte exact, utilisez le tokenizer du modèle. La bibliothèque tokenizers / transformers de Hugging Face charge le tokenizer réel d'un modèle open-weight :

Compter avec le tokenizer du modèle
from transformers import AutoTokenizer

# Remplacez par le modèle que vous faites tourner en local
tok = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-7B")

texte_fr = "Le chat est sur la table."
texte_en = "The cat is on the table."

print(len(tok.encode(texte_fr)), "tokens (fr)")
print(len(tok.encode(texte_en)), "tokens (en)")

# Voir le découpage réel
print(tok.tokenize(texte_fr))

Lancer ce script sur vos propres textes est l'exercice le plus parlant : vous voyez de vos yeux quels mots français sont éclatés et de combien l'anglais est plus compact.

#Lire le décompte depuis l'API Ollama

Ollama expose déjà les décomptes de tokens dans ses réponses. Le daemon écoute par défaut sur http://localhost:11434 ; un appel à l'API renvoie prompt_eval_count (tokens du prompt) et eval_count (tokens générés) :

Terminal
curl http://localhost:11434/api/generate -d '{
  "model": "qwen2.5:7b",
  "prompt": "Explique la tokenization en une phrase.",
  "stream": false
}' | grep -o '"eval_count":[0-9]*'

Vous y retrouvez aussi eval_duration : divisez eval_count par la durée pour obtenir votre vrai débit en tokens par seconde, sur votre machine, avec votre quantization.

#Économiser des tokens sans perdre en qualité

Puisque chaque token coûte en contexte et en vitesse, quelques réflexes simples font une vraie différence, surtout en français.

System prompt concis
Il est renvoyé à chaque appel. Chaque phrase superflue se paie à chaque tour.
Élaguer l'historique
Résumez ou coupez les vieux échanges plutôt que de traîner toute la conversation.
RAG plutôt que tout coller
N'injectez que les passages pertinents d'un document, pas le document entier.
Cibler la longueur de sortie
Demander une réponse courte génère moins de tokens — donc plus vite.
Le bon ordre de grandeur
Avant de coller un gros document dans le chat, estimez son poids : ~3 caractères par token en français. Un texte de 30 000 caractères, c'est ~10 000 tokens — soit un tiers d'une fenêtre 32k, avant même votre question et la réponse.

#Pour aller plus loin

Les tokens sont le fil qui relie plusieurs notions de base. Trois guides prolongent directement celui-ci : le premier détaille la fenêtre de contexte que les tokens viennent remplir, le deuxième explique comment la quantization influe sur la vitesse mesurée en tokens par seconde, le troisième montre comment le transformer traite ces tokens en interne.


Ce guide vous a aidé ?

Un retour, une erreur, une précision ? Faites-nous signe, ça améliore le guide pour tout le monde.