关于BERT模型output_attentions索引及最后一层注意力热图的问询
BERT
output_attentions的索引对应关系 当你给BERT模型设置output_attentions=True后,返回的output_attentions是按从第一层到最后一层的顺序排列的注意力权重列表:
output_attentions[0]对应模型的第一层注意力output_attentions[-1]对应模型的最后一层注意力(也就是你要用来画热力图的目标层)
举个实际代码示例,快速获取最后一层注意力权重:
from transformers import BertModel, BertTokenizer import torch # 加载模型和分词器 tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') model = BertModel.from_pretrained('bert-base-uncased', output_attentions=True) # 输入示例文本 text = "Hello, this is a test sentence" inputs = tokenizer(text, return_tensors="pt") # 前向传播得到输出 with torch.no_grad(): outputs = model(**inputs) # 提取最后一层注意力权重 last_layer_attn = outputs.attentions[-1] # 形状说明:(批量大小, 注意力头数量, 序列长度, 序列长度)
如果要绘制热力图,可以从last_layer_attn里取出单个样本、单个注意力头的权重矩阵(比如last_layer_attn[0][0].numpy()),再用seaborn的heatmap函数可视化即可。
内容的提问来源于stack exchange,提问作者Mara de Jess Garcia Santiago
相关产品推荐
相关产品推荐

