Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Desafio: Plotando Mapas de Calor de Atenção | Aplicando Transformers a Tarefas de PLN
Transformers para Processamento de Linguagem Natural

Desafio: Plotando Mapas de Calor de Atenção

Visualizar os pesos de atenção com um mapa de calor auxilia na interpretação de como um modelo transformer distribui seu foco ao longo de uma sentença. Utiliza-se o matplotlib para plotar um mapa de calor onde tanto o eixo x quanto o eixo y representam os tokens da sentença. Cada célula no mapa de calor exibe o peso de atenção entre um par de tokens: a linha corresponde ao token de consulta (query) e a coluna ao token de chave (key).

Comece dividindo sua sentença em tokens:

sentence = "Transformers help models focus on important words."
tokens = sentence.split()

Em seguida, defina sua matriz de atenção como um array NumPy. Cada valor representa o peso de atenção de um token para outro:

import numpy as np
attention = np.array([
    [0.20, 0.10, 0.05, 0.10, 0.25, 0.10, 0.20],
    [0.05, 0.30, 0.10, 0.10, 0.15, 0.20, 0.10],
    [0.10, 0.15, 0.35, 0.10, 0.10, 0.10, 0.10],
    [0.10, 0.10, 0.10, 0.30, 0.10, 0.15, 0.15],
    [0.15, 0.10, 0.10, 0.10, 0.30, 0.10, 0.15],
    [0.10, 0.10, 0.15, 0.10, 0.10, 0.35, 0.10],
    [0.20, 0.15, 0.10, 0.10, 0.10, 0.10, 0.25],
])

Para plotar o mapa de calor, utilize o seguinte código:

import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(8, 6))
im = ax.imshow(attention, cmap="viridis")

ax.set_xticks(np.arange(len(tokens)))
ax.set_yticks(np.arange(len(tokens)))
ax.set_xticklabels(tokens, rotation=45, ha="right")
ax.set_yticklabels(tokens)

cbar = plt.colorbar(im, ax=ax)
cbar.set_label("Attention Weight")

ax.set_title("Attention Heatmap")
ax.set_xlabel("Key Tokens")
ax.set_ylabel("Query Tokens")

plt.tight_layout()
plt.show()

Cores mais claras ou escuras indicam valores de atenção mais altos ou mais baixos, dependendo do mapa de cores. Ao observar o mapa de calor, é possível identificar para quais palavras o modelo dedica mais atenção ao processar cada token. Por exemplo, se a célula na linha focus e coluna important estiver clara, o modelo estabelece uma forte conexão entre focus e important em sua representação interna. Essa visualização permite compreender quais partes da sentença de entrada influenciam umas às outras e é útil para diagnosticar ou interpretar o comportamento do modelo em tarefas de processamento de linguagem natural.

Agora, execute o código para visualizar o mapa de calor resultante e, em seguida, escreva seu primeiro gráfico de visualização.

123456789101112131415161718192021222324252627282930313233
import numpy as np import matplotlib.pyplot as plt sentence = "Transformers help models focus on important words." tokens = sentence.split() attention = np.array([ [0.20, 0.10, 0.05, 0.10, 0.25, 0.10, 0.20], [0.05, 0.30, 0.10, 0.10, 0.15, 0.20, 0.10], [0.10, 0.15, 0.35, 0.10, 0.10, 0.10, 0.10], [0.10, 0.10, 0.10, 0.30, 0.10, 0.15, 0.15], [0.15, 0.10, 0.10, 0.10, 0.30, 0.10, 0.15], [0.10, 0.10, 0.15, 0.10, 0.10, 0.35, 0.10], [0.20, 0.15, 0.10, 0.10, 0.10, 0.10, 0.25], ]) fig, ax = plt.subplots(figsize=(8, 6)) im = ax.imshow(attention, cmap="viridis") ax.set_xticks(np.arange(len(tokens))) ax.set_yticks(np.arange(len(tokens))) ax.set_xticklabels(tokens, rotation=45, ha="right") ax.set_yticklabels(tokens) cbar = plt.colorbar(im, ax=ax) cbar.set_label("Attention Weight") ax.set_title("Attention Heatmap") ax.set_xlabel("Key Tokens") ax.set_ylabel("Query Tokens") plt.tight_layout() plt.show()
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 4
single

single

Desafio: Plotando Mapas de Calor de Atenção

Deslize para mostrar o menu

Visualizar os pesos de atenção com um mapa de calor auxilia na interpretação de como um modelo transformer distribui seu foco ao longo de uma sentença. Utiliza-se o matplotlib para plotar um mapa de calor onde tanto o eixo x quanto o eixo y representam os tokens da sentença. Cada célula no mapa de calor exibe o peso de atenção entre um par de tokens: a linha corresponde ao token de consulta (query) e a coluna ao token de chave (key).

