Cos'è un token
Un token è l'unità minima di testo che un Large Language Model elabora. Non corrisponde necessariamente a una parola: può 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.
Punti chiave
- Il token è l'unità minima di testo elaborata da un LLM: può essere una parola, una sotto-parola o un singolo carattere.
- La tokenizzazione converte il testo grezzo in numeri interi; gli algoritmi più diffusi sono BPE, WordPiece e SentencePiece.
- La context window definisce quanti token (input + output) il modello può gestire in una singola richiesta.
- Le API fatturano per token: l'italiano consuma circa il 30% di token in più dell'inglese, con impatto diretto sui costi.
- Conoscere il conteggio dei token è una competenza pratica per ottimizzare prompt, prestazioni e budget.
Esempio di tokenizzazione
Frase: "L'intelligenza artificiale è straordinaria"
Token: ["L", "'", "intellig", "enza", " artificial", "e", " è", " straordin", "aria"]
Una frase di 5 parole produce 9 token. In italiano e nelle lingue con molte parole composte, il rapporto token/parola è tipicamente 1.5-2x.
La tokenizzazione è il processo che converte il testo grezzo in questa sequenza di token. È il primo passo di qualsiasi pipeline NLP basata su Transformer e influenza direttamente prestazioni, costi e limiti del modello. Comprenderne il funzionamento aiuta a capire perché due testi della stessa lunghezza in caratteri possono avere costi e tempi di elaborazione molto diversi.
Byte Pair Encoding (BPE)
Il BPE (Byte Pair Encoding) è l'algoritmo di tokenizzazione più usato nei LLM moderni, inclusi GPT-4, Claude e Llama. Il principio è elegante: si parte da un vocabolario di singoli caratteri (o byte) e si fondono iterativamente le coppie di simboli più 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 più frequente in un nuovo simbolo (es. "t" + "h" diventa "th").
- Si ripete finché il vocabolario raggiunge la dimensione desiderata (tipicamente 32K-100K token).
Il risultato è 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 può essere rappresentato). La variante byte-level BPE, usata da GPT-4 e Claude, lavora sui byte UTF-8 anziché sui caratteri: così nessun simbolo resta "fuori vocabolario" ed emoji, ideogrammi e caratteri rari vengono sempre rappresentati, seppur con più token.
WordPiece e SentencePiece
WordPiece, usato da BERT e modelli Google, è 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 è un framework che implementa sia BPE che un modello unigram. La sua caratteristica distintiva è 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. Il modello unigram, in particolare, parte da un vocabolario ampio e rimuove progressivamente i token meno utili, scegliendo la segmentazione più probabile per ogni testo: un approccio statisticamente più robusto rispetto alle semplici fusioni gerarchiche del BPE.
| 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) è il numero massimo di token che un modello può elaborare in una singola richiesta, includendo sia l'input (prompt) che l'output (risposta). È 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 più 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 più rilevanti invece di inserire tutto nel contesto. Inoltre, riempire la finestra fino al limite aumenta latenza e costi: in pratica conviene mantenere il contesto snello e ben strutturato, posizionando le informazioni più importanti all'inizio e alla fine del prompt.
Contare i token
Contare i token in anticipo è 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 è più 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 più 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 più piccoli per task semplici, implementa caching delle risposte per query ripetitive e sfrutta il batching delle richieste. Molti provider offrono anche il prompt caching, che abbatte il costo delle porzioni di prompt ripetute (come istruzioni di sistema o documenti di riferimento) fino al 90%: una leva preziosa per chatbot e applicazioni con contesti fissi e ricorrenti.
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 più token per la stessa quantità di informazione. Un prompt in italiano costa ~30% in più dello stesso contenuto in inglese.
- Codice e formattazione: spazi, indentazione e sintassi consumano token. Il codice minimizzato usa meno token ma è 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 più token di output rispetto al testo libero, aumentando i costi.
Comprendere la tokenizzazione non è un dettaglio tecnico: è 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.
Vuoi imparare ad applicarlo davvero?
Scopri i corsi e la formazione di Federico Boggia su AI, dati e digitale.