Cos'e un token
Un token e l'unita minima di testo che un Large Language Model elabora. Non corrisponde necessariamente a una parola: puo essere una parola intera, una sotto-parola, un singolo carattere o persino un byte. I LLM non "leggono" il testo come gli esseri umani — lo convertono in una sequenza di numeri interi (token ID), ciascuno mappato a un vocabolario predefinito.
Esempio di tokenizzazione
Frase: "L'intelligenza artificiale e straordinaria"
Token: ["L", "'", "intellig", "enza", " artificial", "e", " e", " straordin", "aria"]
Una frase di 5 parole produce 9 token. In italiano e nelle lingue con molte parole composte, il rapporto token/parola e tipicamente 1.5-2x.
La tokenizzazione e il processo che converte il testo grezzo in questa sequenza di token. E il primo passo di qualsiasi pipeline NLP basata su Transformer e influenza direttamente prestazioni, costi e limiti del modello.
Byte Pair Encoding (BPE)
Il BPE (Byte Pair Encoding) e l'algoritmo di tokenizzazione piu usato nei LLM moderni, inclusi GPT-4, Claude e Llama. Il principio e elegante: si parte da un vocabolario di singoli caratteri (o byte) e si fondono iterativamente le coppie di simboli piu frequenti nel corpus di training.
- Si parte dal vocabolario di base (es. tutti i byte ASCII + Unicode).
- Si conta la frequenza di ogni coppia adiacente nel corpus.
- Si fonde la coppia piu frequente in un nuovo simbolo (es. "t" + "h" diventa "th").
- Si ripete finche il vocabolario raggiunge la dimensione desiderata (tipicamente 32K-100K token).
Il risultato e che le parole comuni diventano singoli token ("the", "and", "che"), mentre le parole rare vengono suddivise in sotto-parti. Questo bilancia efficienza (sequenze corte per testi comuni) e copertura (qualsiasi testo puo essere rappresentato).
WordPiece e SentencePiece
WordPiece, usato da BERT e modelli Google, e simile a BPE ma usa una metrica probabilistica (likelihood) invece della frequenza grezza per scegliere le fusioni. I sotto-token non iniziali sono marcati con il prefisso "##" (es. "playing" diventa ["play", "##ing"]).
SentencePiece e un framework che implementa sia BPE che un modello unigram. La sua caratteristica distintiva e che opera direttamente sul testo grezzo senza pre-tokenizzazione basata su spazi, rendendolo ideale per lingue senza separatori espliciti (cinese, giapponese) e per un trattamento uniforme multilingue.
| Algoritmo | Usato da | Vocabolario tipico |
|---|---|---|
| BPE | GPT-4, Claude, Llama | 50K-100K |
| WordPiece | BERT, DistilBERT | 30K |
| SentencePiece (Unigram) | T5, mBART, XLNet | 32K-250K |
Context window
La context window (finestra di contesto) e il numero massimo di token che un modello puo elaborare in una singola richiesta, includendo sia l'input (prompt) che l'output (risposta). E il limite fisico della "memoria di lavoro" del modello.
Le dimensioni delle context window si sono espanse rapidamente:
- GPT-3 (2020): 4.096 token (~3.000 parole)
- GPT-4 (2023): 8K / 32K / 128K token
- Claude (2024-2026): fino a 200K token (~150.000 parole, un intero libro)
- Gemini 1.5: fino a 1M+ token
Nonostante finestre piu grandi, le prestazioni del modello tendono a degradare per informazioni posizionate nel "centro" di contesti molto lunghi (fenomeno "lost in the middle"). Per questo la RAG resta fondamentale: recupera solo i frammenti piu rilevanti invece di inserire tutto nel contesto.
Contare i token
Contare i token in anticipo e essenziale per gestire costi e limiti. Strumenti utili:
- tiktoken (Python, libreria OpenAI):
tiktoken.encoding_for_model("gpt-4")per il conteggio esatto dei token GPT. - Tokenizer di Hugging Face:
AutoTokenizer.from_pretrained("meta-llama/Llama-3")per modelli open source. - Tool online: platform.openai.com/tokenizer per test rapidi.
Regola empirica per l'italiano: 1 token corrisponde mediamente a 3-4 caratteri o circa 0.6 parole. Un testo di 1.000 parole produce circa 1.500-1.800 token. Per l'inglese il rapporto e piu favorevole: ~0.75 parole per token.
Token e costi API
Le API dei LLM fatturano per token elaborati, distinguendo tra input token (il prompt) e output token (la risposta generata). Gli output token costano tipicamente 3-5x in piu degli input:
| Modello | Input (per 1M token) | Output (per 1M token) |
|---|---|---|
| GPT-4o | $2.50 | $10.00 |
| Claude Sonnet | $3.00 | $15.00 |
| Llama 3 70B (hosting) | $0.50-1.00 | $0.50-1.00 |
Per ottimizzare i costi: riduci il prompt al minimo necessario, usa modelli piu piccoli per task semplici, implementa caching delle risposte per query ripetitive e sfrutta il batching delle richieste.
Implicazioni per il prompt engineering
La tokenizzazione ha conseguenze pratiche dirette sulla scrittura dei prompt e sull'interazione con i LLM:
- Lunghezza del contesto: il prompt di sistema + la conversazione + la risposta attesa devono rientrare nella context window. Un prompt di sistema lungo riduce lo spazio per conversazione e risposta.
- Parole rare e lingue non inglesi: richiedono piu token per la stessa quantita di informazione. Un prompt in italiano costa ~30% in piu dello stesso contenuto in inglese.
- Codice e formattazione: spazi, indentazione e sintassi consumano token. Il codice minimizzato usa meno token ma e meno leggibile per il modello.
- Numeri: i numeri vengono tokenizzati cifra per cifra o in gruppi irregolari, rendendo i LLM notoriamente deboli in aritmetica.
- Output strutturato: richiedere JSON o formati strutturati consuma piu token di output rispetto al testo libero, aumentando i costi.
Comprendere la tokenizzazione non e un dettaglio tecnico: e una competenza pratica che impatta direttamente costi, prestazioni e design delle applicazioni AI. Per approfondire come i token si trasformano in rappresentazioni semantiche, consulta Embedding e Vector Database.