Capitolo 02 · Tokenizzazione · 8 min

Dal testo ai token

Come il testo diventa numeri. BPE, sottoparole, e perché gli LLM faticano a contare le lettere.

Perche i token?

Un modello linguistico non puo manipolare direttamente il testo. Manipola numeri. Il primissimo passo, ogni volta che parli con un LLM, e trasformare il testo in una sequenza di numeri interi: i token IDs.

La tokenizzazione e il taglio che rende possibile questa conversione.

Perche non un token per parola?

A prima vista potremmo immaginare: una parola = un token. Semplice.

Ma non funziona:

  • La lingua contiene milioni di parole possibili (flessioni, neologismi, nomi propri, errori di battitura…). Avere un token per parola richiede un vocabolario gigantesco.
  • Il modello non puo fare nulla con una parola che non ha mai visto.
  • Alcune lingue (cinese, giapponese) non hanno nemmeno spazi tra le parole.

La soluzione adottata da quasi tutti gli LLM moderni: le sottoparole.

Tokenizzazione per sottoparole

Con un tokenizer a sottoparole:

  • Le parole frequenti diventano un solo token (the, e, sono)
  • Le parole rare vengono spezzate in pezzi piu piccoli (tokenizzazionetoken + izzazione)
  • I caratteri sconosciuti restano sempre decomponibili fino alla lettera

Il risultato: un vocabolario di dimensione ragionevole (tipicamente tra 30.000 e 200.000 token) che puo rappresentare qualsiasi testo.

L'algoritmo piu usato si chiama BPE (Byte Pair Encoding). Parte dai singoli caratteri e fonde iterativamente le coppie piu frequenti nel corpus di addestramento.

BPE in trenta secondi

Immagina un mini-corpus di tre parole: low, lower, lowest. Si comincia tokenizzando a livello di carattere:

l o w
l o w e r
l o w e s t

A ogni iterazione, si cerca la coppia di token adiacenti piu frequente. Qui l o compare tre volte: la fondiamo in lo:

lo w
lo w e r
lo w e s t

Ora lo w e la coppia piu frequente. La fondiamo:

low
low e r
low e s t

Si continua fino a raggiungere la dimensione di vocabolario desiderata. I pezzi che ricorrono spesso (low) diventano un solo token. Quelli rari (est) restano decomposti. E esattamente cio che fa BPE — su miliardi di parole invece di tre, e su byte invece che caratteri nei modelli moderni (byte-level BPE), il che garantisce che nessun input sia mai "sconosciuto".

Qualche cugino da conoscere: WordPiece (BERT), SentencePiece (T5, Llama), Unigram LM (mT5). Condividono la stessa idea — un vocabolario di sottoparole — con euristiche di fusione diverse.

Token speciali

Oltre alle sottoparole del testo, il tokenizer riserva alcuni token speciali che non compaiono mai naturalmente:

  • <|im_start|>, <|im_end|> (OpenAI), [INST]…[/INST] (Llama), <|user|> / <|assistant|> — delimitano i turni di una conversazione.
  • <|endoftext|> — fine del documento.
  • <|fim_prefix|>, <|fim_middle|> — per il fill-in-the-middle, usato nel completamento di codice.

E cio che permette di trasformare un dialogo "Utente ha detto X, Assistente risponde Y" in una sequenza lineare di token, utilizzabile dal modello. Quando invii un messaggio a ChatGPT, questi marcatori vengono aggiunti automaticamente prima della tokenizzazione.

Prova

Sulla destra appaiono le sottoparole: ogni token è un frammento riutilizzabile, non necessariamente una parola intera. Le parole frequenti stanno in un singolo token, quelle rare si scompongono in più pezzi.

Alcune cose da notare:

  • Le parole corte e frequenti vengono raramente tagliate.
  • Le parole lunghe o rare spesso finiscono in piu pezzi.
  • Lo spazio prima di una parola fa parte del token (per questo · hello e hello sono token diversi).
  • In italiano, il rapporto token/parola e spesso piu alto che in inglese (circa 1.3-1.7 contro 1.2-1.4), anche perche i modelli hanno visto piu inglese durante l'addestramento.

Conseguenze pratiche

Questa storia dei token ha molte implicazioni inattese:

  • Gli LLM contano male le lettere. "Quante R ci sono in strawberry?" — spesso rispondono 2 invece di 3, perche la parola arriva loro in pochi token, non come lettere separate.
  • I prezzi delle API si calcolano in token, non in parole. L'italiano puo quindi costare un po' di piu da elaborare rispetto all'inglese.
  • Le finestre di contesto (128k tokens, 200k tokens…) si misurano anch'esse in token. Un libro di 100.000 parole italiane puo rappresentare circa 140.000 token.

Per il modello, "tokenizzazione" e "tok·en·iz·za·zione" sono la stessa cosa. Vede solo i pezzi.

Il seguito

Ora che il tuo testo e diventato una sequenza di interi, quegli interi entrano nel modello. Primo passo all'interno: vengono trasformati in vettori, in uno spazio di centinaia di dimensioni dove il significato diventa una posizione geometrica.

Questo e il tema del capitolo successivo.

Aggiornato il

Dal testo ai token: la tokenization degli LLM · Step by Token