英译法案例 - 绘制张量图
1 课程概览
本课讲解绘制注意力张量图。Y 轴是英语句子,X 轴是法语句子,颜色越浅表示该单词越重要。通过可视化展示英语和法语单词之间的关联性。代码无需编写,了解即可。
2 核心概念与定义
- 注意力张量图:可视化展示英语和法语单词之间的关联性。
- Y 轴:英语句子。
- X 轴:法语句子。
- 颜色:颜色越浅,该单词越重要。
3 模型与算法详解
注意力张量图说明
法语句子(X轴)
英 ┌─────────────────────┐
语 │ ░░░▓▓▓░░░▓▓▓░░░ │
句 │ ░░▓▓▓░░░▓▓▓░░░░ │
子 │ ▓▓▓░░░░░▓▓▓░░░░░ │
( │ ░░░░░▓▓▓░░░▓▓▓░░ │
Y │ ░░▓▓▓░░░░░▓▓▓░░░ │
轴) │ ░░░░░░░▓▓▓░░░▓▓▓ │
└─────────────────────┘
颜色越浅 = 越重要
关联性分析
- 生成法语单词时,需要哪些英语单词
- 颜色越浅,表示该英语单词对生成当前法语单词越重要
- 越往后生成,关联性越强
绘制流程
- 获取数据加载器
- 实例化模型(编码器 + 解码器)
- 加载模型参数
- 定义测试句子
- 数值化样本
- 模型预测
- 绘制注意力图
4 数学原理与推导
本课为可视化,无数学原理。
5 代码示例
import torch
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
def dm_test_attention():
"""绘制注意力张量图"""
# 第一步:获取数据加载器对象
my_dataloader = get_dataloader()
# 第二步:实例化模型
# 2.1 编码器模型
input_size = ENGLISH_WORD_N # 2803
hidden_size = 256
my_encoder = Encoder(input_size, hidden_size).to(device)
my_encoder.load_state_dict(
torch.load(path1, map_location=device)
)
# 2.2 解码器模型
my_attn_decoder = AttnDecoder(FRENCH_WORD_N, hidden_size).to(device)
my_attn_decoder.load_state_dict(
torch.load(path2, map_location=device)
)
# 第三步:定义测试句子
sentence = "we are both teachers"
# 第四步:数值化样本
tensor_x = tensorFromSentence(sentence)
tensor_x = torch.cat([
torch.tensor([[SOS]], device=device),
tensor_x,
torch.tensor([[EOS]], device=device)
], dim=0)
# 第五步:模型预测
decoder_words, decoder_attns = evaluate(
tensor_x, my_encoder, my_attn_decoder
)
# 第六步:绘制注意力图
fig = plt.figure()
ax = fig.add_subplot(111)
# 将注意力权重转为张量
attention = torch.cat(decoder_attns, dim=0)
attention = attention[:len(decoder_words), :tensor_x.size(0)]
# 绘制热力图
cax = ax.matshow(attention.numpy(), cmap='bone')
# 设置坐标轴
ax.set_xticklabels([''] + ['SOS'] + sentence.split(' ') + ['EOS'],
rotation=90)
ax.set_yticklabels([''] + decoder_words)
# 设置标签
ax.xaxis.set_major_locator(ticker.MultipleLocator(1))
ax.yaxis.set_major_locator(ticker.MultipleLocator(1))
plt.xlabel('英语句子')
plt.ylabel('法语句子')
plt.title('注意力张量图')
plt.show()
# 测试
if __name__ == "__main__":
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
dm_test_attention()
6 重难点与易错提醒
- ❗重点:Y 轴是英语句子,X 轴是法语句子。
- ❗重点:颜色越浅,该单词越重要。
- ⚠️易错:代码无需编写,了解即可。
- 💡深入理解:注意力图展示英语和法语单词之间的关联性。
7 课堂问答精选
Q1:注意力张量图的坐标轴分别是什么?
A:Y 轴是英语句子,X 轴是法语句子。
Q2:颜色深浅代表什么?
A:颜色越浅,表示该英语单词对生成当前法语单词越重要。
Q3:注意力张量图的作用是什么?
A:可视化展示英语和法语单词之间的关联性,帮助理解模型在生成法语单词时关注哪些英语单词。
Q4:代码需要编写吗?
A:不需要,了解即可。
8 本课小结
- Y 轴:英语句子。
- X 轴:法语句子。
- 颜色越浅 = 越重要。
- 展示英语和法语单词之间的关联性。
- 代码无需编写,了解即可。
9 延伸思考
- 如何改进注意力机制?
- Transformer 架构是什么?