Was ein Tokenizer frisst, wird zu dem, was er weiß
Tokenizer-Diät: Eine Definition
Ein Harris-Tokenizer trainiert auf einer Korpusprobe. Er führt eine distributionelle Analyse über diese Probe durch, wählt N Segmente aus, die am stärksten wiederkehren, & schreibt sie in ein Vokabular. Nach dem Training werden diese N Segmente zu einem festen Alphabet, das ein Sprachmodell für alles verwendet: Training, Inferenz, jeden Input, jeden Output.
Tokenizer-Diät = eine Textprobe, auf der ein Tokenizer trainiert.
Trainingsdiät = ein Korpus, auf dem ein Sprachmodell trainiert wird.
Wenn sich zwei Diäten unterscheiden, lernt ein Tokenizer Segmente, die auf Text abgestimmt sind, den ein Modell nie sehen wird. Embedding-Kapazität (ein Slot pro Vokabel-Eintrag) wird für Segmente ausgegeben, die während des Trainings keine Belohnung einbringen.
ANDREA-12M's Fehler
ANDREA-12M hat seinen Harris-Tokenizer auf einem rohen Kopf von megachat-v8.txt trainiert. Dieser Kopf enthielt Code-Beispiele & Tool-Call-Daten. Der Trainingscurriculum jedoch schloss Code & Tool-Calls aus; ANDREA-12M sah nur konversationellen Text.
Ergebnis: Ein Tokenizer lernte Segmente aus Python-Keywords, JSON-Klammern, Shell-Flags. Ein Modell, das auf Wörterbucheinträgen & Dialog trainiert wurde. Nur 36,4 % der Segmente überschnitten sich mit einer curriculum-gewichteten Stichprobe. Die verbleibenden 63,6 % der Vokabularplätze wurden Segmenten zugewiesen, die das Modell zur Trainingszeit nie begegnen würde.
Warum das wichtig ist
Jeder Vokabulaireintrag verbraucht Embedding-Parameter: eine Zeile einer Embedding-Matrix mit der Form V × d_model (behandelt in Aktivität 4). Bei V = 4353 & d_model = 384 kostet jeder Vokabularplatz 384 Floats. 63,6 % Verschwendung verschwendet 63,6 % einer Embedding-Matrix an Daten, die das Modell nie sieht.
Nennen Sie eine Diet-Regel
Wie groß sollte N werden
Ein Vocab-Wissenschafts-Sweep
ANDREA-120M führte ein Vocab-Wissenschafts-Experiment durch: Trainiere Harris-Tokenizers bei verschiedenen N-Werten (angeforderte Segmente) auf demselben 1,25B-Zeichen-Feuerwehrschlauch-Corpus. Miss, wie viele Segmente ein Tokenizer tatsächlich findet. Plotte die Ergebnisse.
| Gewünschtes N | Gefundene Segmente | Status |
|---|---|---|
| 2.048 | 2.048 | Ungesättigt (Wachstumsraum) |
| 4.096 | 4.096 | Ungesättigt |
| 8.192 | 8.192 | Sättigungspunkt |
| 16.384 | 13.106 | Korpus erschöpft |
Was Sättigung bedeutet
Bei kleinem N hat ein Korpus viele wiederkehrende Muster; ein Tokenizer füllt jeden Slot, den er verlangt. Bei großem N gehen einem Tokenizer die statistisch bedeutsamen Grenzen aus. Ein Korpus mit 1,25 Milliarden Zeichen enthält etwa 13.106 unterschiedliche morphemenförmige Segmente oberhalb einer Frequenzschwelle. Bei 16.384 gefundene Segmente: 13.106; die restlichen 3.278 Slots werden aufgefüllt oder leer gelassen.
Sättigung: der Punkt, an dem gefordertes N = gefundenes N. Jenseits der Sättigung kann ein Tokenizer keine weiteren Segmente entdecken, ohne die Qualität zu verdünnen (Frequenzschwellen senken & Rauschen akzeptieren).
Sweet Spot bei 8192
ANDREA-120M wählte N = 8192. Eine Begründung:
- Unter 8192 (z. B. 4096): Vokabular erfasst gängige Morpheme unzureichend; Sequenzen zerfallen in mehr Token; Durchsatz sinkt.
- Bei 8192: Jeder Segment-Slot bildet ein reales, rekurrentes Muster in einem Korpus ab.
- Über 8192: Abnehmende Renditen; 13.106 < 16.384 bedeutet, dass Slots verschwendet werden.
Finales ANDREA-120M-Vokabular: 256 + 8192 + 1 = 8449 Tokens. Durchschnittliche Kompression: 5,91 UTF-8-Bytes pro Token, was bedeutet, dass jeder Token ~5,9 Bytes Rohtext ersetzt. Dieses Verhältnis bestimmt den effektiven Kontext eines Modells: Bei 1024 Tokens × 5,91 Bytes/Token liest ANDREA-120M ungefähr 6.050 Zeichen Kontext pro Forward-Pass.
Über oder unter Sättigung
Woher die 63,6 % kommen
Zählen verschwendeter Slots
Der Tokenizer von ANDREA-12M wurde auf rohem megachat-v8.txt trainiert (4096 Segmente angefordert, gefunden). Ein Team hat eine curriculum-gewichtete Teilmenge gesampelt: ein Korpus, gewichtet nach der Häufigkeit, mit der jede Quelle von einem Banditen gezogen wurde. Sie haben eine Harris-Analyse auf dieser gewichteten Stichprobe erneut durchgeführt & gefragt: Wie viele der ursprünglichen 4096 Segmente erscheinen noch?
Ergebnis: 36,4 % Überlappung. 1.491 von 4.096 Segmenten stimmten mit der Curriculum-Gewichtung überein. Die verbleibenden 2.605 Segmente stammten aus Quellen, die das Modell ausgeschlossen hat.
63,6 % der Vokabelplätze wurden für Bytes zugewiesen, die das Modell nie gesehen hat.
Einbettungskosten
Jeder Vokabeleintrag belegt eine Zeile einer Einbettungsmatrix mit der Form (V, d_model). Für ANDREA-12M:
- V = 4353 (256 + 4096 + 1)
- d_model = 384
- Einbettungsparameter = V × d_model = 4353 × 384 = 1.671.552 Parameter
63,6 % dieser Parameter wurden für das konversationelle Training nicht genutzt. 1.063.107 Parameter zugewiesen, 0 Belohnungssignal. ANDREA-12M überlebt, weil 256 Basisbytes immer jeden Charakter abdecken; aber Kapazität pro Parameter fiel stark ab.
Wie ANDREA-120M es behoben hat
Der Tokenizer von ANDREA-120M wurde auf einem vollständigen Datenstrom (1,25 Mrd. Zeichen, 21 Quellen) bei Sättigung N = 8192 trainiert. Ein Trainingskorpus = derselbe Datenstrom. Diät-Alignment: 100 %. Ergebnisüberschneidung auf chat-gewichteteter Stichprobe: 36,5 %. (Hinweis: 36,5 % ist Überschneidung, keine Abdeckung; Chat allein ist eine Teilmenge des vollständigen Datenstroms, daher verhält sich diese Zahl anders als die 36,4 % von 12M.)
Effektive Kompression: 5,91 UTF-8-Bytes pro Token. Embedding-Matrix von ANDREA-120M: 8449 × 768 = 6.488.832 Parameter. Jeder Parameter erhält ein Belohnungssignal, weil jedes Segment auf Text abbildet, auf dem das Modell tatsächlich trainiert wird.
Abdeckung vs. Überschneidung
Warum 5,91 Bytes pro Token wichtig sind
Ein Kompressionsverhältnis
Durchschnittliche UTF-8-Bytes pro Token misst, wie viel Rohtext jeder Vokabel-Eintrag komprimiert. ANDREA-120M liegt bei 5,91. Ein Modell mit kürzeren Stücken (3 Bytes/Token) liest weniger Kontext pro Forward-Pass; ein Modell mit längeren Stücken (8 Bytes/Token) liest mehr, trainiert aber langsamer (jedes Stück braucht mehr Stichproben, um gut zu lernen).
Effektiver Kontext
| Menge | Wert |
|---|---|
| Token-Kontextfenster | 1.024 Tokens |
| Durchschnittliche Bytes pro Token | 5,91 |
| Effektiver Zeichenkontext | 1024 × 5,91 ≈ 6.050 |
Etwa 6.000 UTF-8-Zeichen passen in einen Forward-Pass von ANDREA-120M. Eine Seite dichter englischer Prosa umfasst ~3.000–4.000 Zeichen; ANDREA liest etwa eineinhalb Seiten pro Pass.
Diät verbessert Kompression
Ein gut abgestimmter Tokenizer komprimiert besser. Wenn ein Tokenizer Segmente lernt, die im Trainingskorpus wiederkehren, passen mehr Text pro Token. Der schlecht abgestimmte Tokenizer von ANDREA-12M komprimierte bei Chat schlechter (mehr Bytes für Byte-Fallback-Fragmente, da Chat-Segmente im Vokabular seltener waren). Der diät-abgestimmte Tokenizer von ANDREA-120M behält ein chat-förmiges Stück auf einem schnellen Pfad und seltene Skripte auf einem Byte-Fallback.
Aktivität 4 wird fortgesetzt
Aktivität 4 (grow_a_language_model_embeddings) behandelt, was mit diesen 8449 Vokabuleinträgen passiert: Sie werden zu Zeilen einer Einbettungsmatrix mit der Form V × d_model, dann werden gelernte Positions-Einbettungen hinzugefügt, bevor sie in den ersten Transformer-Block fließen.