Woorden naar Getallen
Een Vertaler aan een Grens
Een taalmodel ziet nooit tekst. Het ziet gehele getallen. Een tokenizeerder zit aan een grensovergang: menselijke woorden stromen naar binnen, integer-ID's stromen naar buiten. Generatie keert de stroom om: integer-ID's komen terug, een tokenizeerder rendert tekst.
Drie taken:
1. Segmenteren. Knip een string in stukken (tokens).
2. Mappen. Wijs elk stuk een uniek integer ID toe uit een vaste woordenschat.
3. Omkeren. Herbouw tekst vanuit IDs op het moment van generatie.
Waarom Stukken, Niet Hele Woorden
Een woordenschat van hele woorden explodeert. Alleen al het Engels heeft honderdduizenden vormen. Erger nog, een model getraind op hele woorden kan geen typfout, nieuwe naam of buitenlandse frase aan: elk onzien woord wordt gemapt naar een enkel <UNK>-slot.
Subword-tokenisatie lost dat op. Een vocabulaire van veelvoorkomende stukken kan elk woord samenstellen, inclusief woorden die nooit tijdens de training zijn gezien. Twee strategieën domineren: BPE (byte pair encoding) & distributionele segmentatie. ANDREA kiest een tweede strategie.
Waarom Subword
Waar Breekt een Woord
Zellig Harris, 1955
Een taalkundige genaamd Zellig Harris merkte iets op. Binnen een woord varieert het aantal verschillende letters die op een gegeven letterreeks volgen sterk. Na un kun je tientallen letters vinden: a, b, c, d, e ... Na unbel volgt slechts een klein aantal: i (dan ievable).
Een piek in de verscheidenheid van opvolgers markeert een waarschijnlijke morfeemgrens. Na un (een voorvoegsel) springt de verscheidenheid omhoog omdat veel wortels kunnen volgen. Binnen een wortel zoals believ blijft de verscheidenheid laag omdat letters elkaar voorspellen. Bij een overgang tussen morfeem, springt de verscheidenheid weer omhoog.
Van Verscheidenheidspieken naar Segmenten
Voer die detector uit over een trainingscorpus. Elk woord doneert statistisch bewijs. Een tokenizer verzamelt hoogfrequente segmenten die terugkeren op morpheem-gevormde grenzen: un, re, pre, believ, know, ing, able, ly, tion, ed.
Geen labels. Geen linguïst tagt morphemes handmatig. Een statistiek van letterco-occurrantie doet het werk.
Harris vs BPE
| Eigenschap | Harris | BPE |
|---|---|---|
| Grenscriterium | Successor variety spike | Paarfrequentie |
| Taalkundige vorm | Morfeem-uitgelijnd (voorvoegsel, wortel, achtervoegsel) | Veelvoorkomende byteparen |
Voorbeeld: unbelievably | un + believ + abl + y | unb + eli + eva + bly |
| Generalisatie | Sterk (wortel + affiks hercombineert) | Zwakker (paren hoeven niet uit te lijnen) |
Beide produceren subwoordstukken. Harris-stukken hebben de neiging om uit te lijnen met wat een taalkundige een morfeem zou noemen: de kleinste betekenisvolle eenheid. BPE-stukken optimaliseren compressie: het meest frequente bytepaar wordt samengevoegd, ongeacht de betekenis.
Segmenteer een Woord
Drie Vocab Slabs
Anatomie van een ANDREA Vocabulary
Harris-tokenization produceert een vocabulary met drie slabs:
Plak 1: 256 bas bytes. Elke mogelijke UTF-8 byte (0x00 tot en met 0xFF) krijgt zijn eigen token-ID. Een vangnet: elk teken dat een corpus bevat, kan een tokenizer weergeven als een reeks bytes. <UNK> wordt nooit geactiveerd.
Plak 2: N morfeemsegmenten. Veelvoorkomende stukken ontdekt door distributionele analyse. ANDREA-12M getraind N = 4096; ANDREA-120M getraind N = 8192. Elk segment comprimeert een terugkerende multi-byte string tot één token.
Plak 3: 1 BOS-token. Een speciaal merkteken geplaatst aan het begin van elke trainingssequentie. Laat een model leren 'deze positie heeft geen verleden'. ANDREA-12M & ANDREA-120M reserveren beide precies één ID voor BOS.
Woordenboekgroottes
| Model | Base bytes | Morpheme segments (N) | BOS | Vocab size |
|---|---|---|---|---|
| ANDREA-12M | 256 | 4096 | 1 | 4353 |
| ANDREA-120M | 256 | 8192 | 1 | 8449 |
256 + N + 1 = vocabulary size. Simpel. Reproduceerbaar. Open.
Waarom een Byte Slab Belangrijk is
Een byte-fallback garandeert dekking. Als een model 日本語 tegenkomt & een tokenizer geen Japanse morfen heeft, dragen individuele UTF-8-bytes een sequentie door. Een model traint op bytes; kwaliteit op zeldzame schriften hangt af van capaciteit & blootstelling, maar geen input crasht ooit een tokenizer.
Bereken een Vocabulair
Begin van Sequentie
Waarom een Sequens een Marker Nodig Heeft
Een decoder-only transformer voorspelt een volgend token vanuit voorafgaande context. Positie 0 heeft geen voorafgaande context. Zonder marker bevindt positie 0 zich in een logisch gat: een model heeft niets om op te letten.
BOS lost een gat op. Een enkel speciaal token (ID = 256 + N) staat aan het begin van elke sequens tijdens training. Een model leert:
- 'Wanneer je BOS ziet, voorspel een waarschijnlijke eerste token van natuurlijke tekst.'
- 'Wanneer je BOS gevolgd door een woord ziet, is dat woord een sequensbegin, geen voortzetting.'
Eén Token, Veel Gebruiken
BOS verschijnt op:
- Trainingsmoment: voor elk tekstblok gevoed aan een model voorgeplaatst.
- Inferentiemoment: voor een prompt voorgeplaatst zodat een model een vertrouwd 'fris start'-signaal ziet.
- Grenzmarkering: in sommige pipelines, een scheidingsteken tussen geconcateneerde documenten.
ANDREA reserveert precies één ID voor BOS. Geen EOS, geen PAD, geen speciale tokens bovenop wat een vocabulaire nodig heeft. Eenvoud blijft een permacomputerwaarde: elke token verdient zijn plek.
Activiteit 3 Gaat Door
Activiteit 3 (grow_a_language_model_tokenizer_diet) behandelt wat er gebeurt wanneer N te groot is of een tokenizer-corpus afwijkt van een training-corpus. ANDREA-12M verspilde 63,6% van zijn vocabulaire; ANDREA-120M loste het op. Lees verder.