💻 MÓDULO 5: De la teoría a la práctica — Usando Transformers con Hugging Face

Duración estimada de este módulo: 1.5 - 2 horas
Objetivo: Que el estudiante pueda, por sí mismo, cargar cualquier modelo Transformer de Hugging Face, entender sus entradas y salidas, y usarlo para tareas comunes como clasificación, generación o pregunta-respuesta — sin necesidad de fine-tuning.


Lección 5.1 — ¿Qué es Hugging Face? La biblioteca que democratizó los Transformers

Hugging Face no es solo una biblioteca. Es un ecosistema completo para modelos de lenguaje.

🔹 Qué ofrece:

  • 🤗 transformers: la biblioteca principal para cargar, usar y entrenar modelos.
  • 🧩 datasets: acceso a miles de conjuntos de datos listos para usar.
  • 🏷️ tokenizers: herramientas para convertir texto en tokens (la entrada que entienden los modelos).
  • 🧪 evaluate: métricas estandarizadas para evaluar modelos.
  • 🌐 Model Hub: un repositorio con cientos de miles de modelos preentrenados, listos para descargar (BERT, GPT-2, T5, Llama, Mistral, etc.).

🔹 Analogía útil:

Hugging Face es como la "App Store de los modelos de IA".
¿Quieres un modelo para resumir textos? Hay decenas.
¿Uno para detectar emociones? Cientos.
¿Uno en español? También.
¿Uno pequeño para correr en tu laptop? ¡Claro!
Solo buscas, instalas, y usas.


Lección 5.2 — Instalación y configuración inicial

Antes de empezar, necesitamos instalar las librerías. Lo haremos en un entorno limpio (recomendado: Google Colab o un entorno virtual local).

pip install torch transformers datasets

Nota: torch (PyTorch) es el framework de deep learning que usa Hugging Face por defecto. También puedes usar TensorFlow, pero PyTorch es más común en la comunidad.


Lección 5.3 — Tu primer modelo: cargando un clasificador de sentimiento

Vamos a empezar con algo simple: un modelo que lee un texto y dice si es positivo o negativo.

Usaremos distilbert-base-uncased-finetuned-sst-2-english, un modelo pequeño, rápido, y preentrenado para esta tarea.

from transformers import pipeline

# Creamos un pipeline de clasificación de texto
classifier = pipeline("sentiment-analysis")

# Probamos con una frase
result = classifier("I love this course! It's amazing and very clear.")
print(result)
# Salida: [{'label': 'POSITIVE', 'score': 0.9998}]

¡Eso es todo! En 3 líneas, tienes un modelo de IA funcionando.

🔹 ¿Qué hizo pipeline?

  • Descargó automáticamente el modelo y el tokenizer desde el Hub.
  • Preprocesó el texto (tokenización, padding, etc.).
  • Ejecutó el modelo (inferencia).
  • Post-procesó la salida (convertir logits en etiquetas y probabilidades).

Lección 5.4 — Entendiendo los "pipelines": la forma más fácil de empezar

Hugging Face ofrece pipelines para tareas comunes:

  • "sentiment-analysis" → clasificación de sentimiento
  • "text-generation" → generar texto (GPT-2, etc.)
  • "question-answering" → responder preguntas (BERT, etc.)
  • "translation" → traducción
  • "summarization" → resumen
  • "ner" → reconocimiento de entidades (personas, lugares, etc.)

Ejemplo: generación de texto con GPT-2

generator = pipeline("text-generation", model="gpt2")

text = "The future of artificial intelligence is"
result = generator(text, max_length=50, num_return_sequences=1)
print(result[0]['generated_text'])

Salida posible:

"The future of artificial intelligence is one of the most exciting areas of research today. It has the potential to revolutionize..."


Lección 5.5 — ¿Qué pasa detrás de escena? Tokenización, IDs y attention_mask

Los pipelines son mágicos… pero para entender realmente lo que ocurre, debemos ver el proceso manual.

Tomemos el mismo clasificador, pero paso a paso.

from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch

# 1. Cargar el tokenizer y el modelo
model_name = "distilbert-base-uncased-finetuned-sst-2-english"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)

# 2. Tokenizar el texto
text = "This movie is absolutely wonderful!"
inputs = tokenizer(text, return_tensors="pt")  # "pt" = PyTorch tensors
print(inputs)

Salida:

{
  'input_ids': tensor([[  101,  2023,  3042,  2003,  2675, 12712,  1029,   102]]),
  'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1]])
}

🔹 Explicación:

  • input_ids: cada número es un token. 101 = [CLS], 102 = [SEP], el resto son palabras.
  • attention_mask: indica qué tokens son reales (1) y cuáles son padding (0). Aquí, todos son reales.

