You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解读BERT模型last layer最后attention head的注意力权重矩阵?

解读BERT最后一层最后注意力头的权重矩阵

核心特性拆解

  • 每行求和为1:注意力权重是经过Softmax归一化的分配系数,每行对应一个目标token(记为token_i),行内每个值代表token_i在生成自身语义表征时,分配给其他所有token(包括自身)的注意力占比。归一化到总和为1是为了让权重符合概率分布逻辑,确保注意力的分配是合理的比例关系。
  • 矩阵非对称:这是完全正常的现象。token_i对token_j的关注度,和token_j对token_i的关注度没有强制相等的逻辑。以你使用的ProtBERT为例,蛋白质序列中某个氨基酸token可能重点关注相邻的疏水残基,但那个残基可能更关注下游的功能修饰位点,这种单向的功能关联就会导致矩阵不对称。

结合ProtBERT的具体解读建议

从你提供的热图来看(颜色越深权重越高):

  • 对角线区域颜色偏深:说明多数token会优先关注自身,这是Transformer模型的普遍特性——自身的基础信息是生成表征的核心。
  • 局部非对角线深色块:对应蛋白质序列中空间相邻或功能协同的氨基酸对,ProtBERT预训练在海量蛋白质数据上,注意力头通常会学习到蛋白质结构里的残基接触关系、催化位点的协同作用这类生物特征。

提取代码修正说明

你代码里存在变量未定义的小问题,修正后的完整提取逻辑如下:

tokenizer = BertTokenizer.from_pretrained('Rostlab/prot_bert')
inputs = tokenizer(input_text, return_tensors='pt') 
attention_mask = inputs['attention_mask']
outputs = model(inputs['input_ids'], attention_mask=attention_mask)
# 获取所有层的注意力张量,outputs.attentions是元组,每个元素对应一层的注意力
all_attentions = outputs.attentions
# 取最后一层注意力:形状为(批量大小, 注意力头数, 序列长度, 序列长度)
last_layer_attention = all_attentions[-1]
# 提取最后一个注意力头的权重矩阵,转为numpy数组方便后续分析
last_head_attention = last_layer_attention[0, -1, :, :].detach().cpu().numpy()
# 后续可结合tokenizer的token列表,将矩阵行列与具体氨基酸token对应

内容的提问来源于stack exchange,提问作者Chiara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 18:37:58