Des Mots aux Nombres
Un Traducteur à une Frontière
Un modèle de langue ne voit jamais de texte. Il voit des entiers. Un tokeniseur se trouve à un poste frontalier : les mots humains entrent, les ID entiers sortent. La génération inverse le flux : les ID entiers reviennent, un tokeniseur rend le texte.
Trois tâches :
1. Segmenter. Couper une chaîne en morceaux (tokens).
2. Mapper. Assigner à chaque morceau un ID entier unique d'un vocabulaire fixe.
3. Inverser. Reconstruire le texte à partir des ID au moment de la génération.
Pourquoi des morceaux, et pas des mots entiers
Un vocabulaire de mots entiers explose. L'anglais seul compte des centaines de milliers de formes. Pire, un modèle entraîné sur des mots entiers ne peut pas gérer une faute de frappe, un nouveau nom ou une phrase étrangère : tout mot inconnu est mappé vers un seul emplacement <UNK>.
La tokenisation en sous-mots corrige cela. Un vocabulaire de morceaux courants se compose en n'importe quel mot, y compris ceux jamais vus pendant l'entraînement. Deux stratégies dominent : BPE (byte pair encoding) & segmentation distributionnelle. ANDREA choisit une seconde stratégie.
Pourquoi les sous-mots
Où se produit une coupure de mot
Zellig Harris, 1955
Un linguiste nommé Zellig Harris a remarqué quelque chose. À l'intérieur d'un mot, le nombre de lettres distinctes qui suivent une séquence donnée de lettres varie fortement. Après un, on peut trouver des dizaines de lettres : a, b, c, d, e ... Après unbel, seul un petit ensemble suit : i (puis ievable).
Une pointe dans la variété des successeurs marque une limite probable de morphème. Après un (un préfixe), la variété augmente parce que de nombreuses racines peuvent suivre. À l'intérieur d'une racine comme believ, la variété reste faible parce que les lettres se prédisent les unes les autres. À une transition entre morphèmes, la variété augmente à nouveau.
Des pointes de variété aux segments
Exécutez ce détecteur sur un corpus d'entraînement. Chaque mot donne des preuves statistiques. Un tokenizer collecte des segments à haute fréquence qui réapparaissent aux frontières en forme de morphèmes : un, re, pre, believ, know, ing, able, ly, tion, ed.
Aucune étiquette. Aucun linguiste ne marque manuellement les morphèmes. Une statistique de co-occurrence des lettres fait le travail.
Harris vs BPE
| Propriété | Harris | BPE |
|---|---|---|
| Critère de frontière | Pic de variété des successeurs | Fréquence de paires |
| Forme linguistique | Aligné sur les morphèmes (préfixe, racine, suffixe) | Paires d'octets fréquentes |
Exemple : unbelievably | un + believ + abl + y | unb + eli + eva + bly |
| Généralisation | Forte (racine + affixe se recombinent) | Plus faible (les paires n'ont pas besoin d'être alignées) |
Les deux produisent des morceaux subordonnés. Les morceaux de Harris tendent à s'aligner sur ce qu'un linguiste appellerait un morphème : la plus petite unité de sens. Les morceaux BPE optimisent la compression : la paire d'octets la plus fréquente est fusionnée, indépendamment du sens.
Segmenter un mot
Trois Dalles de Vocabulaire
Anatomie d'un Vocabulaire ANDREA
La tokenisation Harris produit un vocabulaire avec trois dalles :
Dalle 1 : 256 octets de base. Chaque octet UTF-8 possible (0x00 à 0xFF) obtient son propre ID de token. Un filet de sécurité : tout caractère qu'un corpus contient, un tokenizer peut le représenter comme une séquence d'octets. Aucun <UNK> ne se déclenche jamais.
Dalle 2 : N segments de morphèmes. Pièces communes découvertes par analyse distributionnelle. ANDREA-12M entraîné N = 4096 ; ANDREA-120M entraîné N = 8192. Chaque segment compresse une chaîne multi-octets récurrente en un seul token.
Dalle 3 : 1 token BOS. Un marqueur spécial placé au début de chaque séquence d'entraînement. Permet à un modèle d'apprendre « cette position n'a pas de passé ». ANDREA-12M & ANDREA-120M réservent tous deux exactement un ID pour BOS.
Tailles du vocabulaire
| Modèle | Octets de base | Segments de morphèmes (N) | BOS | Taille du vocabulaire |
|---|---|---|---|---|
| ANDREA-12M | 256 | 4096 | 1 | 4353 |
| ANDREA-120M | 256 | 8192 | 1 | 8449 |
256 + N + 1 = taille du vocabulaire. Simple. Reproductible. Ouvert.
Pourquoi un Bloc d'Octets est Important
Un fallback par octet garantit la couverture. Si un modèle rencontre 日本語 & qu'un tokenizer n'a pas de morphèmes japonais, les octets UTF-8 individuels portent une séquence à travers. Un modèle s'entraîne sur des octets ; la qualité sur des scripts rares dépend de la capacité & de l'exposition, mais aucune entrée ne fait planter un tokenizer.
Calculer un Vocabulaire
Début de Séquence
Pourquoi une séquence a besoin d'un marqueur
Un transformateur à décodeur uniquement prédit un token suivant à partir du contexte précédent. La position 0 n'a pas de contexte précédent. Sans marqueur, la position 0 se trouve dans un trou logique : le modèle n'a rien à quoi prêter attention.
BOS comble un trou. Un token spécial unique (ID = 256 + N) est placé au début de chaque séquence pendant l'entraînement. Le modèle apprend :
- « Quand tu vois BOS, prédis un premier token probable de texte naturel. »
- « Quand tu vois BOS suivi d'un mot, ce mot est le début d'une séquence, pas une continuation. »
Un Token, De Multiples Utilisations
Le BOS apparaît dans :
- Pendant l'entraînement : préfixé à chaque chunk de texte fourni au modèle.
- Pendant l'inférence : préfixé à une invite pour que le modèle voie un signal familier de « nouveau départ ».
- Marquage de limites : dans certains pipelines, un séparateur entre des documents concaténés.
ANDREA réserve exactement un ID pour BOS. Pas d'EOS, pas de PAD, pas de tokens spéciaux au-delà de ce qu'un vocabulaire nécessite. La simplicité reste une valeur permacomputer : chaque token mérite sa place.
Activité 3 (suite)
L'Activité 3 (grow_a_language_model_tokenizer_diet) couvre ce qui se passe quand N est trop grand ou quand un corpus de tokenizer diverge d'un corpus d'entraînement. ANDREA-12M a gaspillé 63,6 % de son vocabulaire ; ANDREA-120M l'a corrigé. Lisez la suite.