Wat een Tokenizer Eet Wordt Wat Het Kent
Tokenizer Dieet: Een Definitie
Een Harris tokenizer traint op een corpusmonster. Het voert distributionele analyse uit over dat monster, kiest N segmenten die het sterkst terugkeren, & schrijft ze in een vocabulaire. Na training worden die N segmenten een vast alfabet dat een language model gebruikt voor alles: training, inferentie, elke input, elke output.
Tokenizer dieet = een monster van tekst waarop een tokenizer traint.
Trainingsdieet = een corpus waarop een taalmodel traint.
Wanneer twee diëten verschillen, leert een tokenizer segmenten die zijn afgestemd op tekst die een model nooit zal zien. Embedding-capaciteit (één slot per vocabulaire-item) wordt besteed aan segmenten die geen beloning opleveren tijdens de training.
ANDREA-12M's Fout
ANDREA-12M trainde zijn Harris-tokenizer op een rauwe kop van megachat-v8.txt. Die kop bevatte codevoorbeelden & tool-call-gegevens. Het trainingscurriculum sloot echter code & tool calls uit; ANDREA-12M zag alleen conversationele tekst.
Resultaat: een tokenizer leerde segmenten van Python-keywords, JSON-haakjes, shell-vlaggen. Een model getraind op woordenboekvermeldingen & dialoog. Slechts 36,4% van de segmenten overlapte met een curriculum-gewogen sample. De overige 63,6% van de vocabulaire-slots werd toegewezen aan segmenten die een model nooit zou tegenkomen tijdens de training.
Waarom Dat Belangrijk Is
Elke vocabulairevermelding verbruikt embedding-parameters: één rij van een embedding-matrix met vorm V × d_model (behandeld in activiteit 4). Bij V = 4353 & d_model = 384 kost elke vocabulaire-slot 384 floats. 63,6% verspillen betekent 63,6% van een embedding-matrix verspillen aan data die een model nooit ziet.
Stel een Dieetregel Op
Hoe Groot Moet N Worden
Een Vocab Wetenschap Sweep
ANDREA-120M voerde een vocab-wetenschapsexperiment uit: train Harris-tokenizers bij verschillende N-waarden (gevraagde segmenten) op hetzelfde 1.25B-karakter firehose-corpus. Meet hoeveel segmenten een tokenizer daadwerkelijk vindt. Plot de resultaten.
| Aangevraagd N | Gefounde segmenten | Status |
|---|---|---|
| 2.048 | 2.048 | Onverzadigd (ruimte om te groeien) |
| 4.096 | 4.096 | Onverzadigd |
| 8.192 | 8.192 | Verzadigingspunt |
| 16.384 | 13.106 | Corpus uitgeput |
Wat verzadiging betekent
Bij kleine N heeft een corpus veel terugkerende patronen; een tokenizer vult elke gevraagde sleuf. Bij grote N raakt een tokenizer op statistisch betekenisvolle grenzen uitgeput. Een corpus van 1,25 miljard tekens bevat ruwweg 13.106 verschillende morfeemvormige segmenten boven een frequentiedrempel. Vragen om 16.384 levert 13.106 op; de resterende 3.278 sleuven worden opgevuld of leeg gelaten.
Verzadiging: een punt waar gevraagde N = gevonden N. Voorbij verzadiging kan een tokenizer geen segmenten meer ontdekken zonder de kwaliteit te verdunnen (frequentiedrempels verlagen & ruis accepteren).
Sweet Spot bij 8192
ANDREA-120M koos N = 8192. Een redenering:
- Onder 8192 (bijv. 4096): vocabulaire ondervangt veelvoorkomende morfeem niet volledig; sequenties fragmenteren in meer tokens; doorvoer daalt.
- Bij 8192: elke segmentplaats mappt naar een echt, recurrent patroon in een corpus.
- Boven 8192: afnemende rendementen; 13.106 < 16.384 betekent dat plaatsen verspild raken.
Eindvocabulaire ANDREA-120M: 256 + 8192 + 1 = 8449 tokens. Gemiddelde compressie: 5,91 UTF-8 bytes per token, wat betekent dat elk token ~5,9 bytes ruwe tekst vervangt. Die ratio stelt de effectieve context van een model in: bij 1024 tokens × 5,91 bytes/token leest ANDREA-120M ruwweg 6.050 karakters context per forward pass.
Boven of Onder Saturatie
Waar de 63,6% vandaan komt
Het tellen van verspilde slots
De tokenizer van ANDREA-12M is getraind op ruwe megachat-v8.txt (4096 segmenten aangevraagd, gevonden). Een team nam een curriculum-gewogen subset: een corpus gewogen naar hoe vaak elke bron werd getrokken door een bandit. Ze voerden een Harris-analyse uit op die gewogen steekproef & vroegen: hoeveel van de oorspronkelijke 4096 segmenten verschijnen nog?
Resultaat: 36,4% overlap. 1.491 van de 4.096 segmenten kwamen overeen met curriculumweging. De resterende 2.605 segmenten kwamen van bronnen die het model uitsloot.
63,6% van de vocabulaire-slots is toegewezen aan bytes die een model nooit heeft gezien.
Embedding Kosten
Elke vocabulairevermelding bezet één rij van een embedding-matrix met vorm (V, d_model). Voor ANDREA-12M:
- V = 4353 (256 + 4096 + 1)
- d_model = 384
- Embedding parameters = V × d_model = 4353 × 384 = 1.671.552 parameters
63,6% van die parameters bleef ongebruikt voor conversationele training. 1.063.107 parameters toegewezen, 0 beloningssignaal. ANDREA-12M overleeft omdat 256 basiskarakters altijd elke letter dekken; maar capaciteit per parameter daalde scherp.
Hoe ANDREA-120M Het Oploste
De tokenizer van ANDREA-120M getraind op een volledige firehose (1,25B karakters, 21 bronnen) bij verzadiging N = 8192. Een trainingscorpus = dezelfde firehose. Dieetuitlijning: 100%. Resulterende overlap op chat-gewogen sample: 36,5%. (Opmerking: 36,5% is overlap, geen dekking; chat alleen is een subset van de volledige firehose, dus dit getal gedraagt zich anders dan de 36,4% van 12M.)
Effectieve compressie: 5,91 UTF-8 bytes per token. De embedding-matrix van ANDREA-120M: 8449 × 768 = 6.488.832 parameters. Elke parameter verdient een beloningssignaal omdat elk segment wordt gemapt op tekst waarop het model daadwerkelijk traint.
Dekking Tegenover Overlap
Waarom 5,91 Bytes Per Token Belangrijk Is
Een Compressieverhouding
Gemiddelde UTF-8 bytes per token meet hoeveel ruwe tekst elk vocabulaire-item comprimeert. ANDREA-120M gemiddeld 5,91. Een model met kortere stukken (3 bytes/token) leest minder context per forward pass; een model met langere stukken (8 bytes/token) leest meer maar traint langzamer (elk stuk heeft meer monsters nodig om goed te leren).
Effectieve Context
| Hoeveelheid | Waarde |
|---|---|
| Token context window | 1.024 tokens |
| Gemiddelde bytes per token | 5,91 |
| Effectieve karakter context | 1024 × 5,91 ≈ 6.050 |
Ongeveer 6.000 UTF-8-karakters passen in één forward pass van ANDREA-120M. Een pagina met dichte Engelse proza telt ~3.000-4.000 karakters; ANDREA leest ongeveer anderhalve pagina per pass.
Dieet Versterkt Compressie
Een goed afgestemde tokenizer comprimeert beter. Wanneer een tokenizer segmenten leert die terugkeren in een trainingcorpus, past meer tekst per token. De slecht afgestemde tokenizer van ANDREA-12M comprimeerde slechter op chat (meer bytes uitgegeven aan byte-fallback fragmenten omdat chatsegmenten spaarzamer waren in vocab). De dieet-afgestemde tokenizer van ANDREA-120M houdt een chat-vormig stuk op een snelle weg & zeldzame scripts op een byte fallback.
Activiteit 4 Gaat Door
Activiteit 4 (grow_a_language_model_embeddings) behandelt wat er gebeurt met die 8449 vocabulaire-items: ze worden rijen van een embeddingmatrix met vorm V × d_model, voeg dan geleerde positielocatie-embeddings toe voordat ze doorstromen naar het eerste transformerblok.