Un modello che traduce, uno che riassume, uno che risponde in chat: sembrano tre mestieri diversi e invece sotto il cofano trovano spesso la stessa coppia di ingranaggi. Un encoder che legge e un decoder che scrive.
La distinzione nasce nel 2017 con il Transformer originale, quello di “Attention is all you need”, costruito esattamente come una macchina a due metà: sei blocchi di encoder da una parte, sei blocchi di decoder dall’altra. Da allora le cose si sono complicate, perché molti modelli usano solo una delle due metà. Capire quale metà stai guardando ti dice molto su cosa quel modello sa fare.
Qui provo a spiegarlo senza giri di parole. Prima i due pezzi separati, poi come lavorano insieme, poi perché oggi quasi tutti i modelli di chat hanno buttato via l’encoder.
Di cosa parleremo..
L’encoder: quello che legge e capisce
Un encoder prende una sequenza di token e la trasforma in una sequenza di vettori. Tanti numeri, uno per token, nessuna parola.
Il punto è che quei vettori non sono la semplice traduzione del token in coordinate. Ogni livello di attenzione mescola le informazioni tra i token vicini e lontani, quindi il vettore finale di una parola contiene anche il contesto in cui quella parola è finita.
Un esempio che rende l’idea. Nella frase “la banca ha chiuso il conto” e nella frase “mi sono seduto sulla banca al parco”, la parola banca esce dall’encoder con due vettori molto diversi. Istituto di credito da una parte, panchina dall’altra. Nessun dizionario lo sapeva prima, lo ha deciso il contesto.
Altra caratteristica: l’encoder è bidirezionale. Quando legge la terza parola può guardare anche la settima, la decima e l’ultima. Non ha un “futuro” da nascondere perché non deve produrre nulla in avanti, deve solo rappresentare bene quello che ha davanti.
Tip: se l’output di un modello ha la stessa lunghezza dell’input, o è ancora più piccolo e astratto, probabilmente stai guardando un encoder. Non produce testo, produce rappresentazioni.
Il decoder: quello che scrive un pezzo alla volta
Il decoder fa il mestiere opposto. Riceve qualcosa, di solito poco e genera una sequenza di token uno dopo l’altro, decidendo ogni volta quale token ha più probabilità di venire dopo.
Per farlo bene deve essere unidirezionale. Mentre scrive la parola numero cinque non può sbirciare la numero sei, altrimenti il compito sarebbe banale e non imparerebbe niente. Questo si ottiene con una maschera che azzera l’attenzione verso tutte le posizioni future, la cosiddetta causal mask.
Il ciclo è sempre lo stesso. Il modello produce una distribuzione di probabilità su tutto il vocabolario, tu (o una regola di campionamento) scegli un token, quel token viene aggiunto alla sequenza e si riparte. Fino al token di fine, o fino a quando qualcuno stacca la spina.
Se vuoi vedere come si scelgono i token, ho scritto un pezzo apposta sul legame tra query, key e value in Query, Key e Value: come un modello decide cosa guardare.
La differenza in quattro righe
- Input: l’encoder legge una sequenza, il decoder genera una sequenza.
- Direzione: l’encoder guarda in entrambi i sensi, il decoder solo indietro.
- Output: vettori nel primo caso, token nel secondo.
- Obiettivo: capire da una parte, produrre dall’altra.
Detta così sembra elementare. In realtà è proprio questa divisione del lavoro a rendere possibile la traduzione automatica, la trascrizione audio e la generazione di codice, tutte cose in cui l’input e l’output non hanno niente in comune.
Tre famiglie di modelli, non due
Quando si parla di encoder e decoder viene naturale immaginarli sempre insieme. In realtà l’architettura si è spaccata in tre rami. Sapere in quale ti trovi evita parecchia confusione.
Solo encoder
Sono i modelli tipo BERT. Leggono il testo e restituiscono vettori. Servono per classificare, per capire se due frasi dicono la stessa cosa, per cercare documenti simili, per alimentare un motore di ricerca semantica.
Un modello solo encoder non sa scrivere. Gli puoi chiedere un embedding, non una poesia. È specializzato nel capire e lo fa molto bene.
Solo decoder
Sono i modelli tipo GPT, Llama, DeepSeek, Claude. In apparenza gli manca l’encoder, in realtà l’hanno assorbito: il prompt stesso viene processato dai loro blocchi e nei primi passaggi si comporta esattamente come un encoder. Poi si passa alla generazione.
Qui l’unico compito durante l’addestramento è prevedere il token successivo. Sembra limitato, in realtà costringe il modello a costruirsi un modello del linguaggio, del ragionamento e anche di un po’ di mondo. Se vuoi il quadro completo, ho spiegato l’architettura in Cosa sono i Transformer e come funzionano.
Encoder e decoder insieme
Sono i modelli sequenza-a-sequenza: T5, BART, il Transformer originale, Whisper per l’audio. Un encoder legge tutto l’input, un decoder produce l’output attingendo a quella rappresentazione.
Funzionano meglio quando i due lati sono davvero due mondi diversi: italiano verso inglese, audio verso testo, testo lungo verso riassunto. Ed è qui che entra in scena il pezzo più interessante, la cross-attention.
Come lavorano insieme, passo per passo
Prendiamo una traduzione dall’italiano all’inglese. “Il gatto dorme sul divano.” Diventa “The cat sleeps on the sofa.”
Primo passo. Il testo italiano viene spezzato in token e trasformato in vettori. L’encoder li elabora tutti insieme, in parallelo e restituisce una rappresentazione completa della frase. Ha già capito che il gatto è il soggetto e che il divano è il complemento.
Secondo passo. Il decoder parte con un token di avvio e genera “The”. Lo fa guardando solo sé stesso, quindi con la self-attention mascherata.
Terzo passo. Qui scatta il ponte. La cross-attention permette al decoder di interrogare l’output dell’encoder: le query arrivano dal decoder, le chiavi e i valori arrivano dall’encoder. In pratica il decoder chiede “a quali parole italiane devo guardare adesso?” e ottiene una risposta pesata.
Quarto passo. Il ciclo si ripete, un token alla volta, fino a “sofa.” e al token di fine. Ogni nuovo token può consultare tutta la frase originale, senza doverla ricostruire a memoria.
Questa divisione spiega anche un dettaglio pratico: l’encoder elabora l’input una volta sola, il decoder lavora in modo iterativo. Per questo nei modelli solo decoder si parla tanto di cache, come racconto in KV cache: come un modello ricorda i token che ha già letto.
Tip: la cross-attention è l’unico punto in cui encoder e decoder si parlano. Togli quello e restano due reti scollegate che non si capiscono.

