Curso / HF LLM Course / Capítulo 1
● piloto de formato

Hugging Face · LLM Course · Capítulo 1

Transformers: por qué todo lo que ya usás corre sobre esto

Tenés práctica con código pero nunca viste la teoría de punta a punta. Este capítulo te da el mapa completo: qué es un transformer, por qué casi todo LLM moderno tira solo la mitad de esa arquitectura, y cómo el texto sale, literalmente, un token a la vez.

0. Por qué este capítulo pesa más de lo que parece

El curso original de Hugging Face nació en 2022 como un curso de NLP (procesamiento de lenguaje natural) y fue mutando a curso de LLMs a medida que el campo lo hizo. Eso importa para vos: vas a encontrar frases pensadas para un mundo con BERT y GPT-2 como protagonistas, en un momento donde el protagonista real es un puñado de modelos decoder-only enormes (Llama, Gemma, Qwen, DeepSeek, GPT, Claude). La mecánica de fondo no cambió, pero el énfasis sí, y este capítulo está reordenado para reflejar eso.

🟢 Actualización 2026

Casi ningún proyecto nuevo hoy arranca fine-tuneando un encoder tipo BERT desde cero. La ruta por defecto es: agarrar un LLM decoder-only pre-entrenado, y resolver la tarea con prompting, RAG, o un fine-tune liviano (LoRA/QLoRA). Vas a ver esa arquitectura en todos lados porque es, en la práctica, la única que te vas a cruzar el 90% del tiempo — por eso este capítulo le da más peso que el original.

Como venís con experiencia práctica (ya usaste modelos, APIs, quizás algún fine-tune) pero sin la teoría de base, el objetivo acá no es que memorices nombres de arquitecturas. Es que entiendas por qué funcionan así, para que cuando leas un paper o un README de un modelo nuevo, ya tengas dónde encajar la información nueva.

1. De NLP a LLM: qué cambió realmente

NLP (Natural Language Processing) es el campo completo: todo lo que tiene que ver con que una máquina entienda o genere lenguaje humano. Análisis de sentimiento, traducción, reconocer que "Hugging Face" es el nombre de una empresa y no una acción física — todo eso es NLP, y existe desde antes de que existieran los transformers.

Un LLM (Large Language Model) es un tipo particular de modelo de NLP que se volvió tan grande y se entrenó con tantos datos que dejó de necesitar un modelo distinto por tarea. En vez de entrenar un clasificador de sentimiento, otro de traducción y otro de resúmenes, entrenás un solo modelo que aprendió lenguaje de forma tan general que resuelve las tres cosas con el prompt correcto.

📜 Lo que decía el curso original

"Un LLM es un modelo de IA entrenado con enormes cantidades de texto que puede entender y generar texto similar al humano, reconocer patrones del lenguaje, y realizar una amplia variedad de tareas sin entrenamiento específico por tarea." Sigue siendo correcto — es la definición de base que no cambió.

Lo que sí distingue a un LLM del resto:

Escala

De millones a cientos de miles de millones de parámetros.

Generalidad

Una tarea nueva no requiere reentrenar el modelo, solo redactar bien el prompt.

Aprendizaje en contexto

Le mostrás 2-3 ejemplos dentro del prompt y ya ajusta su comportamiento.

Capacidades emergentes

A cierta escala aparecen habilidades que nadie programó explícitamente (razonar paso a paso, seguir instrucciones complejas).

Y las limitaciones que vienen de fábrica con esa escala — las vas a necesitar en la cabeza todo el curso: alucinan con total confianza, no "entienden" el mundo (operan sobre patrones estadísticos), heredan sesgos de sus datos de entrenamiento, y tienen una ventana de contexto finita (aunque hoy esa ventana llega a millones de tokens en algunos modelos, algo impensado en 2022).

2. Qué hace un transformer, en la práctica

Antes de mirar el motor, veamos qué hace el auto andando. La librería transformers de Hugging Face resume todo el trabajo sucio (preprocesar texto, correr el modelo, decodificar la salida) en una sola función: pipeline().

from transformers import pipeline

classifier = pipeline("sentiment-analysis")
classifier("Llevo toda mi vida esperando un curso así.")
[{'label': 'POSITIVE', 'score': 0.9598}]

Bajo el capó, ese pipeline() siempre hace tres pasos, sin importar la tarea:

  1. Preprocesa el texto a un formato numérico que el modelo entiende (tokenización).
  2. Pasa esos números por el modelo.
  3. Post-procesa la salida cruda para devolverte algo legible.

La misma función sirve para tareas radicalmente distintas con solo cambiar el nombre de la tarea y, opcionalmente, el modelo:

# Clasificación sin haber entrenado esas categorías (zero-shot)
classifier = pipeline("zero-shot-classification")
classifier(
    "Este es un curso sobre la librería Transformers",
    candidate_labels=["educación", "política", "negocios"],
)

