Laboratoire · Annexe technique
Annexe : mesure du coût en tokens
Méthode et fichiers de la mesure citée dans l’essai « De la balise au token ». Ce sont des ordres de grandeur sur quelques échantillons, non une propriété générale des formats.
Cette annexe accompagne l’essai De la balise au token, partie 3.
Méthode
- Tokenizer : o200k_base, celui des modèles GPT-4o d’OpenAI, via la bibliothèque JavaScript gpt-tokenizer, version 2.9. Le script donne aussi, pour comparaison, cl100k_base (GPT-4 et GPT-3.5). D’autres modèles découpent le texte autrement : les chiffres ne s’y transposent pas tels quels.
- Date : 28 octobre 2026.
- Échantillons textuels : le résumé et la partie 1 de l’essai, en Markdown, en HTML et dans le XML d’un fichier Word (
word/document.xml, produit avec la bibliothèque python-docx, sans mise en forme riche). Le XML Word est mesuré avec et sans son en-tête de déclarations d’espaces de noms, qui pèse à lui seul environ 350 tokens. - Échantillons de facture : une même facture fictive de trois lignes, construite pour l’occasion. La version UBL est un sous-ensemble simplifié de l’EN 16931, sans ventilation de TVA ni adresses. Elle est déclinée en JSON reprenant les mêmes noms d’éléments, puis réduite à ses seules données métier, en JSON et en XML à attributs courts. Les versions métier ne portent pas toute l’information de la version UBL : c’est l’objet de la comparaison. Chaque fichier existe en version indentée et compacte. La syntaxe CII n’a pas été mesurée.
Résultats
| Fichier | Octets | o200k_base | cl100k_base |
|---|---|---|---|
| texte.md | 3 441 | 781 | 878 |
| texte.html | 3 600 | 893 | 984 |
| texte-document.xml | 5 543 | 1 555 | 1 650 |
| texte-document-sans-entete.xml | 4 305 | 1 204 | 1 299 |
| facture-ubl-indentee.xml | 3 325 | 1 089 | 1 101 |
| facture-ubl-compacte.xml | 2 811 | 917 | 929 |
| facture-json-memes-noms-indente.json | 2 620 | 771 | 783 |
| facture-json-memes-noms-compact.json | 1 571 | 444 | 449 |
| facture-json-metier-indente.json | 717 | 284 | 292 |
| facture-json-metier-compact.json | 499 | 185 | 190 |
| facture-xml-metier-indente.xml | 513 | 192 | 201 |
| facture-xml-metier-compact.xml | 494 | 184 | 188 |
Lecture
- À mise en forme égale (versions compactes), la facture UBL coûte environ deux fois plus de tokens que le même contenu en JSON aux mêmes noms : la répétition des noms dans les balises fermantes en est la cause principale.
- Réduite à ses données métier, la facture coûte autant en JSON qu’en XML.
- L’indentation seule ajoute de 20 % (UBL) à 75 % (JSON aux noms UBL).
- Le nombre d’octets et le nombre de tokens ne varient pas dans les mêmes proportions : la compacité en octets n’est pas une mesure du coût pour un modèle, et ni l’une ni l’autre ne mesure la qualité du traitement.
Reproduire
Avec Node.js (testé avec la version 22), dans un dossier contenant les fichiers ci-dessus et le script mesure.cjs :
npm install gpt-tokenizer@2.9.0
node mesure.cjs texte.md facture-ubl-compacte.xml
Le script affiche, pour chaque fichier, sa taille en octets et son nombre de tokens selon o200k_base et cl100k_base. L’échantillon HTML est publié sous le nom texte.html.txt pour être affiché comme du texte ; son contenu est celui qui a été mesuré.