Comece dividindo sua sentença em tokens:

sentence = "Transformers help models focus on important words."
tokens = sentence.split()

Em seguida, defina sua matriz de atenção como um array NumPy. Cada valor representa o peso de atenção de um token para outro:

import numpy as np
attention = np.array([
    [0.20, 0.10, 0.05, 0.10, 0.25, 0.10, 0.20],
    [0.05, 0.30, 0.10, 0.10, 0.15, 0.20, 0.10],
    [0.10, 0.15, 0.35, 0.10, 0.10, 0.10, 0.10],
    [0.10, 0.10, 0.10, 0.30, 0.10, 0.15, 0.15],
    [0.15, 0.10, 0.10, 0.10, 0.30, 0.10, 0.15],
    [0.10, 0.10, 0.15, 0.10, 0.10, 0.35, 0.10],
    [0.20, 0.15, 0.10, 0.10, 0.10, 0.10, 0.25],
])

Para plotar o mapa de calor, utilize o seguinte código:

import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(8, 6))
im = ax.imshow(attention, cmap="viridis")

ax.set_xticks(np.arange(len(tokens)))
ax.set_yticks(np.arange(len(tokens)))
ax.set_xticklabels(tokens, rotation=45, ha="right")
ax.set_yticklabels(tokens)

cbar = plt.colorbar(im, ax=ax)
cbar.set_label("Attention Weight")

ax.set_title("Attention Heatmap")
ax.set_xlabel("Key Tokens")
ax.set_ylabel("Query Tokens")

plt.tight_layout()
plt.show()

Cores mais claras ou escuras indicam valores de atenção mais altos ou mais baixos, dependendo do mapa de cores. Ao observar o mapa de calor, é possível identificar para quais palavras o modelo dedica mais atenção ao processar cada token. Por exemplo, se a célula na linha focus e coluna important estiver clara, o modelo estabelece uma forte conexão entre focus e important em sua representação interna. Essa visualização permite compreender quais partes da sentença de entrada influenciam umas às outras e é útil para diagnosticar ou interpretar o comportamento do modelo em tarefas de processamento de linguagem natural.

Agora, execute o código para visualizar o mapa de calor resultante e, em seguida, escreva seu primeiro gráfico de visualização.

123456789101112131415161718192021222324252627282930313233
import numpy as np import matplotlib.pyplot as plt sentence = "Transformers help models focus on important words." tokens = sentence.split() attention = np.array([ [0.20, 0.10, 0.05, 0.10, 0.25, 0.10, 0.20], [0.05, 0.30, 0.10, 0.10, 0.15, 0.20, 0.10], [0.10, 0.15, 0.35, 0.10, 0.10, 0.10, 0.10], [0.10, 0.10, 0.10, 0.30, 0.10, 0.15, 0.15], [0.15, 0.10, 0.10, 0.10, 0.30, 0.10, 0.15], [0.10, 0.10, 0.15, 0.10, 0.10, 0.35, 0.10], [0.20, 0.15, 0.10, 0.10, 0.10, 0.10, 0.25], ]) fig, ax = plt.subplots(figsize=(8, 6)) im = ax.imshow(attention, cmap="viridis") ax.set_xticks(np.arange(len(tokens))) ax.set_yticks(np.arange(len(tokens))) ax.set_xticklabels(tokens, rotation=45, ha="right") ax.set_yticklabels(tokens) cbar = plt.colorbar(im, ax=ax) cbar.set_label("Attention Weight") ax.set_title("Attention Heatmap") ax.set_xlabel("Key Tokens") ax.set_ylabel("Query Tokens") plt.tight_layout() plt.show()
Tarefa

Deslize para começar a programar

Plotagem de um mapa de calor de atenção para a frase "Attention helps models understand context." utilizando a seguinte matriz de atenção:

attention = [
    [0.25, 0.15, 0.20, 0.20, 0.20],
    [0.10, 0.40, 0.15, 0.20, 0.15],
    [0.15, 0.10, 0.35, 0.20, 0.20],
    [0.20, 0.15, 0.20, 0.25, 0.20],
    [0.15, 0.20, 0.20, 0.20, 0.25],
]
  • Utilização do matplotlib para criar um mapa de calor;
  • Rotulagem de ambos os eixos com os tokens da frase;
  • Inclusão de uma barra de cores rotulada como "Attention Weight;"
  • Título do gráfico: "Attention Heatmap."

Solução

Switch to desktopMude para o desktop para praticar no mundo realContinue de onde você está usando uma das opções abaixo
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 4
single

single

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

some-alt