MimìrCast: le novità sull’AI ogni giorno Ascolta il podcast ➔
Generazione autoregressiva: perché l'AI scrive una parola alla volta

Generazione autoregressiva: perché l’AI scrive una parola alla volta

Scrivi una domanda a ChatGPT, premi invio, e la risposta non arriva tutta insieme: arriva a pezzi. Una parola, poi un’altra, a volte mezza parola che si completa un attimo dopo. Se hai pensato che fosse un accorgimento grafico, un effetto macchina da scrivere per farlo sembrare vivo mentre il testo è già pronto dietro le quinte, sei in ottima compagnia, ed è una delle poche cose che quasi tutti immaginano al contrario. Il testo non esiste prima di comparire. Quei pezzi arrivano uno alla volta perché vengono prodotti uno alla volta, e ogni pezzo viene deciso solo dopo che il precedente è stato scritto.

Sembra un dettaglio da ingegneri. Non lo è: questo modo di scrivere ha un nome, generazione autoregressiva, ed è il mattone che spiega metà dei comportamenti che ti fanno alzare un sopracciglio. Perché a volte prosegue coerente con uno sbaglio invece di correggerlo. Perché un elenco continua oltre il necessario. Perché la stessa identica domanda, riproposta cinque minuti dopo, dà una risposta diversa.

In questo articolo scoprirai:

  • Perché ChatGPT scrive parola per parola invece di consegnare la frase finita
  • Cosa succede davvero: la generazione autoregressiva, un token alla volta
  • Il conto: dai punteggi grezzi alla parola scelta, e cosa cambia con la temperatura
  • Dove lo vedi all'opera: la frase che si incarta e il modello che non si corregge
  • Perché la stessa domanda dà risposte diverse, e perché a temperatura 0 è solo quasi ripetibile

Perché ChatGPT scrive parola per parola invece di consegnare la frase finita

C’è un modo semplice per verificarlo da soli: interrompi la risposta a metà. Quello che è già comparso resta lì, compiuto; quello che sarebbe venuto dopo non esiste da nessuna parte. Non hai bloccato la lettura di un testo, hai fermato una fabbrica.

La cosa si vede anche dall’altro lato. Chi lavora con le API sa che la risposta può arrivare in streaming, pezzo per pezzo, come nell’interfaccia, oppure tutta in blocco alla fine. Nel secondo caso l’attesa è più lunga e poi appare tutto insieme, ma il testo è stato prodotto esattamente allo stesso modo: un pezzo alla volta, solo senza mostrarti il lavoro in corso. Lo streaming non cambia il meccanismo, cambia solo quando te ne accorgi.

I pezzi, poi, non sono parole. Sono token: frammenti di testo che possono coincidere con una parola intera, con una sillaba, con un segno di punteggiatura. È il motivo per cui a volte vedi comparire «inter» e mezzo secondo dopo «essante». Quei frammenti nascono dal modo in cui il testo viene spezzato prima di entrare nel modello: l’introduzione ai large language model parte esattamente da lì.

Cosa succede davvero: la generazione autoregressiva, un token alla volta

La generazione autoregressiva è il meccanismo per cui un modello linguistico produce un token alla volta: a ogni passo legge tutto quello che c’è già, il tuo prompt più i token generati fino a quel momento, e calcola un punteggio per ogni singolo token del suo vocabolario, che nei modelli attuali conta da 50.000 a oltre 200.000 voci. Il punteggio esce dai calcoli di una rete neurale. Poi il modello ne sceglie uno, lo appende al testo e ricomincia da capo con l’ingresso allungato di un pezzo. Il token appena scritto diventa parte della condizione del passo successivo, e per questo non può essere ritirato: il modello non ha un tasto «cancella», può solo continuare da dov’è arrivato.

La generazione autoregressiva non pianifica la frase

Il punto che sfugge quasi sempre è il primo: non c’è nessuna pianificazione della frase. Il modello non decide «dirò questa cosa in tre punti» e poi la scrive. Decide un token, guarda cosa ha appena scritto, decide il prossimo. La coerenza che leggi non viene da un progetto: viene dal fatto che a ogni passo il modello rilegge integralmente il proprio passato, ed è il lavoro dell’attention, il modo in cui il modello guarda tutto quello che c’è già, e sceglie il seguito che regge meglio con quel passato lì.

È una differenza di natura, non di grado. Un correttore di bozze rilegge e cambia. Questo scrive in avanti e basta. Su come questo si inserisca nel funzionamento complessivo della macchina, la guida su come funziona un large language model tiene insieme i pezzi, e il pezzo sull’AI generativa spiega perché «generare» qui non è una metafora.

Il conto: dai punteggi grezzi alla parola scelta, e cosa cambia con la temperatura