Lección 5.6 — Ejecutando el modelo manualmente

# 3. Pasar los inputs al modelo
outputs = model(**inputs)

# 4. Obtener las logits (salidas sin normalizar)
logits = outputs.logits
print("Logits:", logits)  # Ej: tensor([[-4.5, 3.2]])

# 5. Aplicar softmax para obtener probabilidades
probabilities = torch.softmax(logits, dim=-1)
print("Probabilities:", probabilities)  # Ej: tensor([[0.001, 0.999]])

# 6. Obtener la etiqueta predicha
predicted_class = torch.argmax(probabilities, dim=-1).item()
labels = ["NEGATIVE", "POSITIVE"]
print("Predicted label:", labels[predicted_class])  # → POSITIVE

🔹 ¿Por qué hacerlo manualmente? Para entender cómo funciona, depurar errores, o personalizar el proceso (por ejemplo, cambiar el umbral de decisión).


Lección 5.7 — Cómo elegir el modelo adecuado para tu tarea

No todos los modelos sirven para todo. Aquí hay una guía rápida:

Tarea Tipo de modelo Ejemplos de modelos en Hugging Face
Clasificación de texto Encoder-only (BERT-style) bert-base-uncased, distilbert-base-uncased, nlptown/bert-base-multilingual-uncased-sentiment
Generación de texto Decoder-only (GPT-style) gpt2, facebook/opt-350m, mistralai/Mistral-7B-v0.1 (requiere más RAM)
Pregunta-respuesta (extractiva) Encoder-only bert-large-uncased-whole-word-masking-finetuned-squad, deepset/roberta-base-squad2
Traducción / Resumen Encoder-Decoder t5-small, facebook/bart-large-cnn, Helsinki-NLP/opus-mt-en-es
Reconocimiento de entidades (NER) Encoder-only dslim/bert-base-NER, Jean-Baptiste/roberta-large-ner-english

🔍 Tip: En el Model Hub de Hugging Face, puedes filtrar por:

  • Tarea (task)
  • Idioma
  • Tamaño del modelo
  • Licencia
  • Framework (PyTorch, TensorFlow)

Lección 5.8 — Trabajando con modelos en español

¡Sí, hay muchos modelos en español!

Ejemplo: clasificación de sentimiento en tweets en español.

classifier_es = pipeline(
    "sentiment-analysis",
    model="nlptown/bert-base-multilingual-uncased-sentiment"
)

result = classifier_es("Este curso es increíble, ¡lo recomiendo mucho!")
print(result)
# Salida: [{'label': '5 stars', 'score': 0.8742}]

Otro modelo más específico: finiteautomata/bertweet-base-sentiment-analysis (para redes sociales).


Lección 5.9 — Manejo de errores comunes y soluciones

Error 1: "CUDA out of memory"

Solución: Usa un modelo más pequeño (distilbert en vez de bert-large), o ejecuta en CPU (más lento, pero funciona).

model = AutoModelForSequenceClassification.from_pretrained(model_name).to("cpu")

Error 2: Texto demasiado largo

Solución: Trunca el texto.

inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=512)

Error 3: Modelo no encontrado

Solución: Verifica el nombre exacto en el Model Hub. Usa autocompletado en el sitio web.


✍️ Ejercicio de reflexión 5.1

Elige una tarea que te interese (ej: resumir noticias, detectar spam, traducir frases).
Ve al Model Hub de Hugging Face y busca 2-3 modelos candidatos.
Compara sus métricas, tamaño, idioma y licencia.
¿Cuál elegirías? ¿Por qué?


📊 Diagrama conceptual 5.1 — Flujo de inferencia con Hugging Face (descrito)

Texto → Tokenizer → input_ids + attention_mask → Modelo → logits → softmax → etiqueta + probabilidad
          ↑               ↑                          ↑            ↑
      Convierte     Indica tokens           Red neuronal     Convierte a
      a números     reales vs padding       preentrenada     probabilidad

🧠 Conclusión del Módulo 5

Hugging Face eliminó la barrera de entrada para usar modelos Transformer.
Ya no necesitas semanas de configuración, GPUs caras o conocimientos profundos de deep learning para empezar.
Con unas líneas de código, puedes tener un modelo de IA generando texto, clasificando emociones o respondiendo preguntas.

Pero… ¡esto es solo el principio! En el próximo módulo, aplicaremos todo lo aprendido en un proyecto guiado: construiremos un sistema de pregunta-respuesta que responde consultas sobre un texto dado — usando un modelo preentrenado, sin fine-tuning.


Course Info

Course: AI-course2

Language: ES

Lesson: Module5