Duración estimada de este módulo: 1 - 1.5 horas
Objetivo: Visualizar las matrices de atención de un modelo Transformer para entender qué palabras "miró" al generar una salida. Usaremos librerías comobertvizymatplotlibpara crear visualizaciones interactivas y estáticas.
Requisitos: Haber completado el Módulo 5 (uso de Hugging Face). Se recomienda (pero no es obligatorio) haber hecho el Módulo 6.
Los Transformers no son cajas negras. Sus decisiones están basadas en pesos de atención — números que indican cuánto "miró" una palabra a otra.
Visualizar estos pesos te permite:
🔹 Analogía útil:
Es como ver el mapa de calor de los ojos de un lector mientras lee un texto.
¿Dónde se detiene más? ¿Qué palabras relaciona? ¿Qué ignora?
Eso es exactamente lo que haremos con el modelo.
bertviz: tu lupa para la atenciónbertviz es una librería de código abierto creada por investigadores de IBM y Google, diseñada específicamente para visualizar la atención en modelos Transformer.
Instálala con:
pip install bertviz
Nota: Si usas Google Colab, ejecuta
!pip install bertvizen una celda.
La vista más popular. Muestra una matriz de calor para cada cabeza de atención en cada capa.
Vamos a visualizar la atención en una oración simple.
from transformers import AutoTokenizer, AutoModel
from bertviz import head_view
# Cargar modelo y tokenizer (usaremos BERT base)
model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name, output_attentions=True) # ¡IMPORTANTE!
# Texto de ejemplo
text = "The cat sat on the mat because it was tired."
# Tokenizar
inputs = tokenizer(text, return_tensors="pt")
# Pasar por el modelo
outputs = model(**inputs)
# Obtener las matrices de atención
# Shape: (batch_size, num_heads, seq_len, seq_len)
attentions = outputs.attentions # tupla de tensores, uno por capa
# Visualizar con head_view
head_view(attentions, tokenizer.convert_ids_to_tokens(inputs.input_ids[0]))
🔹 Qué verás:
🔹 Ejemplo de lo que esperar:
Ideal para tener una visión general del flujo de atención a través de todo el modelo.
from bertviz import model_view
model_view(attentions, tokenizer.convert_ids_to_tokens(inputs.input_ids[0]))
🔹 Qué verás:
Muestra cómo se calcula la atención para un par específico de palabras, desglosando el producto punto entre Query y Key.
from bertviz import neuron_view
# Visualizar la atención de "it" hacia "cat"
neuron_view(model, "bert", tokenizer, text, display_mode="dark", layer=5, head=0)
Nota: Requiere pasar el modelo original, no solo las atenciones.
Vamos a aplicar bertviz al modelo de QA que construimos en el Módulo 6.
from transformers import AutoTokenizer, AutoModelForQuestionAnswering
from bertviz import head_view
# Cargar el modelo de QA (¡con output_attentions=True!)
model_name = "deepset/roberta-base-squad2"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForQuestionAnswering.from_pretrained(model_name, output_attentions=True)
# Contexto y pregunta
context = "Barcelona is famous for Gaudí's architecture like the Sagrada Familia."
question = "Who is the famous architect in Barcelona?"
# Preparar entrada (pregunta + contexto)
inputs = tokenizer(question, context, return_tensors="pt")
# Pasar por el modelo
outputs = model(**inputs)
# Visualizar atenciones
head_view(outputs.attentions, tokenizer.convert_ids_to_tokens(inputs.input_ids[0]))
🔹 Observa:
Esto te da una intuición poderosa de cómo el modelo "razona" para extraer la respuesta.
No todas las cabezas hacen lo mismo. Algunas patrones comunes:
🔹 Atención local:
Palabras que atienden a sus vecinas. Común en capas bajas.
Ej: "the cat" → "the" atiende a "cat".
🔹 Atención sintáctica:
Sujeto → verbo, verbo → objeto.
Ej: "cat sat" → "sat" atiende a "cat".
🔹 Atención anafórica:
Pronombres → sustantivos antecedentes.
Ej: "it" → "cat".
🔹 Atención semántica:
Palabras relacionadas por significado.
Ej: "tired" → "sleep", "exhausted".
🔹 Atención de separadores:
Palabras que atienden a [SEP] o [CLS]. Puede indicar "resumen" o "clasificación".
⚠️ Importante: La atención no es siempre interpretable.
🔹 Consejo: Usa las visualizaciones como hipótesis, no como verdades absolutas. Son una herramienta de exploración, no de certeza.
Toma una oración ambigua:
"I saw the man with the telescope."
¿Quién tiene el telescopio? ¿Yo o el hombre?Visualiza la atención en un modelo BERT.
¿A qué palabra atiende "with"? ¿A "I" o a "man"?
¿Qué capa y qué cabeza muestran un patrón más claro?
¿Coincide con tu intuición?
Texto → Tokenizer → input_ids → Modelo (con output_attentions=True) → attentions (tensores) →
↓
bertviz.head_view() → Matriz de calor interactiva
↓
Interpretación: ¿qué palabras se relacionan?
Has aprendido a abrir la "caja negra" de los Transformers.
Ya no solo usas modelos — los entiendes.
Sabes cómo miran el texto, qué palabras relacionan, y cómo construyen su comprensión capa por capa, cabeza por cabeza.Esta habilidad es invaluable:
- Para la investigación.
- Para la depuración de modelos.
- Para la explicabilidad ante usuarios o reguladores.
- Y, sobre todo, para tu propia curiosidad y dominio del tema.
¡Felicidades! Has completado el curso "Transformers sin Misterio" con un nivel de profundidad que pocos alcanzan.