Tokenizzazione
I modelli non vedono lettere né parole: vedono token, frammenti di testo presi da un vocabolario fisso. Una parola comune è spesso un solo token; una rara viene spezzata in più pezzi.
Carico il vocabolario reale di GPT-4o (circa 1 MB)…
Ogni riquadro è un token e il numero sotto è il suo ID in un
vocabolario di circa 200.000 voci: è così che il testo diventa una sequenza di interi. Il puntino
· indica uno spazio: nei tokenizer moderni lo spazio si attacca all'inizio
della parola che segue. Questo è il tokenizer vero di GPT-4o (o200k), non una simulazione.
La «tassa sull'italiano»
Nell'esempio qui sopra «gatto» diventa gat + to,
mentre «transformer» resta un pezzo unico. Non è un caso: confrontiamo la stessa frase in italiano e in
inglese, passata allo stesso tokenizer. Scegli un esempio o scrivi tu le due versioni.
Perché l'italiano costa di più. Il vocabolario si costruisce con il Byte-Pair Encoding (BPE): si parte dai singoli byte e si uniscono, una dopo l'altra, le coppie più frequenti nei testi di addestramento. Se quei testi sono in gran parte inglesi, le parole inglesi diventano token interi e quelle italiane restano spezzate. Le conseguenze sono concrete: le API si pagano a token, quindi lo stesso lavoro in italiano costa di più; la finestra di contesto si riempie prima; la generazione richiede più passaggi.
Ogni famiglia di modelli ha il suo tokenizer, quindi i numeri cambiano tra GPT, Claude, Llama o Gemini, ma il fenomeno è lo stesso. I vocabolari più recenti, più grandi e più multilingue, riducono il divario: GPT-2 aveva circa 50.000 token, GPT-4o ne ha circa 200.000.
Perché spezzare le parole? Un vocabolario di parole intere dovrebbe essere infinito: nomi propri, errori di battitura, codice, parole mai viste. Con qualche centinaio di migliaia di frammenti, invece, si copre qualsiasi testo in qualsiasi lingua. E siccome si parte dai byte, nessun testo è mai «illeggibile»: al limite, una parola sconosciuta viene spezzata in singoli byte, come succede alle emoji.