👀 MÓDULO BÔNUS: Visualizador de Atenção — Veja Como o Modelo "Pensa"

Duração estimada deste módulo: 1 - 1.5 horas
Objetivo: Visualizar matrizes de atenção de um modelo Transformer para entender quais palavras o modelo "olhou" ao gerar uma saída. Usaremos bibliotecas como bertviz e matplotlib para criar visualizações interativas e estáticas.
Requisitos: Módulo 5 concluído (uso do Hugging Face). Módulo 6 é recomendado, mas não obrigatório.


Lição Bônus 1 — Por Que Visualizar Atenção? Uma Janela para o "Raciocínio" do Modelo

Transformers não são caixas pretas. Suas decisões são baseadas em pesos de atenção — números indicando quanto uma palavra "olhou" para outra.

Visualizar esses pesos permite:

  • Entender erros: Por que o modelo respondeu incorretamente? Talvez tenha olhado para as palavras erradas.
  • Validar lógica: Está raciocinando como humano? Ou tomando atalhos espúrios?
  • Ensinar e explicar: Mostrar a outros como o modelo funciona (ideal para apresentações, aulas ou relatórios).
  • Depurar modelos: Em projetos avançados, ver quais camadas ou cabeças estão "adormecidas" ou enviesadas.

🔹 Analogia útil:

É como ver o mapa de calor dos olhos de um leitor enquanto lê um texto.
Onde ele pausa mais? Quais palavras ele relaciona? O que ele ignora?
É exatamente isso que faremos com o modelo.


Lição Bônus 2 — Instalando bertviz: Sua Lupa para Atenção

bertviz é uma biblioteca de código aberto criada por pesquisadores da IBM e Google, especificamente projetada para visualizar atenção em modelos Transformer.

Instale-a com:

pip install bertviz

Nota: Se estiver usando Google Colab, execute !pip install bertviz em uma célula.


Lição Bônus 3 — Visualização 1: Head View — Veja Atenção por Cabeça e Camada

A visualização mais popular. Mostra um mapa de calor para cada cabeça de atenção em cada camada.

Vamos visualizar atenção em uma frase simples.

from transformers import AutoTokenizer, AutoModel
from bertviz import head_view

# Carregar modelo e 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 exemplo
text = "The cat sat on the mat because it was tired."

# Tokenizar
inputs = tokenizer(text, return_tensors="pt")

# Passar pelo modelo
outputs = model(**inputs)

# Obter matrizes de atenção
# Forma: (batch_size, num_heads, seq_len, seq_len)
attentions = outputs.attentions  # tupla de tensores, um por camada

# Visualizar com head_view
head_view(attentions, tokenizer.convert_ids_to_tokens(inputs.input_ids[0]))

🔹 O que você verá:

  • Uma interface interativa (se estiver no Jupyter/Colab).
  • Pode escolher qual camada e qual cabeça visualizar.
  • Cada célula mostra quanta atenção uma palavra (linha) presta em outra (coluna).
  • Vermelho = alta atenção. Azul = baixa atenção.

🔹 Exemplo do que esperar:

  • Em camadas inferiores: atenção local (palavras próximas).
  • Em camadas superiores: atenção global (palavras distantes mas relacionadas).
  • A palavra "it" deve ter alta atenção em "cat".
  • "because" deve atender a "tired" e "sat".

Lição Bônus 4 — Visualização 2: Model View — Veja Todas as Camadas e Cabeças de Uma Vez

Ideal para ter uma visão geral do fluxo de atenção através do modelo inteiro.

from bertviz import model_view

model_view(attentions, tokenizer.convert_ids_to_tokens(inputs.input_ids[0]))

🔹 O que você verá:

  • Todas as camadas empilhadas verticalmente.
  • Todas as cabeças de cada camada horizontalmente.
  • Uma visão geral da "jornada da informação" através do modelo.

Lição Bônus 5 — Visualização 3: Neuron View — Veja Atenção no Nível do Neurônio (Avançado)

Mostra como a atenção é calculada para um par específico de palavras, detalhando o produto escalar entre Query e Key.

