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.
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.🔹 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.
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.
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?
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..."
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.# 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).
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)
¡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).
Solución: Usa un modelo más pequeño (
distilberten vez debert-large), o ejecuta en CPU (más lento, pero funciona).
model = AutoModelForSequenceClassification.from_pretrained(model_name).to("cpu")
Solución: Trunca el texto.
inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=512)
Solución: Verifica el nombre exacto en el Model Hub. Usa autocompletado en el sitio web.
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é?
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
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.