I punteggi grezzi che il modello sputa fuori si chiamano logit e non sono probabilità: sono numeri qualsiasi, positivi o negativi. Per trasformarli in probabilità si applica una funzione che li rende tutti positivi e li fa sommare a 1 (il softmax): si eleva e a ciascun punteggio e si divide per la somma di tutti.

Prendiamo cinque candidati dopo «Il gatto è salito sul», con questi logit: tetto 4,0 · tavolo 3,2 · divano 2,5 · albero 2,0 · treno 0,5. I valori sono d’esempio, il calcolo è quello vero e lo puoi rifare con una calcolatrice. Gli esponenziali fanno 54,60 · 24,53 · 12,18 · 7,39 · 1,65, che sommano a 100,35. Dividendo: tetto 54,4% · tavolo 24,5% · divano 12,1% · albero 7,4% · treno 1,6%.

La temperatura entra prima del softmax: divide ogni logit per il suo valore. A temperatura 0,5 i logit diventano 8,0 · 6,4 · 5,0 · 4,0 · 1,0, e le probabilità si concentrano: tetto 78,7%, treno 0,07%. A temperatura 1,5 diventano 2,67 · 2,13 · 1,67 · 1,33 · 0,33 e la distribuzione si appiattisce: tetto scende a 43,2%, treno sale a 4,2%. Lo stesso candidato improbabile passa da 0,07% a 4,2%: sessanta volte più probabile, senza che il modello abbia cambiato una sola opinione.

Le stesse probabilità a temperatura 0,5, 1,0 e 1,5 Temperatura 0,5 tetto78,7% tavolo15,9% divano3,9% albero1,4% treno0,07% Temperatura 1,0 tetto54,4% tavolo24,5% divano12,1% albero7,4% treno1,6% Temperatura 1,5 tetto43,2% tavolo25,3% divano15,9% albero11,4% treno4,2% Stessi logit (4,0 · 3,2 · 2,5 · 2,0 · 0,5), tre temperature. Le barre sono in scala sulla probabilità dopo la normalizzazione.

Top-k e top-p: come si taglia la coda prima di estrarre a sorte

La temperatura riscala tutto ma non elimina nessuno: anche il candidato assurdo mantiene una probabilità piccolissima e ogni tanto esce. Per questo si taglia. Top-k tiene solo i k candidati più probabili: con k=2, nel nostro esempio a temperatura 1, restano tetto e tavolo, rinormalizzati a 69,0% e 31,0%. Top-p (o nucleus sampling) taglia invece per massa: con p=0,9 si sommano le probabilità in ordine decrescente finché non si copre il 90%, e qui bastano i primi tre, albero e treno, che insieme fanno il 9%, restano fuori. La documentazione di Anthropic descrive top-p esattamente così e consiglia di non toccare temperatura e top-p insieme; su Hugging Face Transformers i valori di partenza sono temperatura 1.0, top_k 50 e top_p 1.0 quando il modello non ne dichiara di suoi. Sono le stesse tre manopole che espone la documentazione dell’API Gemini fra i parametri di generazione: temperatura, topP, topK.

Dove lo vedi all’opera: la frase che si incarta e il modello che non si corregge

Adesso il meccanismo si può usare come lente. Tre comportamenti che sembrano tre difetti diversi sono lo stesso identico difetto.

La frase che si incarta. Il modello imbocca una subordinata che non si chiude bene. Un umano tornerebbe indietro e riscriverebbe l’attacco. Lui non può: quei token sono nell’ingresso del passo successivo, e l’unica mossa disponibile è trovare la continuazione meno peggiore. Il risultato è quella prosa che si contorce per arrivare in fondo a una frase nata storta.

Gli errori che la generazione autoregressiva non può ritirare

L’elenco che non finisce. Hai chiesto tre esempi, ne arrivano sette. Dopo due voci in elenco, il contesto è pieno di segnali che dicono «qui si fa un elenco», e il token che apre la voce successiva diventa il più probabile. È il caso limite dei loop di ripetizione: come spiega Sebastian Raschka, «ogni token generato diventa parte del contesto per la predizione successiva», e una volta che una frase si ripete il modello assegna probabilità ancora più alta al continuare quel motivo, un ciclo che si autoalimenta.

Il numero sbagliato all’inizio. Se al terzo rigo di un calcolo scrive 340 invece di 430, il resto del ragionamento è condizionato su 340. Non sta difendendo un errore: sta facendo la cosa che sa fare, cioè proseguire coerentemente da quello che c’è scritto. Ed è anche il motivo per cui una risposta lunga è più fragile di una corta: ogni token piazzato è un vincolo che tutti i successivi devono rispettare. E il vincolo si paga due volte: l’attention rilegge tutto il passato a ogni singolo passo, quindi più testo è già stato scritto, più costa scrivere il pezzo dopo.