# Generación de texto con un modelo puntual del Hub
generator = pipeline("text-generation", model="HuggingFaceTB/SmolLM2-360M")
generator("En este curso vamos a aprender a", max_length=30)

Esto es exactamente lo mismo que hacés hoy cuando llamás a una API de un LLM alojado (Claude, GPT, Llama vía un endpoint): mandás texto, el sistema tokeniza, corre el modelo, decodifica, te devuelve texto. La única diferencia es cuánta de esa cadena controlás vos.

✏️ Para probar

Si tenés Python a mano: instalá transformers, corré el ejemplo de zero-shot-classification con una frase tuya y tres etiquetas inventadas. Fijate que el modelo nunca vio esas etiquetas en entrenamiento — igual te da un score por cada una.

Family completa de tareas que vas a encontrar (texto, imagen, audio, multimodal) — no memorices la lista, volvé a ella cuando la necesites:

PipelineQué hace
text-generationCompleta un prompt
text-classificationAsigna una categoría a un texto
summarizationResume preservando lo esencial
translationTraduce entre idiomas
question-answeringExtrae una respuesta de un contexto dado
image-classification / automatic-speech-recognitionLo mismo, pero para imagen y audio

3. El truco de fondo: atención

El original deja esto para el capítulo 2. Acá lo adelantamos porque sin esta idea, todo lo que sigue (arquitecturas, inferencia) es memorizar nombres sin entender por qué existen.

Antes de los transformers (2017), los modelos de lenguaje procesaban texto palabra por palabra, en orden, arrastrando un "resumen" del contexto anterior (redes recurrentes, RNN/LSTM). El problema: ese resumen se degrada con frases largas — es como intentar recordar el principio de un párrafo largo mientras leés la última línea.

La autoatención (self-attention) resuelve esto de otra forma: en vez de comprimir todo el contexto en un resumen, cada palabra puede "mirar" directamente a cualquier otra palabra de la frase y decidir cuánto peso ponerle, todo en paralelo. Tomemos:

"El banco donde nos sentamos estaba frente al banco donde saqué la plata."

Para saber que el primer "banco" es un asiento y el segundo una entidad financiera, el modelo necesita mirar palabras lejanas ("sentamos", "saqué la plata"). La autoatención calcula, para cada palabra, un puntaje de relevancia contra todas las demás palabras de la frase, y usa esos puntajes para construir una representación de esa palabra que ya incorpora el contexto relevante — sin importar qué tan lejos esté.

🟢 Por qué esto importa en 2026

La ventana de contexto de un LLM (cuánto texto puede "ver" a la vez) es, en el fondo, una limitación de la autoatención: el costo de calcular esos puntajes crece de forma cuadrática con la longitud del texto. Modelos con contextos de cientos de miles o millones de tokens (algo común en 2026) existen gracias a años de ingeniería para hacer esa atención más barata — no porque el mecanismo original haya cambiado de fondo.

4. Las tres formas de armar un transformer

Un transformer completo tiene dos mitades: un encoder (lee y entiende texto de entrada) y un decoder (genera texto de salida, palabra por palabra). Casi todo modelo que vas a usar es una de estas tres combinaciones:

Tres arquitecturas de transformer Encoder-only con atención bidireccional, decoder-only con atención causal, y encoder-decoder combinando ambas. Encoder-only — BERT, ModernBERT atención bidireccional · entiende texto completo Encoder clasificación / NER Decoder-only — GPT, Llama, Gemma, Claude atención causal · solo mira hacia atrás · genera token a token Decoder siguiente token Encoder-decoder — T5, BART el encoder entiende la entrada, el decoder genera la salida Encoder Decoder traducción / resumen
Las tres variantes de la arquitectura Transformer. Hoy, casi todo LLM de propósito general es decoder-only: la línea del medio es la que vas a ver en el 90% de los modelos con los que trabajes.
ArquitecturaAtenciónMejor paraEjemplos
Encoder-onlyBidireccional (ve toda la frase)Clasificación, NER, QA extractivoBERT, ModernBERT, RoBERTa
Decoder-onlyCausal (solo ve lo anterior)Generación de texto, chat, códigoGPT, Llama, Gemma, DeepSeek, Claude
Encoder-decoderBidireccional + causalTraducción, resumen, reescrituraT5, BART, mBART

🟢 Actualización 2026

El original le da el mismo peso a las tres familias. En la práctica actual, decoder-only ganó por goleada para propósito general: es más simple de escalar, y un decoder-only bien entrenado puede hacer traducción o resumen igual de bien con el prompt correcto, sin necesitar la mitad "encoder" separada. Los encoder-only sobreviven fuerte en un nicho específico: embeddings (buscar texto similar, RAG) y clasificación de alto volumen donde no necesitás generar texto, solo una etiqueta rápida y barata.

5. Cómo un LLM genera texto, token a token

