#tokenisation — LLM et transformers
Tokenisation et BPE : comment un LLM découpe le texte.
Ce que tu vas manipuler
- Bienvenue dans #tokenisation. À l'écran, la phrase « Les réseaux de neurones apprennent en ajustant leurs poids. » découpée par un tokenizer BPE appris sur un mini-corpus français, après 30 fusions : chaque tuile est un token, l'unité que le modèle lit vraiment. À droite, le compteur : 38 tokens pour 59 caractères. Un LLM ne voit jamais de lettres ni de mots, seulement ces morceaux numérotés dans un vocabulaire, et c'est leur nombre qui fixe le prix d'une requête et ce qui tient dans sa fenêtre de contexte.
- Commençons par le découpage le plus naïf : un token par caractère. Tape
/methode caracteres. - À l'opposé : un token par mot.
/methode mots. - BPE part des caractères et apprend à coller les paires les plus fréquentes du corpus. Remets le compteur de fusions à zéro :
/fusions 0. - Applique la première fusion apprise sur le corpus :
/fusionner. - Répéter l'opération quarante fois donne un vrai tokenizer :
/fusions 40. - Éprouvons-le sur une phrase pleine d'accents :
/exemple accents. - Traduisons tout cela en coût :
/compter. - À toi de jouer :
/texte …avec ta propre phrase,/exemple code(du Python face à un tokenizer français),/langue en(corpus anglais : regarde les accents devenir inconnus),/vocabulaire(les 20 tokens les plus fréquents),/fusions 60pour pousser le BPE au bout,/reinitpour repartir. Prochaine étape : le canal #attention, où ces tokens se regardent les uns les autres pour se donner du sens.
Commandes du canal
/texte <mot>— Remplace le texte à tokeniser (toute la ligne, 120 caractères au plus)./methode <caracteres|mots|bpe>— Change la façon de découper : par caractère, par mot ou par sous-mots BPE./fusions <0..60>— Nombre de fusions BPE appliquées au texte (passe en méthode bpe)./fusionner— Applique une fusion BPE de plus et met la paire fusionnée en avant./langue <fr|en>— Corpus sur lequel le BPE est appris : français (42 phrases) ou anglais (15 phrases)./vocabulaire— Taille du vocabulaire courant et ses 20 tokens les plus fréquents dans le corpus./compter— Caractères, tokens, ratio et coût estimé si 1 token = 1 unité de facturation./exemple <court|long|accents|code>— Charge un texte prédéfini : court, long, plein d'accents ou du code./reinit— Revient à la phrase de départ, BPE, 30 fusions, corpus français.
Glossaire
- Token
- L'unité que lit et produit un modèle de langage : un morceau de texte (lettre, fragment de mot, mot entier, signe) numéroté dans un vocabulaire. Un LLM ne voit jamais de lettres ni de mots, seulement une suite de numéros de tokens. Le prix d'une requête et la taille de la fenêtre de contexte se comptent en tokens.
- Tokenisation
- Étape qui transforme un texte en suite de tokens avant d'entrer dans le modèle, et qui recolle les tokens produits en texte à la sortie. Par caractère : séquences très longues ; par mot : vocabulaire ouvert et mots inconnus ; par sous-mots (BPE, WordPiece) : le compromis adopté par tous les LLM.
- BPE (byte-pair encoding)
- Algorithme de tokenisation en sous-mots : on part des caractères (ou des octets), on compte toutes les paires de symboles adjacents dans le corpus, on fusionne la plus fréquente, et on répète un nombre fixé de fois. Les fusions apprises sont ensuite appliquées dans le même ordre à tout nouveau texte. Utilisé par GPT, Llama, Mistral.
- Vocabulaire
- La table de tous les tokens qu'un modèle connaît, chacun avec son numéro. Sa taille est un choix de conception (32 000 à 200 000 entrées pour les LLM actuels) : plus il est grand, plus les textes sont courts en tokens, mais plus la table de plongements et la couche de sortie sont lourdes.
- Sous-mot
- Token plus petit qu'un mot : une racine, un préfixe, une terminaison (« ré », « eur », « ent· »). Un mot fréquent est un seul sous-mot, un mot rare ou inventé est découpé en plusieurs : le modèle peut ainsi lire n'importe quel mot sans jamais tomber sur un inconnu.
- Token inconnu (UNK)
- Symbole de remplacement qu'un tokenizer par mots émet pour tout mot absent de son vocabulaire : l'information est perdue. Les tokenizers en sous-mots l'évitent en retombant sur les caractères, et les tokenizers au niveau de l'octet le suppriment tout à fait (256 octets suffisent à écrire n'importe quoi).
- Fenêtre de contexte
- Nombre maximal de tokens qu'un modèle peut prendre en compte d'un coup (question, documents fournis et réponse compris) : 8 000, 128 000, parfois plus d'un million. Elle se mesure en tokens, jamais en mots : un texte mal tokenisé (langue rare, code, accents) en consomme davantage.
- Marqueur de fin de mot
- Symbole spécial collé au dernier caractère de chaque mot avant l'apprentissage du BPE (« » chez Sennrich, affiché « · » ici). Il distingue « es » au milieu d'un mot de « es » final et permet de recoller le texte sans stocker les espaces. SentencePiece fait l'inverse avec un marqueur de début de mot « ▁ ».
- WordPiece / SentencePiece
- Deux cousins du BPE. WordPiece (BERT) choisit la fusion qui augmente le plus la vraisemblance du corpus plutôt que la plus fréquente, et préfixe les sous-mots internes par « ## ». SentencePiece (T5, Llama) traite le texte brut, espaces compris, comme une suite de symboles : il n'a pas besoin de pré-découper en mots, ce qui convient aux langues sans espaces.
- Coût en tokens
- Ce que consomme un texte, mesuré en tokens : c'est l'unité de facturation des API de LLM et ce qui remplit la fenêtre de contexte. Le ratio caractères par token (≈ 4 en anglais, moins en français ou en code) dit combien un texte coûte pour une même longueur : un tokenizer appris surtout sur l'anglais rend les autres langues plus chères.
Autres canaux du thème LLM et transformers
- #tokenisation — Tokenisation et BPE : comment un LLM découpe le texte.
- #attention — Self-attention : chaque mot regarde les autres.
- #transformer-bloc — Le bloc transformer : attention, résidus, normalisation, FFN.
- #generation-temperature — Génération : température, top-k et top-p.
- #rag — RAG : répondre en s'appuyant sur ses documents.
- #alignement-rlhf — Alignement et RLHF : apprendre ce que les humains préfèrent.