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 comobertvizematplotlibpara 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.
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:
🔹 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.
bertviz: Sua Lupa para Atençãobertviz é 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 bertvizem uma célula.
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á:
🔹 Exemplo do que esperar:
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á:
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.
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:
Isso lhe dá uma intuição poderosa de como o modelo "raciocina" para extrair a resposta.
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".
⚠️ Importante: Atenção nem sempre é interpretável.
🔹 Conselho: Use visualizações como hipóteses, não verdades absolutas. São uma ferramenta de exploração, não de certeza.
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?
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?
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.