Esta sección no existía en el curso original de 2022 — se agregó después porque, con LLMs, entender inferencia (cómo se genera texto, no cómo se entrena) se volvió tan importante como entender el entrenamiento. Es, seguramente, la parte más útil de este capítulo para vos si ya usás LLMs por API.

Generar una respuesta pasa por dos fases bien distintas:

1. Prefill

El modelo procesa todo tu prompt de una sola vez: lo tokeniza, lo convierte a vectores, corre una pasada por la red. Es la fase que determina cuánto tardás en ver el primer token (time to first token).

2. Decode

El modelo genera un token, lo agrega a la secuencia, y repite: cada token nuevo depende de todos los anteriores. Es autoregresivo — por eso ves las respuestas "aparecer" de a poco en un chat.

En cada paso del decode, el modelo no elige "la" siguiente palabra — calcula una probabilidad para cada palabra posible de su vocabulario y después aplica una estrategia de muestreo para elegir una:

  • Temperature: más alta = más aleatorio/creativo, más baja = más determinista y repetible.
  • Top-p (nucleus sampling): solo considera las palabras cuya probabilidad acumulada llega a, por ejemplo, el 90%, descartando la cola larga de opciones improbables.
  • Top-k: variante más simple — solo mira las k palabras más probables.
  • Penalización por repetición: baja artificialmente la probabilidad de palabras ya usadas, para que el modelo no quede dando vueltas en el mismo lugar.

Estos son, literalmente, los parámetros que ves en cualquier API de LLM (temperature, top_p, max_tokens). Ahora sabés qué está pasando adentro cuando los tocás.

🟢 El optimización que hace posible todo esto: KV cache

Sin optimizar, cada token nuevo obligaría a recalcular la atención sobre toda la conversación desde cero — carísimo. El KV cache guarda los cálculos intermedios de tokens ya procesados y los reutiliza, así cada token nuevo solo cuesta el trabajo incremental. Es la razón por la que un chat con contexto largo se pone más lento a medida que crece, y por la que el uso de memoria (VRAM) es hoy el cuello de botella real al servir LLMs, más que el cómputo puro.

6. Sesgos y límites reales

Todo modelo entrenado con texto masivo de internet (o incluso con datos "curados" como Wikipedia) hereda los sesgos de esos datos. El ejemplo clásico del curso original sigue siendo ilustrativo:

from transformers import pipeline

unmasker = pipeline("fill-mask", model="bert-base-uncased")
unmasker("This man works as a [MASK].")
# → lawyer, carpenter, doctor, waiter, mechanic
unmasker("This woman works as a [MASK].")
# → nurse, waitress, teacher, maid, prostitute

BERT se entrenó con Wikipedia y BookCorpus — fuentes que en 2018 se consideraban "neutras" comparadas con scrapear todo internet. Igual el sesgo aparece. La conclusión del curso original sigue siendo válida al 100%: fine-tunear el modelo con tus propios datos no borra el sesgo de base, porque ese sesgo vive en los pesos preentrenados, no en la capa que vos agregás encima.

🟢 Actualización 2026

Lo nuevo desde entonces no es que el problema se haya resuelto — es que aparecieron capas de mitigación que lo hacen menos visible en el uso cotidiano: RLHF y post-entrenamiento de alineación (por qué Claude o GPT no te contestan lo mismo que un modelo base sin ajustar), guardrails a nivel de aplicación, y RAG (anclar la respuesta a documentos reales en vez de dejar que el modelo "recuerde" de memoria, que es donde más alucina). Ninguna de estas capas elimina el sesgo de fondo — lo empujan hacia abajo en la pila.

Cuando una alucinación tiene consecuencias reales (un número financiero equivocado, por ejemplo) las capas de arriba no alcanzan — hace falta verificación explícita. Ver el gate anti-alucinación para un caso real, con un incidente concreto de por medio.

7. Resumen y mapa mental

Si te quedás con cinco ideas de este capítulo, que sean estas:

  1. NLP es el campo; LLM es un tipo de modelo de NLP que resuelve muchas tareas con un solo modelo grande.
  2. pipeline() siempre hace lo mismo: tokenizar → correr el modelo → decodificar. Es el mismo patrón detrás de cualquier API de LLM que uses.
  3. La autoatención deja que cada palabra mire directamente a cualquier otra, sin importar la distancia — por eso reemplazó a las redes recurrentes.
  4. Hay tres arquitecturas (encoder / decoder / encoder-decoder), pero hoy casi todo lo que usás es decoder-only.
  5. Generar texto tiene dos fases (prefill y decode) y un puñado de perillas (temperature, top-p, top-k) que ahora sabés qué hacen de verdad.

El capítulo original de Hugging Face sigue con "Cómo 🤗 Transformers resuelve tareas" y un quiz — en esta versión los vamos a integrar más adelante en el curso, junto con la práctica hands-on con código.