Perché oggi quasi tutti usano solo il decoder
Se l’architettura a due metà è più elegante, perché ChatGPT e compagnia l’hanno abbandonata? Per tre motivi concreti.
Il primo è la semplicità di addestramento. Un modello solo decoder impara da qualsiasi testo esistente, senza bisogno di coppie input-output allineate. Un traduttore ha bisogno di frasi parallele, un modello generativo no: gli basta internet.
Il secondo è la flessibilità. Lo stesso modello può tradurre, riassumere, scrivere codice, rispondere a domande. Basta cambiare il prompt. Con un encoder-decoder ogni compito richiede spesso una testa o un formato diverso.
Il terzo è storico. Quando i modelli solo decoder hanno iniziato a scalare bene, il vantaggio dell’encoder sul “capire” è diventato meno decisivo: a certe dimensioni il modello impara a rappresentare il contesto abbastanza bene anche procedendo in avanti. Le scaling laws hanno fatto il resto.
Il prezzo da pagare esiste. Su compiti rigidi e simmetrici, come la traduzione simultanea o la trascrizione audio, un encoder-decoder resta più efficiente. Non a caso Whisper, il modello di riconoscimento vocale di OpenAI, è fatto esattamente così.
Encoder e decoder fuori dal testo
La coppia non vive solo nel linguaggio. Appena cambi dominio la ritrovi con altri nomi.
Nella visione, un modello tipo ViT spezza l’immagine in riquadri e li tratta come token: quei riquadri passano da un encoder. CLIP affianca due encoder, uno per le immagini e uno per il testo: li addestra a mettere la foto di un cane e la frase “un cane” nello stesso punto dello spazio. Nessun decoder, solo due lettori che imparano la stessa lingua.
Nell’audio, Whisper usa un encoder sullo spettrogramma e un decoder che scrive la trascrizione. Nei modelli di diffusione trovi spesso un encoder di testo che condiziona la generazione e un decoder visivo che ricostruisce l’immagine. Le varianti sono tante ma la logica è sempre quella: qualcuno interpreta, qualcun altro produce.
Questo vale anche per i modelli multimodali, dove gli encoder specializzati (immagini, audio, video) convertono tutto in vettori che il decoder di testo può leggere. Il collo di bottiglia si sposta, la struttura resta.
Attenzione a non confonderli con l’autoencoder
Qui c’è una trappola di vocabolario. L’autoencoder è un’altra cosa: una rete addestrata a ricostruire il proprio input, con un collo di bottiglia stretto nel mezzo. L’encoder comprime, il decoder ricostruisce. L’obiettivo è che l’input e l’output siano identici.
Non c’è attenzione, non c’è generazione di contenuto nuovo. Serve per ridurre dimensionalità, per denoising, per comprimere dati. I due encoder hanno lo stesso nome e scopi completamente diversi.
Nel mondo dei modelli di diffusione i due concetti si incontrano: il VAE ha un encoder che porta l’immagine in uno spazio latente compatto e un decoder che la riporta alla risoluzione di partenza. Ma lì il decoder non inventa, ricostruisce.
Come riconoscerli in trenta secondi
Guarda il compito, non il nome del modello.
Se l’output è dello stesso tipo dell’input, solo più astratto, sei davanti a un encoder: un’etichetta, un punteggio, un vettore. Se l’output è una sequenza generata token per token, c’è un decoder. Se input e output sono lunghezze e formati diversi, molto probabilmente sono entrambi, con una cross-attention in mezzo.
Un ultimo indizio utile: chiediti se il modello può “sbagliare” inventando. Un encoder non inventa, al massimo sbaglia etichetta. Un decoder può produrre una frase plausibile e falsa, ed è esattamente il motivo per cui le allucinazioni sono un problema tipico dei modelli generativi.
Domande frequenti
Un encoder può generare testo?
Non da solo. Restituisce vettori, non token, quindi non ha un meccanismo per scegliere la parola successiva. Per ottenere testo bisogna aggiungere una testa di generazione o un decoder separato.
Perché ChatGPT non ha un encoder separato?
Perché un modello solo decoder tratta il prompt come i token già generati. Nei primi passaggi elabora tutto l’input in parallelo, quindi svolge di fatto il lavoro dell’encoder, poi continua a scrivere. È una semplificazione architetturale, non una mancanza di capacità.
Che cosa fa esattamente la cross-attention?
Prende le query dal decoder e le chiavi e i valori dall’encoder. Così ogni token generato decide su quali parti dell’input concentrarsi. È il canale di comunicazione tra le due metà del modello.
Un modello solo encoder è peggiore?
No, è specializzato. Per classificare, cercare o misurare somiglianze è spesso più efficiente e più preciso di un modello generativo molto più grande. Dipende dal compito, non dal prestigio dell’architettura.
Encoder e decoder sono due reti separate?
Nell’architettura originale sono due stack distinti che comunicano tramite la cross-attention. Nei modelli solo decoder esiste un solo stack e la distinzione tra le due fasi diventa temporale, non strutturale.
Devo saperlo per usare l’AI?
Per usarla no, per sceglierla sì. Sapere se un modello è costruito per capire o per generare ti aiuta a non chiedergli cose che non sa fare, per esempio una classificazione precisa a un modello che ragiona per probabilità sul token successivo.


