Pubblicato il 19 settembre 2026
Cos'è e come funziona un LLM (Large Language Model): guida semplice
- intelligenza-artificiale
- llm
Nel primo articolo di questa serie ho spiegato dove si colloca un Large Language Model rispetto a intelligenza artificiale, machine learning e deep learning: è, in sostanza, una rete neurale profonda basata sull'architettura Transformer, addestrata su enormi quantità di testo per stimare quale sia la continuazione più probabile di una sequenza di parole. In questo articolo voglio aprire il cofano e guardare più da vicino gli ingranaggi: cosa succede davvero, passo dopo passo, tra il momento in cui scriviamo un prompt e il momento in cui compare una risposta sullo schermo.
Non servono formule matematiche per capirlo a un livello serio — ma serve un po' di pazienza, perché i pezzi sono diversi e si incastrano tra loro. Andiamo con ordine: prima come il testo viene "digerito" dal modello (tokenizzazione ed embedding), poi come viene elaborato (l'architettura Transformer e l'attenzione), poi come il modello viene addestrato in più fasi distinte, e infine cosa succede concretamente quando scriviamo un prompt e premiamo invio.
Prima di tutto: un computer non legge parole, legge numeri
Un modello linguistico è, alla base, una gigantesca funzione matematica. Le funzioni matematiche lavorano con numeri, non con lettere o parole. Quindi il primo problema da risolvere, prima ancora di parlare di "intelligenza", è puramente tecnico: come si trasforma un testo in qualcosa che un modello possa elaborare?
La tokenizzazione: spezzare il testo in pezzi
Il primo passo si chiama tokenizzazione: il testo in ingresso viene spezzato in unità più piccole chiamate token. Un token, spiega la stessa documentazione di OpenAI, può essere lungo quanto un singolo carattere o quanto una parola intera, a seconda della lingua e del contesto: spazi, punteggiatura e parti di parola contribuiscono tutti al conteggio dei token. In pratica, per l'inglese, una parola comune corrisponde spesso a un solo token, mentre parole rare o composte vengono spezzate in più pezzi (per esempio "tokenizzazione" potrebbe diventare "token" + "izzazione").
La tecnica più diffusa per decidere come spezzare il testo si chiama Byte Pair Encoding (BPE), adattata all'elaborazione del linguaggio naturale nel 2016 da un gruppo di ricercatori dell'Università di Edimburgo in un paper che ha fatto scuola: "Neural Machine Translation of Rare Words with Subword Units" (Sennrich, Haddow, Birch, ACL 2016). L'idea di fondo è elegante: invece di avere un vocabolario fisso di parole intere (che non potrebbe mai contenere tutte le parole possibili, comprese quelle inventate, i nomi propri, gli errori di battitura), si costruisce un vocabolario di "pezzi di parola" partendo dai singoli caratteri e unendo via via le coppie di simboli che compaiono più spesso insieme nel testo di addestramento. Il risultato è un vocabolario che può rappresentare qualunque parola, anche mai vista prima, scomponendola in sotto-unità già note. Questo stesso approccio, in varianti diverse, è alla base della tokenizzazione usata da GPT, BERT e dalla maggior parte dei modelli linguistici moderni.
Ogni token viene infine convertito in un numero (un identificativo che punta a una voce del vocabolario), e questa sequenza di numeri è ciò che entra effettivamente nel modello. Il vocabolario di token con cui lavora un modello non è infinito: è un insieme fisso, costruito una volta durante la preparazione del tokenizzatore, che tipicamente contiene decine di migliaia di voci diverse tra caratteri singoli, frammenti di parola e parole intere più comuni.
Usa l'encoding cl100k_base (OpenAI, libreria open source js-tiktoken). Il tokenizer di Claude non è pubblico allo stesso modo, ma il meccanismo di fondo — spezzare il testo in sotto-unità frequenti — è lo stesso descritto sopra.
Gli embedding: dai numeri al significato
Un semplice numero identificativo, però, non dice nulla sul significato di una parola: "gatto" e "cane" potrebbero avere ID 4021 e 88, numeri che non hanno alcuna relazione tra loro pur essendo concetti abbastanza vicini (entrambi animali domestici). Serve quindi un passaggio ulteriore: ogni token viene trasformato in un embedding, cioè un vettore — una lista di centinaia o migliaia di numeri decimali — che rappresenta quel token in uno spazio matematico multidimensionale.
La definizione che ne dà Google nel suo corso introduttivo di machine learning è precisa: un embedding è "una rappresentazione vettoriale di un dato nello spazio degli embedding", ottenuta proiettando dati ad alta dimensionalità in uno spazio a dimensionalità più bassa ma più denso di significato (Google, Machine Learning Crash Course — Embeddings). L'idea centrale è che, idealmente, "un embedding cattura parte della semantica dell'input posizionando input semanticamente simili vicini tra loro nello spazio degli embedding" (stessa fonte). In pratica, dopo l'addestramento, i vettori di parole con significati o usi simili ("gatto" e "cane", oppure "re" e "regina") finiscono per trovarsi vicini tra loro in questo spazio numerico, mentre parole senza relazione finiscono lontane. Questi vettori non sono scritti a mano da nessuno: emergono automaticamente durante l'addestramento, come conseguenza di come le parole vengono effettivamente usate nel testo.
Il cuore del sistema: l'architettura Transformer
A questo punto abbiamo una sequenza di vettori numerici che rappresenta il testo in ingresso. Il passo successivo è la parte più delicata concettualmente: come fa il modello a "capire" le relazioni tra le parole in una frase, incluse quelle lontane tra loro?
Prima del 2017, gli approcci dominanti elaboravano il testo parola per parola, in sequenza rigida, un po' come leggere una frase parlandola a voce alta senza poter tornare indietro facilmente. Questo rendeva difficile catturare relazioni tra parole distanti nella frase ed era anche lento da addestrare, perché ogni passo doveva aspettare il completamento del precedente.
Il cambiamento arriva con il paper "Attention Is All You Need", pubblicato nel 2017 da un gruppo di ricercatori di Google Brain (Vaswani et al., arXiv:1706.03762), che introduce l'architettura Transformer. L'elemento chiave è un meccanismo chiamato self-attention ("auto-attenzione"). Come lo descrive il blog di ricerca di Google che presentò il paper, l'auto-attenzione permette al modello di "aggregare informazioni da tutte le altre parole" della frase, generando per ciascuna parola una nuova rappresentazione informata dall'intero contesto, ripetendo questo passaggio più volte, in parallelo, per tutte le parole insieme (Google Research Blog, 2017).
Cosa significa in pratica, senza formule? Immaginate la frase: "La banca ha rifiutato il prestito perché non aveva abbastanza garanzie." Per capire a cosa si riferisce "non aveva", il modello deve collegare quella parte della frase a "la banca", non al "prestito" — anche se "prestito" è la parola immediatamente precedente. Il meccanismo di attenzione permette esattamente questo: per ogni parola, il modello calcola quanto ogni altra parola della frase sia "rilevante" per interpretarla correttamente, e usa quel punteggio di rilevanza per costruire una rappresentazione più informata. Questo calcolo di rilevanza reciproca viene fatto per tutte le coppie di parole contemporaneamente (da qui il nome "attenzione"), e viene ripetuto su più "strati" della rete, ciascuno dei quali raffina ulteriormente la rappresentazione.
Un vantaggio pratico, oltre a quello concettuale, è stato decisivo per la storia degli LLM: a differenza degli approcci sequenziali precedenti, il calcolo dell'attenzione su tutte le parole può essere eseguito in parallelo su hardware moderno (le GPU), invece che parola per parola in sequenza. Questo ha reso possibile addestrare modelli molto più grandi in tempi molto più brevi — è uno dei motivi diretti per cui, dal 2017 in poi, la dimensione dei modelli linguistici è cresciuta così rapidamente.
L'addestramento: non è un unico passaggio, ma più fasi
Un errore comune è immaginare che un LLM venga "addestrato" con un solo processo, in un colpo solo. In realtà l'addestramento dei modelli moderni si articola tipicamente in fasi distinte, ciascuna con uno scopo diverso.
Fase 1: il pre-training
Nella fase di pre-training (pre-addestramento), il modello viene esposto a quantità enormi di testo — pagine web, libri, codice, articoli — con un compito semplice da descrivere ma computazionalmente enorme da eseguire: prevedere quale sia il token successivo, dato tutto il testo che lo precede. Il rapporto tecnico di OpenAI su GPT-4 lo descrive in questi termini: "GPT-4 è un modello in stile Transformer pre-addestrato per prevedere il token successivo in un documento", usando sia dati pubblicamente disponibili sia dati concessi in licenza da fornitori terzi (OpenAI, GPT-4 Technical Report, 2023). Ripetendo questo compito miliardi di volte su testi diversissimi tra loro, il modello finisce per assorbire, come effetto collaterale, una quantità enorme di regolarità linguistiche, fattuali e persino di ragionamento implicite nel testo — non perché "capisca" quei fatti nel senso umano del termine, ma perché prevedere correttamente il token successivo richiede, statisticamente, di aver colto quelle regolarità.
Il pre-training è, di gran lunga, la fase più costosa in termini di dati e potenza di calcolo, ed è quella che determina la maggior parte delle capacità "grezze" del modello. Lo stesso rapporto tecnico di OpenAI nota un punto interessante: le capacità del modello derivano principalmente dal pre-training, mentre le fasi successive servono più a orientarne il comportamento che ad aumentarne le competenze di base.
Fase 2: il fine-tuning e l'allineamento
Un modello che sa solo prevedere "quale parola viene dopo" non sa, di default, comportarsi come un assistente utile: potrebbe continuare una domanda con altre domande simili (perché è quello che si trova più spesso nei testi di addestramento, ad esempio in una FAQ), invece di rispondere. Serve quindi una seconda fase, generalmente chiamata fine-tuning, in cui il modello viene ulteriormente addestrato su un insieme più piccolo e curato di esempi — spesso conversazioni scritte da persone che mostrano il comportamento desiderato — per insegnargli a seguire istruzioni e rispondere in modo pertinente.
Una tecnica diventata centrale in questa fase è il cosiddetto RLHF, Reinforcement Learning from Human Feedback (apprendimento per rinforzo da feedback umano). L'idea, descritta per la prima volta in modo sistematico su larga scala nel paper di OpenAI su InstructGPT (Ouyang et al., 2022, arXiv:2203.02155), funziona così: a persone in carne e ossa vengono mostrate diverse risposte generate dal modello alla stessa domanda, e viene chiesto loro di indicare quale preferiscono. Queste preferenze vengono usate per addestrare un secondo modello (un "modello di ricompensa") che impara a stimare quanto una risposta sarebbe piaciuta a un valutatore umano; il modello linguistico originale viene poi ulteriormente affinato per generare risposte che quel modello di ricompensa giudica migliori. Il rapporto tecnico di GPT-4 conferma che il modello "viene poi affinato usando l'apprendimento per rinforzo da feedback umano (RLHF) per allinearlo all'intento dell'utente" (OpenAI, GPT-4 Technical Report, 2023).
Un'alternativa e un'estensione a questo approccio, sviluppata da Anthropic, è la Constitutional AI: invece di affidarsi solo a valutatori umani per giudicare ogni singola risposta, il modello viene guidato da un insieme esplicito di principi (una "costituzione") e impara a criticare e rivedere le proprie risposte per renderle più aderenti a quei principi, con un intervento umano diretto molto più limitato (Bai et al., Constitutional AI: Harmlessness from AI Feedback, Anthropic, 2022). L'obiettivo dichiarato di questo lavoro era ottenere un assistente contemporaneamente più utile e più difficile da usare per scopi dannosi, riducendo la tensione tra questi due obiettivi che l'RLHF tradizionale, da solo, faticava a risolvere.
La finestra di contesto: la "memoria di lavoro" del modello
Prima di arrivare a cosa succede quando scriviamo un prompt, serve introdurre un concetto pratico e molto concreto: la context window, o finestra di contesto. La documentazione di Anthropic la definisce così: "la 'finestra di contesto' si riferisce a tutto il testo che un modello linguistico può considerare nel generare una risposta, inclusa la risposta stessa. È diversa dall'enorme corpus di dati su cui il modello è stato addestrato, e rappresenta invece una sorta di 'memoria di lavoro' per il modello" (Anthropic, Context windows).
È una distinzione fondamentale da tenere a mente: il pre-training costruisce, una volta per tutte, i "pesi" della rete neurale (i parametri interni del modello, il risultato di tutto l'addestramento); la finestra di contesto, invece, è lo spazio limitato — misurato in token — che il modello può "vedere" in una singola conversazione, che comprende il prompt del sistema, tutti i messaggi scambiati fino a quel momento, eventuali documenti allegati e la risposta che il modello sta generando. Un modello non "ricorda" le conversazioni precedenti una volta chiuse (a meno che non vengano esplicitamente reinserite nel contesto): ogni nuova richiesta parte, a meno di meccanismi aggiuntivi, senza memoria di ciò che è successo prima al di fuori della finestra corrente.
Un dettaglio interessante indicato dalla stessa documentazione: aumentare la dimensione della finestra di contesto non è automaticamente un vantaggio puro. Più token si accumulano, più tende a peggiorare l'accuratezza e la capacità di richiamo di informazioni specifiche, un fenomeno che Anthropic chiama "context rot" (letteralmente, "decadimento del contesto") (Anthropic, Context windows). Curare cosa si mette nel contesto, insomma, conta quanto avere più spazio disponibile.
Cosa succede davvero quando scriviamo un prompt
Arriviamo finalmente al momento pratico: scriviamo una domanda e premiamo invio. Ecco, in sequenza, cosa avviene dietro le quinte, mettendo insieme tutti i pezzi visti finora:
- Tokenizzazione. Il testo del prompt (più l'intera conversazione precedente ancora dentro la finestra di contesto) viene spezzato in token, secondo lo stesso schema di Byte Pair Encoding visto prima.
- Embedding. Ogni token viene convertito nel suo vettore numerico corrispondente.
- Elaborazione attraverso il Transformer. I vettori attraversano i vari strati della rete neurale, dove i meccanismi di auto-attenzione ricalcolano ripetutamente le rappresentazioni di ogni token tenendo conto del contesto di tutti gli altri.
- Calcolo delle probabilità. All'uscita dell'ultimo strato, il modello produce una distribuzione di probabilità su tutti i token possibili del suo vocabolario: in pratica, un punteggio per ciascun token candidato che rappresenta quanto sia plausibile come prossima parola, dato tutto ciò che precede. Per fare un esempio semplificato: dopo "Il gatto si è seduto sul...", il modello potrebbe assegnare una probabilità alta a "tappeto" o "divano", una probabilità più bassa ma non nulla a "tetto" o "muretto", e una probabilità quasi nulla a parole che non avrebbero senso in quel punto della frase, come un verbo coniugato in modo scorretto.
- Campionamento del token. Il sistema sceglie un token da questa distribuzione — non sempre il più probabile in assoluto: a seconda delle impostazioni (spesso chiamate "temperatura"), può essere scelto con un po' di casualità controllata tra le opzioni più probabili, invece che prendere sempre e solo quella in cima alla lista. Una temperatura più bassa rende le risposte più prevedibili e ripetitive, una più alta le rende più varie ma anche più rischiose in termini di coerenza.
- Ripetizione, un token alla volta. Il token appena generato viene aggiunto alla sequenza, e l'intero processo (tokenizzazione già fatta, embedding, passaggio attraverso il Transformer, calcolo delle probabilità, campionamento) si ripete da capo per generare il token successivo. Questo continua finché il modello non genera un token speciale di "fine risposta" o finché non si raggiunge un limite di lunghezza.
Il punto (6) è probabilmente il più controintuitivo per chi non lo ha mai visto spiegato: quando leggiamo una risposta di un LLM che appare "tutta insieme" (o quasi, se non guardiamo lo streaming testo per testo), in realtà è stata costruita letteralmente una parola — anzi, un pezzo di parola — alla volta, ciascuna condizionata su tutto ciò che è stato generato fino a quel momento, incluso il prompt originale. Questo processo si chiama inferenza, per distinguerlo dall'addestramento: durante l'inferenza i pesi della rete non cambiano più, il modello si limita a usare ciò che ha imparato per generare, un passo alla volta, la sequenza di output più plausibile.
Perché conta capire questo meccanismo
Sapere che un LLM genera testo token per token, basandosi su probabilità apprese durante l'addestramento e non su un accesso diretto a un database di fatti, non è un dettaglio per addetti ai lavori: è la chiave per capire sia i suoi punti di forza sia i suoi limiti più seri. È esattamente da questo meccanismo — un modello statistico che stima la continuazione più probabile, non un archivio di verità verificate — che nasce il fenomeno delle "allucinazioni", di cui parlo nel terzo e ultimo articolo di questa serie. Capire come funziona la macchina, in altre parole, è il primo passo per usarla bene.