Ord till Nummer
En Översättare vid en Gräns
En språkmodell ser aldrig text. Den ser heltal. En tokenizer sitter vid en gränspassage: mänskliga ord strömmar in, heltal-ID:n strömmar ut. Generering vänder på flödet: heltal-ID:n kommer tillbaka, en tokenizer renderar text.
Tre jobb:
1. Segmentera. Dela upp en sträng i bitar (tokens).
2. Mappa. Tilldela varje bit ett unikt heltal-ID från ett fast ordförråd.
3. Återställ. Rekonstruera text från ID:n vid genereringstid.
Varför bitar, inte hela ord
Ett ordförråd med hela ord exploderar. Bara engelska har hundratusentals former. Värre, en modell tränad på hela ord kan inte hantera ett stavfel, ett nytt namn eller en fras på främmande språk: varje osett ord mappas till en enda <UNK>-plats.
Subword-tokenisering löser det. Ett ordförråd av vanliga bitar kan sättas ihop till vilket ord som helst, inklusive sådana som aldrig setts under träning. Två strategier dominerar: BPE (byte pair encoding) & distributionell segmentering. ANDREA väljer en andra strategi.
Varför Subword
Var bryts ett ord
Zellig Harris, 1955
En lingvist vid namn Zellig Harris märkte något. Inne i ett ord varierar antalet distinkta bokstäver som följer en given bokstavsekvens kraftigt. Efter un kan du hitta dussintals bokstäver: a, b, c, d, e ... Efter unbel följer bara en liten uppsättning: i (sedan ievable).
En topp i variationen av efterföljare markerar en trolig morfemgräns. Efter un (ett prefix) hoppar variationen eftersom många rötter kan följa. Inne i en rot som believ förblir variationen låg eftersom bokstäverna förutsäger varandra. Vid en övergång mellan morfem hoppar variationen igen.
Från variationstoppar till segment
Kör den detektorn över ett träningskorpus. Varje ord donerar statistisk evidens. En tokenizer samlar högfreventa segment som återkommer vid morfemformade gränser: un, re, pre, believ, know, ing, able, ly, tion, ed.
Inga etiketter. Ingen lingvist märker morfem för hand. En statistik över bokstavsmedförekomster gör jobbet.
Harris vs BPE
| Egenskap | Harris | BPE |
|---|---|---|
| Gränskriterium | Successor variety spike | Parfrekvens |
| Lingvistisk form | Morfemjusterad (prefix, rot, suffix) | Frekventa bytepar |
Exempel: unbelievably | un + believ + abl + y | unb + eli + eva + bly |
| Generalisering | Stark (rot + affix kombineras) | Svagare (par behöver inte justeras) |
Båda producerar subordbitar. Harris bitar tenderar att justeras med vad en lingvist skulle kalla ett morfem: den minsta meningsfulla enheten. BPE bitar optimerar komprimering: det mest frekventa byteparet slås samman, oavsett betydelse.
Segmentera ett ord
Tre Vocab-skivor
Anatomi hos en ANDREA-vokabulär
Harris-tokenisering producerar en vokabulär med tre skivor:
Platta 1: 256 basbytes. Varje möjlig UTF-8-byte (0x00 genom 0xFF) får sitt eget token-ID. Ett säkerhetsnät: vilken tecken en korpus än innehåller kan en tokenizer representera som en sekvens av bytes. Ingen <UNK> utlöses någonsin.
Platta 2: N morfemsegment. Vanliga bitar upptäckta genom distributionsanalys. ANDREA-12M tränad N = 4096; ANDREA-120M tränad N = 8192. Varje segment komprimerar en återkommande multi-byte-sträng till en enda token.
Platta 3: 1 BOS-token. Ett speciellt märke placerat i början av varje träningssekvens. Låter en modell lära sig 'denna position har inget förflutet'. ANDREA-12M & ANDREA-120M reserverar båda exakt ett ID för BOS.
Ordlistestorlekar
| Modell | Bas bytes | Morfemsegment (N) | BOS | Ordlista storlek |
|---|---|---|---|---|
| ANDREA-12M | 256 | 4096 | 1 | 4353 |
| ANDREA-120M | 256 | 8192 | 1 | 8449 |
256 + N + 1 = ordlista storlek. Enkelt. Återupprepbart. Öppet.
Varför en Byte Slab är viktig
En byte-fallback garanterar täckning. Om en modell stöter på 日本語 & en tokenizer har inga japanska morfem, bär individuella UTF-8-bytes en sekvens vidare. En modell tränas på bytes; kvalitet på sällsynta skrifter beror på kapacitet & exponering, men ingen inmatning kraschar någonsin en tokenizer.
Beräkna ett ordförråd
Början av sekvens
Varför en sekvens behöver en markör
En decoder-only transformer förutsäger nästa token från tidigare kontext. Position 0 har ingen tidigare kontext. Utan en markör hamnar position 0 i ett logiskt hål: en modell har ingenting att uppmärksamma.
BOS löser hålet. En enda speciell token (ID = 256 + N) placeras i början av varje sekvens under träning. En modell lär sig:
- 'När du ser BOS, förutsäg en trolig första token i naturlig text.'
- 'När du ser BOS följt av ett ord, är det ordet början på en sekvens, inte en fortsättning.'
Ett Token, Många Användningar
BOS dyker upp vid:
- Träningstid: föregås varje textstycke som matas in i en modell.
- Inferenstid: föregås en prompt så att modellen ser en bekant 'ny start'-signal.
- Gränsmarkering: i vissa pipelines, en separator mellan sammanfogade dokument.
ANDREA reserverar exakt en ID för BOS. Inget EOS, inget PAD, inga specialtokens utöver vad en vokabulär behöver. Enkelhet förblir ett permadatorvärde: varje token förtjänar sin plats.
Aktivitet 3 fortsätter
Aktivitet 3 (grow_a_language_model_tokenizer_diet) täcker vad som händer när N är för stor eller en tokenizer-korpus avviker från en träningskorpus. ANDREA-12M slösade 63,6 % av sin vokabulär; ANDREA-120M fixade det. Läs vidare.