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:
- Preprocesa el texto a un formato numérico que el modelo entiende (tokenización).
- Pasa esos números por el modelo.
- 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:
| Pipeline | Qué hace |
|---|---|
text-generation | Completa un prompt |
text-classification | Asigna una categoría a un texto |
summarization | Resume preservando lo esencial |
translation | Traduce entre idiomas |
question-answering | Extrae una respuesta de un contexto dado |
image-classification / automatic-speech-recognition | Lo 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:
| Arquitectura | Atención | Mejor para | Ejemplos |
|---|---|---|---|
| Encoder-only | Bidireccional (ve toda la frase) | Clasificación, NER, QA extractivo | BERT, ModernBERT, RoBERTa |
| Decoder-only | Causal (solo ve lo anterior) | Generación de texto, chat, código | GPT, Llama, Gemma, DeepSeek, Claude |
| Encoder-decoder | Bidireccional + causal | Traducción, resumen, reescritura | T5, 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:
- NLP es el campo; LLM es un tipo de modelo de NLP que resuelve muchas tareas con un solo modelo grande.
pipeline()siempre hace lo mismo: tokenizar → correr el modelo → decodificar. Es el mismo patrón detrás de cualquier API de LLM que uses.- La autoatención deja que cada palabra mire directamente a cualquier otra, sin importar la distancia — por eso reemplazó a las redes recurrentes.
- Hay tres arquitecturas (encoder / decoder / encoder-decoder), pero hoy casi todo lo que usás es decoder-only.
- 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.