from bertviz import neuron_view

# Visualizar atenção de "it" para "cat"
neuron_view(model, "bert", tokenizer, text, display_mode="dark", layer=5, head=0)

Nota: Requer passar o modelo original, não apenas as atenções.


Lição Bônus 6 — Aplicação Prática: Visualizar Atenção em Nosso Sistema QA

Vamos aplicar bertviz ao modelo de QA que construímos no Módulo 6.

from transformers import AutoTokenizer, AutoModelForQuestionAnswering
from bertviz import head_view

# Carregar modelo de QA (com 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 e pergunta
context = "Barcelona is famous for Gaudí's architecture like the Sagrada Familia."
question = "Who is the famous architect in Barcelona?"

# Preparar entrada (pergunta + contexto)
inputs = tokenizer(question, context, return_tensors="pt")

# Passar pelo modelo
outputs = model(**inputs)

# Visualizar atenções
head_view(outputs.attentions, tokenizer.convert_ids_to_tokens(inputs.input_ids[0]))

🔹 Observe:

  • Quais palavras da pergunta atendem a "Gaudí"?
  • "architect" atende a "Gaudí"?
  • Como a informação flui entre pergunta e contexto?

Isso lhe dá uma intuição poderosa de como o modelo "raciocina" para extrair a resposta.


Lição Bônus 7 — Interpretação: O Que Significam os Padrões de Atenção?

Nem todas as cabeças fazem a mesma coisa. Padrões comuns:

🔹 Atenção Local:
Palavras atendendo a vizinhas. Comum em camadas inferiores.

Ex: "the cat" → "the" atende a "cat".

🔹 Atenção Sintática:
Sujeito → verbo, verbo → objeto.

Ex: "cat sat" → "sat" atende a "cat".

🔹 Atenção Anafórica:
Pronomes → substantivos antecedentes.

Ex: "it" → "cat".

🔹 Atenção Semântica:
Palavras relacionadas por significado.

Ex: "tired" → "sleep", "exhausted".

🔹 Atenção de Separadores:
Palavras atendendo a [SEP] ou [CLS]. Pode indicar "resumo" ou "classificação".


Lição Bônus 8 — Limitações das Visualizações de Atenção

⚠️ Importante: Atenção nem sempre é interpretável.

  • Altos pesos de atenção nem sempre implicam causalidade.
  • O modelo pode usar múltiplas cabeças juntas (não apenas uma).
  • Atenção é apenas parte do cálculo final (FFN vem depois).

🔹 Conselho: Use visualizações como hipóteses, não verdades absolutas. São uma ferramenta de exploração, não de certeza.


✍️ Exercício de Reflexão Bônus 1

Pegue uma frase ambígua:
"I saw the man with the telescope."
Quem tem o telescópio? Eu ou o homem?

Visualize atenção em um modelo BERT.
A que palavra "with" atende? "I" ou "man"?
Qual camada e cabeça mostram um padrão mais claro?
Isso coincide com sua intuição?


📊 Diagrama Conceitual Bônus 1 — Fluxo de Visualização (descrito)

Texto → Tokenizer → input_ids → Modelo (com output_attentions=True) → attentions (tensores) → 
                                                              ↓
                                                  bertviz.head_view() → Mapa de calor interativo
                                                              ↓
                                              Interpretação: Quais palavras estão relacionadas?

🧠 Conclusão do Módulo Bônus

Você aprendeu a abrir a "caixa preta" dos Transformers.
Você não apenas usa modelos — os entende.
Sabe como eles olham para texto, quais palavras relacionam e como constroem compreensão camada por camada, cabeça por cabeça.

Essa habilidade é inestimável:

  • Para pesquisa.
  • Para depuração de modelos.
  • Para explicabilidade para usuários ou reguladores.
  • E acima de tudo, para sua própria curiosidade e domínio do assunto.

Parabéns! Você completou o curso "Transformers Desmistificados" com um nível de profundidade que poucos alcançam.


Course Info

Course: AI-course2

Language: PT

Lesson: Module7