Vad en Tokenizer Äter Blir Vad Den Vet
Tokenizer-Diet: En Definition
En Harris-tokenizer tränas på ett korpusprov. Den kör distributionsanalys över det provet, väljer N segment som återkommer starkast, & skriver in dem i en vokabulär. Efter träning blir de N segmenten ett fast alfabet som en språkmodell använder för allt: träning, inferens, varje inmatning, varje utmatning.
Tokenizer-diet = ett prov av text som en tokenizer tränas på.
Träningsdiet = ett korpus som en språkmodell tränas på.
När två dieter skiljer sig åt, lär en tokenizer segment som är anpassade för text som modellen aldrig kommer att se. Inbäddningskapacitet (en plats per vokabulärpost) spenderas på segment som inte ger någon belöning under träning.
ANDREA-12M's Mistake
ANDREA-12M tränade sin Harris-tokenizer på en rå kopia av megachat-v8.txt. Den kopian innehöll kodexempel & tool-call-data. Utbildningscurriculumet exkluderade dock kod & tool calls; ANDREA-12M såg endast konversationstext.
Resultat: en tokenizer lärde sig segment från Python-nyckelord, JSON-klamrar, shell-flaggor. En modell tränad på ordboksartiklar & dialog. Endast 36,4 % av segmenten överlappade ett curriculum-vägt urval. De återstående 63,6 % av vocab-platserna allokerades till segment som modellen aldrig skulle möta under träningstid.
Varför det är viktigt
Varje vocab-post förbrukar embedding-parametrar: en rad i en embedding-matris med formen V × d_model (täckt i aktivitet 4). Vid V = 4353 & d_model = 384 kostar varje vocab-plats 384 float-värden. Att slösa 63,6 % slösar 63,6 % av en embedding-matris på data som modellen aldrig ser.
Formulera en Diet-regel
Hur stor bör N bli
En Vocab-vetenskaplig Svepning
ANDREA-120M körde ett vocab-vetenskapligt experiment: träna Harris-tokenizers vid olika N-värden (begärda segment) på samma 1.25B-tecken firehose-korpus. Mät hur många segment en tokenizer faktiskt hittar. Plotta resultaten.
| Begärd N | Faktiska segment hittade | Status |
|---|---|---|
| 2,048 | 2,048 | Omättad (utrymme att växa) |
| 4,096 | 4,096 | Omättad |
| 8,192 | 8,192 | Mättnadspunkt |
| 16,384 | 13,106 | Korpus uttömd |
Vad mättnad betyder
Vid små N har ett korpus gott om återkommande mönster; en tokenizer fyller varje slot den frågar efter. Vid stora N tar en tokenizer slut på statistiskt meningsfulla gränser. Ett korpus på 1,25 miljarder tecken innehåller ungefär 13 106 distinkta morfemformade segment över en frekvensgräns. Att fråga efter 16 384 ger 13 106; de återstående 3 278 slotarna får paddas eller lämnas tomma.
Mättnad: en punkt där begärd N = funnen N. Bortom mättnad kan en tokenizer inte upptäcka fler segment utan att späda ut kvaliteten (sänka frekvensgränser & acceptera brus).
Söt punkt vid 8192
ANDREA-120M valde N = 8192. Ett resonemang:
- Nedan 8192 (t.ex. 4096): vokabulären underfångar vanliga morfem; sekvenser fragmenteras till fler token; genomströmningen sjunker.
- Vid 8192: varje segmentplats mappar till ett riktigt, återkommande mönster i ett korpus.
- Över 8192: avtagande avkastning; 13,106 < 16,384 betyder att platser slösas bort.
Slutlig ANDREA-120M-vokabulär: 256 + 8192 + 1 = 8449 tokens. Genomsnittlig komprimering: 5,91 UTF-8 byte per token, vilket betyder att varje token ersätter ~5,9 byte rå text. Det förhållandet bestämmer en models effektiva kontext: vid 1024 tokens × 5,91 byte/token läser ANDREA-120M ungefär 6 050 tecken kontext per forward pass.
Över eller under mättnad
Var 63,6% Kom Från
Räkna Slösade Platser
ANDREA-12M:s tokenizer tränad på rå megachat-v8.txt (4096 segment begärda, hittade). Ett team samlade ett läroplansvägt urval: ett korpus vägt efter hur ofta varje källa drogs av en bandit. De körde om en Harris-analys på det vägda urvalet & frågade: hur många av de ursprungliga 4096 segmenten dyker fortfarande upp?
Resultat: 36,4% överlapp. 1 491 av 4 096 segment matchade läroplansvikten. De återstående 2 605 segmenten kom från källor som modellen exkluderade.
63,6 % av vocab-slotsen allokerades till bytes som modellen aldrig sett.
Kostnad för inbäddning
Varje vocab-post upptar en rad i en inbäddningsmatris med formen (V, d_model). För ANDREA-12M:
- V = 4353 (256 + 4096 + 1)
- d_model = 384
- Inbäddningsparametrar = V × d_model = 4353 × 384 = 1 671 552 parametrar
63,6 % av dessa parametrar gick oanvända för konversationell träning. 1 063 107 parametrar allokerade, 0 belöningssignal. ANDREA-12M överlever eftersom 256 basbytes alltid täcker vilken tecken som helst; men kapacitet per parameter sjönk kraftigt.
Hur ANDREA-120M Fixade Det
ANDREA-120M:s tokenizer tränad på en full slang (1,25 miljarder tecken, 21 källor) vid mättnad N = 8192. Ett träningskorpus = samma slang. Dietjustering: 100 %. Resulterande överlappning på chat-viktat prov: 36,5 %. (Notera: 36,5 % är överlappning, inte täckning; chat ensam är en delmängd av full slang, så detta tal beter sig annorlunda än 12M:s 36,4 %.)
Effektiv komprimering: 5,91 UTF-8 bytes per token. ANDREA-120M:s inbäddningsmatris: 8449 × 768 = 6 488 832 parametrar. Varje parameter tjänar en belöningssignal eftersom varje segment kartlägger till text som modellen faktiskt tränas på.
Täckning Mot Överlappning
Varför 5,91 Bytes Per Token Är Viktigt
Ett Kompressionsförhållande
Genomsnittliga UTF-8-byte per token mäter hur mycket råtext varje vocab-inmatning komprimerar. ANDREA-120M genomsnittar 5,91. En modell med kortare bitar (3 byte/token) läser mindre kontext per forward pass; en modell med längre bitar (8 byte/token) läser mer men tränas långsammare (varje bit behöver fler prover för att läras väl).
Effektiv kontext
| Mängd | Värde |
|---|---|
| Token-kontextfönster | 1 024 tokens |
| Genomsnittliga byte per token | 5,91 |
| Effektiv teckenkontext | 1024 × 5,91 ≈ 6 050 |
Ungefär 6 000 UTF-8-tecken ryms i en ANDREA-120M forward pass. En sida med tät engelsk prosa är ~3 000–4 000 tecken; ANDREA läser ungefär en och en halv sida per pass.
Dieten stramar åt komprimeringen
En väljusterad tokenizer komprimerar bättre. När en tokenizer lär sig segment som återkommer i ett träningskorpus ryms mer text per token. ANDREA-12M:s dåligt justerade tokenizer komprimerade sämre på chatt (fler byte spenderades på byte-fallback-fragment eftersom chattsegment var glesare i vokabulären). ANDREA-120M:s diet-justerade tokenizer håller ett chattformat stycke på en snabb väg & sällsynta skrifter på byte-fallback.
Aktivitet 4 fortsätter
Aktivitet 4 (grow_a_language_model_embeddings) täcker vad som händer med de 8449 vocab-posterna: de blir rader i en embeddingmatris med formen V × d_model, lägger sedan till inlärda positionsembeddings innan de flödar in i det första transformerblocket.