Parole a Numeri
Un Traduttore a un Confine
Un modello linguistico non vede mai testo. Vede interi. Un tokenizzatore si trova a un valico di frontiera: le parole umane entrano, gli ID interi escono. La generazione inverte il flusso: gli ID interi tornano, un tokenizzatore rende il testo.
Tre compiti:
1. Segmenta. Taglia una stringa in pezzi (token).
2. Mappa. Assegna a ogni pezzo un ID intero univoco da un vocabolario fisso.
3. Inverti. Ricostruisci il testo dagli ID al momento della generazione.
Perché pezzi, non parole intere
Un vocabolario di parole intere esplode. L'inglese da solo ha centinaia di migliaia di forme. Peggio ancora, un modello addestrato su parole intere non può gestire un errore di battitura, un nuovo nome o una frase straniera: qualsiasi parola non vista mappa in un singolo slot <UNK>.
La tokenizzazione subword risolve questo problema. Un vocabolario di pezzi comuni si compone in qualsiasi parola, incluse quelle mai viste durante l'addestramento. Due strategie dominano: BPE (byte pair encoding) & segmentazione distributiva. ANDREA sceglie una seconda strategia.
Perché Subword
Dove Si Spezza una Parola
Zellig Harris, 1955
Un linguista di nome Zellig Harris notò qualcosa. All'interno di una parola, il conteggio delle lettere distinte che seguono una data sequenza di lettere varia bruscamente. Dopo un si possono trovare decine di lettere: a, b, c, d, e ... Dopo unbel solo un piccolo insieme segue: i (poi ievable).
Un picco nella varietà dei successori segna un probabile confine di morfema. Dopo un (un prefisso), la varietà aumenta perché molte radici possono seguire. All'interno di una radice come believ, la varietà rimane bassa perché le lettere si prevedono a vicenda. A una transizione tra morfemi, la varietà aumenta di nuovo.
Dai Picchi di Varietà ai Segmenti
Esegui quel rilevatore su un corpus di addestramento. Ogni parola dona evidenza statistica. Un tokenizer raccoglie segmenti ad alta frequenza che ricorrono ai confini a forma di morfema: un, re, pre, believ, know, ing, able, ly, tion, ed.
Nessuna etichetta. Nessun linguista etichetta a mano i morfemi. Una statistica di co-occorrenza delle lettere fa il lavoro.
Harris vs BPE
| Proprietà | Harris | BPE |
|---|---|---|
| Criterio di confine | Picco di varietà dei successori | Frequenza di coppia |
| Forma linguistica | Allineata a morfema (prefisso, radice, suffisso) | Coppie di byte frequenti |
Esempio: unbelievably | un + believ + abl + y | unb + eli + eva + bly |
| Generalizzazione | Forte (radice + affisso si ricombinano) | Più debole (le coppie non devono allinearsi) |
Entrambi producono pezzi subword. I pezzi di Harris tendono ad allinearsi con ciò che un linguista chiamerebbe morfema: l'unità significativa più piccola. I pezzi BPE ottimizzano la compressione: la coppia di byte più frequente viene unita, indipendentemente dal significato.
Segmenta una Parola
Tre Strati del Vocabolario
Anatomia di un Vocabolario ANDREA
La tokenizzazione Harris produce un vocabolario con tre strati:
Livello 1: 256 byte base. Ogni possibile byte UTF-8 (0x00 attraverso 0xFF) ottiene il proprio ID di token. Una rete di sicurezza: qualsiasi carattere presente in un corpus, un tokenizer può rappresentarlo come una sequenza di byte. Nessun <UNK> si attiva mai.
Livello 2: N segmenti morfologici. Pezzi comuni scoperti tramite analisi distributiva. ANDREA-12M addestrato N = 4096; ANDREA-120M addestrato N = 8192. Ogni segmento comprime una stringa multi-byte ricorrente in un singolo token.
Livello 3: 1 token BOS. Un marcatore speciale posto all'inizio di ogni sequenza di addestramento. Permette a un modello di imparare 'questa posizione non ha passato'. ANDREA-12M & ANDREA-120M riservano esattamente un ID per BOS.
Dimensioni del Vocabolario
| Modello | Byte base | Segmenti morfemi (N) | BOS | Dimensione vocabolario |
|---|---|---|---|---|
| ANDREA-12M | 256 | 4096 | 1 | 4353 |
| ANDREA-120M | 256 | 8192 | 1 | 8449 |
256 + N + 1 = dimensione del vocabolario. Semplice. Riproducibile. Aperto.
Perché un Byte Slab è Importante
Un fallback a byte garantisce la copertura. Se un modello incontra 日本語 e un tokenizer non ha morfemi giapponesi, i singoli byte UTF-8 portano una sequenza attraverso. Un modello si allena sui byte; la qualità sugli script rari dipende dalla capacità e dall'esposizione, ma nessun input fa mai crashare un tokenizer.
Calcola un Vocabolario
Inizio della Sequenza
Perché una Sequenza Ha Bisogno di un Marcatori
Un transformer solo-decoder prevede il token successivo dal contesto precedente. La posizione 0 non ha contesto precedente. Senza un marcatore, la posizione 0 si trova in un buco logico: un modello non ha nulla a cui prestare attenzione.
BOS risolve un buco. Un singolo token speciale (ID = 256 + N) si trova all'inizio di ogni sequenza durante l'addestramento. Un modello impara:
- 'Quando vedi BOS, predici un probabile primo token di testo naturale.'
- 'Quando vedi BOS seguito da una parola, quella parola è l'inizio di una sequenza, non una continuazione.'
Un Token, Molti Usi
BOS appare in:
- Durante l'addestramento: preposto a ogni chunk di testo immesso nel modello.
- Durante l'inferenza: preposto a un prompt in modo che il modello veda un segnale familiare di 'nuovo inizio'.
- Marcatura dei confini: in alcuni pipeline, un separatore tra documenti concatenati.
ANDREA riserva esattamente un ID per BOS. Nessun EOS, nessun PAD, nessun token speciale oltre a ciò che serve a un vocabolario. La semplicità rimane un valore permacomputer: ogni token deve guadagnarsi il suo posto.
Attività 3 Continua
L'Attività 3 (grow_a_language_model_tokenizer_diet) copre cosa succede quando N è troppo grande o un corpus del tokenizer diverge da un corpus di addestramento. ANDREA-12M ha sprecato il 63.6% del suo vocabolario; ANDREA-120M l'ha corretto. Continua a leggere.