Perché la stessa domanda dà risposte diverse, e perché a temperatura 0 è solo quasi ripetibile

Se a ogni passo c’è una distribuzione di probabilità e da quella si estrae, due esecuzioni identiche possono divergere: basta un token estratto diverso, e da lì in avanti tutto il testo è condizionato su un passato diverso. Non è un capriccio, non è memoria, non è umore: è campionamento. Nell’esempio sopra, a temperatura 1, tavolo ha una probabilità su quattro di uscire al posto di tetto, e cambia la frase intera.

La conseguenza operativa è che le probabilità in gioco sono spesso più basse di quanto si pensi. Nella documentazione di Hugging Face, l’esempio con GPT-2 e il prompt «Today is» mostra il token vincente in decodifica greedy, quella che prende sempre il massimo, con una probabilità del 24,33%. Il candidato più probabile aveva meno di un quarto della massa: gli altri tre quarti erano altre frasi possibili.

Temperatura 0: generazione autoregressiva quasi ripetibile, non identica

Portare la temperatura a 0 significa prendere sempre il massimo e togliere il caso. Eppure Anthropic scrive nero su bianco, nella documentazione dell’API Messages, che «anche con temperature di 0.0, i risultati non saranno pienamente deterministici». Il perché è stato misurato: Thinking Machines Lab ha eseguito 1.000 volte lo stesso prompt a temperatura 0 su Qwen3-235B, ottenendo 80 completamenti diversi, con la prima divergenza al 103° token, 992 continuavano con «Queens, New York», 8 con «New York City». La causa non è il campionamento ma l’aritmetica: certi kernel sulla GPU danno risultati leggermente diversi a seconda di quante richieste stanno viaggiando insieme in quel momento. Con kernel resi invarianti rispetto al batch, tutti e 1.000 i completamenti sono risultati identici.

Quando la generazione autoregressiva ammette una correzione

Quando questa spiegazione non vale. «Non può tornare indietro» è vero del meccanismo di generazione, non dei prodotti che ci si costruiscono sopra. Nulla vieta di far rileggere a un modello ciò che ha appena scritto in un secondo passaggio e di fargli produrre una versione corretta: è esattamente ciò che fanno i modelli di ragionamento quando pensano prima di rispondere, e ciò che fanno gli agenti AI quando eseguono, verificano e ritentano. Ma la correzione è una nuova generazione che parte dal testo vecchio, non una modifica di quel testo: anche il ripensamento viene scritto un token alla volta, in avanti, senza tasto «indietro».

Scegliere una parola alla volta è l’ultimo passaggio di un percorso che comincia molto prima. Come funziona davvero un modello di AI lo ripercorre dall’inizio, da quando la tua frase viene spezzata in pezzi.

Fonti:

Domande frequenti

Cos'è la generazione autoregressiva?

È il meccanismo con cui un modello linguistico produce testo un token alla volta. A ogni passo legge tutto quello che c'è già, il prompt più i token generati fino a quel momento, calcola un punteggio per ogni token del suo vocabolario, ne scegle uno e ricomincia con l'ingresso allungato. Il token appena scritto diventa parte della condizione del passo successivo.

Perché un modello AI non può correggere quello che ha già scritto?

Perché ogni token generato entra nell'ingresso del passo successivo e non c'è un'operazione di cancellazione: l'unica mossa disponibile è continuare da dove si è arrivati. Un modello di ragionamento o un agente possono produrre una versione corretta, ma è una nuova generazione che parte dal testo vecchio, non una modifica di quel testo.

Cosa fa esattamente la temperatura?

Divide i punteggi grezzi (i logit) prima che vengano trasformati in probabilità. Sotto 1 concentra la probabilità sui candidati più forti, sopra 1 appiattisce la distribuzione e dà più spazio ai candidati improbabili. Nell'esempio dell'articolo, lo stesso candidato passa dallo 0,07% a temperatura 0,5 al 4,2% a temperatura 1,5.

Perché la stessa domanda dà risposte diverse anche a temperatura 0?

A temperatura 0 il campionamento casuale sparisce, ma resta la variabilità dell'aritmetica sulla GPU: certi kernel danno risultati leggermente diversi a seconda di quante richieste vengono elaborate insieme. Thinking Machines Lab ha misurato 80 completamenti diversi su 1.000 esecuzioni identiche a temperatura 0, e con kernel invarianti rispetto al batch tutti i 1.000 sono risultati identici.

Tabella dei contenuti
Articoli correlati:
Vuoi che l'AI diventi il tuo motore di valore più potente?

Ti accompagniamo noi con Mimír AI Agent.