Ce que coûte un caractère
la mesure. relevé local · 2026-09-05 · le serveur · 151 936 touches · 0 €
Le clavier de Qwen2.5 est sorti du fichier GGUF présent ici, le BPE est réécrit, et on le fait tourner sur des textes réels du dépôt. Même clavier partout : seule la matière change.
- run
- relevé local
- date
- 2026-09-05
- machine
- le serveur, CPU
- durée
- 2 min
- coût
- 0 €
- journal
- EXPERIENCES.md
Le témoin, avant tout le reste
Une réimplémentation du BPE qui se trompe donnerait des chiffres crédibles et faux. Le contrôle : elle doit refaire à l'identique les deux découpes que le vrai tokenizer avait mesurées sur Kaggle au run-015. « Le chat noir dort sur le canapé. » → 10 jetons. « anticonstitutionnellement » → 5. Les deux tombent juste, et le script s'arrête net sinon.
assertion dans training/local/tokenisation.py · comparée au run-015
Sept matières, un seul clavier
Sur des pages d'emploi issues du même crawl, 300 en français et 300 en anglais, la même quantité de texte coûte 3,32 caractères par jeton en français contre 3,77 en anglais. Dire la même chose en français consomme 13 % de jetons en plus — donc 13 % de fenêtre en moins, et 13 % de facture en plus chez un fournisseur.
2 × 300 pages, ~1 milli. de caractères par langue → tokenisation.json
Les nombres font exactement 1,00. Pas « environ » : chaque chiffre est un jeton, toujours. Ce n'est pas appris, c'est la règle de découpe de la page précédente qui isole les chiffres un par un. 4096 coûte 4 jetons, et un modèle qui calcule ne voit jamais un nombre comme un objet.
3 945 caractères de nombres → 3 945 jetons
Le clavier n'est pas neutre
Sur les 141 755 touches qui portent au moins une lettre, voici pour quelle écriture elles ont été dépensées :
| écriture | touches | % |
|---|---|---|
| ASCII (l'alphabet nu) | 88 911 | 62,7 |
| chinois / japonais / coréen | 31 086 | 21,9 |
| latin accentué (é, ñ, ü…) | 5 975 | 4,2 |
| cyrillique | 4 142 | 2,9 |
| arabe | 3 978 | 2,8 |
| hébreu | 3 179 | 2,2 |
| thaï | 2 549 | 1,8 |
Le français ne se partage que 5 975 touches accentuées — avec l'espagnol, le portugais, l'allemand et le vietnamien. L'anglais a l'ASCII pour lui seul, soit 88 911. C'est l'explication des 13 % mesurés plus haut : le clavier a été fabriqué sur un corpus où le français pesait peu.
décodage des 151 936 touches du GGUF, classées par bloc Unicode
Ce que le clavier coûte en poids
Chaque touche occupe une ligne dans la table d'entrée, et une dans celle de sortie. Sur un petit modèle, ça se voit :
Pythia-160M
des poids sont le clavier — 50 304 touches, deux tables séparées
Qwen2.5-0.5B
151 936 touches, mais une seule table partagée entrée / sortie
Près de la moitié de Pythia-160M n'est pas un cerveau : c'est un annuaire. Et le modèle qui a trois fois plus de touches en dépense deux fois moins en proportion, parce qu'il réutilise la même table aux deux bouts.
tailles lues dans le GGUF et dans le config.json de Pythia
Le duel : gros clavier contre longues séquences
Le même texte — 20 000 caractères de mon journal — donne 6 712 jetons avec le clavier BPE de Qwen, et 20 000 avec le clavier caractère de mon MoE maison. Soit ×2,98 de longueur pour un clavier ×638 plus petit. Et comme l'attention grandit avec le carré de la longueur, ce ×2,98 devient ×8,9 de cases d'attention.
238 caractères (run-034/035) contre 151 936 jetons (Qwen) sur le même texte
Les cinq claviers déjà construits ici
| modèle | matière | touches | la règle |
|---|---|---|---|
| mini-GPT dessin (run-004b) | traits QuickDraw | 135 | 7 jetons de service + 64 abscisses + 64 ordonnées |
| mini-GPT dessin conditionné (run-006c) | traits Sketchy | 388 | grille 128 + un jeton par catégorie, en tête de séquence |
| VQ-GPT (run-013) | images 128×128 | 513 | dictionnaire visuel APPRIS ; une image = 16×16 = 256 jetons |
| MoE maison (run-034/035) | Wikipédia FR | 238 | un caractère = un jeton, s'il apparaît au moins 100 fois |
| Qwen2.5 (run-015…) | texte | 151 936 | BPE octet : les paires fréquentes fusionnent, 151 387 fois |
Le texte a des unités naturelles ; un dessin, non — il a fallu les inventer (une grille de coordonnées) ; une image, non plus — au run-013 c'est le modèle qui a appris son propre alphabet de 512 codes visuels.
Ce qui n'est pas mesuré, et qui manque : l'effet de la taille du clavier sur la qualité, à corpus et budget égaux. Tout ce qui est ici décrit des coûts, pas des résultats. Le run existe en tête — mini-GPT, même largeur, vocabulaire caractère / 512 / 4 096 / 16 000, trois graines — il n'est pas lancé.
Reste la question qui vient juste après : d'accord pour la découpe, mais on lui donne quoi ? Une phrase, un texte, un livre ? La page suivante le montre en direct.