Phase 07 - Lesson 08
T5, BART — Modelos Encoder-Decoder
This lesson includes a graded coding exercise that runs in your browser, unlocked with lifetime access.
Encoders entienden. Decoders generan. Júntelos nuevamente y obtendrá un modelo construido para tareas de entrada → salida: traducir, resumir, reescribir, transcribir.
Type: Learn Languages: Python Prerequisites: Phase 7 · 05 (Full Transformer), Phase 7 · 06 (BERT), Phase 7 · 07 (GPT) Time: ~45 minutes
El Problema
GPT (solo decoder) y BERT (solo encoder) simplificaron la arquitectura de 2017 para objetivos diferentes. Pero muchas tareas son naturalmente de entrada-salida:
- Traducción: Inglés → Francés.
- Resumen: artículo de 5,000 tokens → resumen de 200 tokens.
- Reconocimiento de voz: tokens de audio → tokens de texto.
- Extracción estructurada: prosa → JSON.
Para estas tareas, el encoder-decoder es el ajuste más limpio. El encoder produce una representación densa del origen. El decoder genera la salida, realizando atención cruzada (cross-attention) con esa representación en cada paso. El entrenamiento se realiza con un desplazamiento de una posición (shift-by-one) en el lado de la salida. La misma pérdida (loss) que GPT, solo que condicionada a la salida del encoder.
Dos artículos definieron el manual moderno:
- T5 (Raffel et al. 2019). "Text-to-Text Transfer Transformer." Cada tarea de PLN (Procesamiento del Lenguaje Natural) reformulada como texto de entrada, texto de salida. Arquitectura única, vocabulario único, pérdida única. Preentrenado en predicción de fragmentos enmascarados (span corruption - corromper fragmentos en la entrada y decodificarlos en la salida).
- BART (Lewis et al. 2019). "Bidirectional and Auto-Regressive Transformer." Autoencoder de eliminación de ruido (denoising autoencoder): corrompe la entrada de múltiples maneras (mezclar, enmascarar, eliminar, rotar) y pide al decoder reconstruir el original.
En 2026, el formato encoder-decoder sobrevive donde la estructura de la entrada es importante:
- Whisper (voz → texto).
- La pila de traducción de Google.
- Algunos modelos de completado/corrección de código que poseen estructuras distintas de contexto y edición.
- Flan-T5 y variantes para tareas de razonamiento estructurado.
Los modelos solo decoder ganaron protagonismo, pero los modelos encoder-decoder nunca desaparecieron.
El Concepto
El bucle de ejecución directa (forward loop)
source tokens ─▶ encoder ─▶ (N_src, d_model) ──┐
│
target tokens ─▶ decoder block │
├─▶ masked self-attention │
├─▶ cross-attention ◀───────────┘
└─▶ FFN
↓
next-token logits
Crucialmente, el encoder se ejecuta una vez por entrada. El decoder se ejecuta autoregresivamente, pero realiza atención cruzada (cross-attention) para la misma salida del encoder en cada paso. Almacenar en caché la salida del encoder es una mejora de velocidad gratuita para entradas largas.
Preentrenamiento de T5 — corrupción de fragmentos (span corruption)
Elija fragmentos aleatorios de la entrada (longitud promedio de 3 tokens, 15% del total). Reemplace cada fragmento con una centinela única: <extra_id_0>, <extra_id_1>, etc. El decoder genera solo los fragmentos corrompidos con su prefijo de centinela:
source: The quick <extra_id_0> fox jumps <extra_id_1> dog
target: <extra_id_0> brown <extra_id_1> over the lazy
Señal más barata que predecir la secuencia completa. Competitivo con MLM (BERT) y prefix-LM (UniLM) en la ablación del artículo de T5.
Preentrenamiento de BART — eliminación de ruido multirruido (multi-noise denoising)
BART prueba cinco funciones de ruido:
- Enmascaramiento de tokens (token masking).
- Eliminación de tokens (token deletion).
- Relleno de texto (text infilling - enmascara un fragmento, el decoder inserta la longitud correcta).
- Permutación de oraciones (sentence permutation).
- Rotación de documentos (document rotation).
La combinación de relleno de texto + permutación de oraciones produjo los mejores números downstream. El decoder siempre reconstruye el original. La salida de BART es la secuencia completa, no solo los fragmentos corrompidos — por lo tanto, el cómputo de preentrenamiento es mayor que en T5.
Inferencia
Misma generación autoregresiva que GPT. Se aplican muestreo codicioso (greedy), búsqueda de haz (beam search) o top-p. La búsqueda de haz (ancho 4-5) es el estándar para traducción y resumen porque la distribución de salida es más estrecha que en el chat.
Cuándo elegir cada variante in 2026
| Tarea | ¿Encoder-decoder? | Por qué |
|---|---|---|
| Traducción | Sí, por lo general | Secuencia de origen clara; distribución de salida fija; la búsqueda de haz funciona |
| Voz a texto | Sí (Whisper) | La modalidad de entrada difere de la salida; el encoder moldea las características de audio |
| Chat / razonamiento | No, solo decoder | Sin "entrada" persistente — la conversación es la secuencia |
| Completado de código | Por lo general no | Los modelos solo decoder con contexto largo ganan; los modelos de código como Qwen 2.5 Coder son solo decoder |
| Resumen | Cualquiera de los dos funciona | BART y PEGASUS superaron a las líneas de base anteriores de solo decoder; las LLM modernas de solo decoder se equiparan a ellos |
| Extracción estructurada | Cualquiera de los dos | T5 es limpio porque "texto → texto" absorbe cualquier formato de salida |
La tendencia desde ~2022: los modelos solo decoder asumen tareas que antes eran de modelos encoder-decoder porque (a) las LLM solo decoder ajustadas por instrucción generalizan para cualquier cosa mediante prompting, (b) una sola arquitectura escala más fácilmente que dos, (c) el RLHF asume un decoder. El encoder-decoder se mantiene donde la modalidad de entrada difiere (voz, imágenes) o donde la calidad de la búsqueda de haz es importante.
Constrúyalo
Consulte code/main.py. Implementamos la corrupción de fragmentos al estilo T5 para un corpus de juguete — la parte individual más útil de esta lección, ya que aparece en todas las recetas de preentrenamiento de encoder-decoder desde entonces.
Paso 1: corrupción de fragmentos (span corruption)
def corrupt_spans(tokens, mask_rate=0.15, mean_span=3.0, rng=None):
"""Pick spans summing to ~mask_rate of tokens. Return (corrupted_input, target)."""
n = len(tokens)
n_mask = max(1, int(n * mask_rate))
n_spans = max(1, int(round(n_mask / mean_span)))
...
El formato de destino es la convención de T5: <sent0> span0 <sent1> span1 .... La entrada corrompida intercala tokens no modificados con los tokens centinela en las ubicaciones de los fragmentos.
Paso 2: verificar la ida y vuelta (round-trip)
Dada la entrada corrompida y el objetivo, reconstrua la oración original. Si su corrupción es reversible, el paso directo está bien definido. Esta es una prueba de cordura — el entrenamiento real nunca hace esto, pero la prueba es barata y detecta errores de conteo de desplazamiento por uno (off-by-one) en el control de posición de los fragmentos.
Paso 3: adición de ruido de BART
Cinco funciones: token_mask, token_delete, text_infill, sentence_permute, document_rotate. Componga dos de ellas y muestre el resultado.
Úselo
Referencia de HuggingFace:
from transformers import T5ForConditionalGeneration, T5Tokenizer
tok = T5Tokenizer.from_pretrained("google/flan-t5-base")
model = T5ForConditionalGeneration.from_pretrained("google/flan-t5-base")
inputs = tok("translate English to French: Attention is all you need.", return_tensors="pt")
out = model.generate(**inputs, max_new_tokens=32)
print(tok.decode(out[0], skip_special_tokens=True))
El truco de T5: el nombre de la tarea va en el texto de entrada. El mismo modelo maneja decenas de tareas porque cada tarea es texto de entrada, texto de salida. En 2026, este patrón ha sido generalizado por modelos solo decoder ajustados por instrucción, pero T5 lo codificó primero.
Envíelo
Consulte outputs/skill-seq2seq-picker.md. La habilidad elige entre encoder-decoder y solo decoder para una nueva tarea, considerando la estructura de entrada-salida, la latencia y los objetivos de calidad.
Ejercicios
- Fácil. Ejecute
code/main.py, aplique la corrupción de fragmentos a una oración de 30 tokens, verifique que la concatenación de los tokens de origen que no son centinelas con los fragmentos de destino decodificados reproduzca el original. - Medio. Implemente el ruido
text_infillde BART: reemplace fragmentos aleatorios con un único token<mask_token>, y el decoder debe inferir la longitud correcta del fragmento más el contenido. Muestre un ejemplo. - Difícil. Ajuste fino de
flan-t5-smallen un corpus minúsculo de Inglés → Pig Latin (200 parejas). Mida BLEU en un conjunto de prueba separado de 50 parejas. Compare con el ajuste fino deLlama-3.2-1Ben los mismos datos con el mismo cómputo.
Términos Clave
| Término | Lo que la gente dice | Lo que realmente significa |
|---|---|---|
| Encoder-decoder | "Transformer Seq2seq" | Dos pilas: encoder bidireccional para entrada, decoder causal con atención cruzada (cross-attention) para salida. |
| Cross-attention | "Donde el origen habla con el destino" | Q del decoder × K/V del encoder. El único lugar donde la información del encoder ingresa al decoder. |
| Span corruption | "El truco de preentrenamiento de T5" | Reemplazar fragmentos aleatorios con tokens centinela; el decoder genera los fragmentos. |
| Denoising objective | "El juego de BART" | Aplicar una función de ruído a la entrada, entrenar al decoder para reconstruir la secuencia limpia. |
| Sentinel token | "El marcador <extra_id_N>" |
Tokens especiales que marcan fragmentos corrompidos en el origen y los vuelven a marcar en el destino. |
| Flan | "T5 ajustado por instrucción" | T5 ajustado en más de 1,800 tareas; hizo que el encoder-decoder fuera competitivo en el seguimiento de instrucciones. |
| Beam search | "Estratégia de decodificación" | Mantener las top-k secuencias parciales en cada paso; estándar para traducción/resumen. |
| Teacher forcing | "Entrada en tiempo de entrenamiento" | Durante el entrenamiento, alimentar el token de salida anterior real al decoder, no el token muestreado. |
Lectura Adicional
- Raffel et al. (2019). Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer — T5.
- Lewis et al. (2019). BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension — BART.
- Chung et al. (2022). Scaling Instruction-Finetuned Language Models — Flan-T5.
- Radford et al. (2022). Robust Speech Recognition via Large-Scale Weak Supervision — Whisper, el encoder-decoder canónico de 2026.
- HuggingFace
modeling_t5.py— implementación de referencia.