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

如何从Bert模型输出中获取注意力部分用于关键词提取?

解决BERT模型输出注意力权重为None的问题

你遇到的核心问题是:默认加载的BERT模型不会返回注意力权重,必须显式开启输出注意力的配置。

直接修改模型初始化代码,添加output_attentions=True参数就行,下面是修正后的完整代码:

from transformers import BertTokenizer, BertModel
import torch

tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
# 关键:加载模型时指定output_attentions=True
model = BertModel.from_pretrained("bert-base-uncased", output_attentions=True)
sentence = "This is a sentence"

# 用encode_plus简化输入处理,直接得到模型需要的张量
inputs = tokenizer.encode_plus(
    sentence,
    return_tensors="pt",
    add_special_tokens=True  # 自动添加[CLS]和[SEP],符合BERT标准输入格式
)

with torch.no_grad():
    output = model(**inputs)
attention_scores = output.attentions
print(attention_scores)  # 现在会输出各层的注意力权重了

补充说明:

  • output_attentions=True会让模型在输出中包含所有注意力层的权重,它是一个列表,每个元素对应BERT某一层的注意力矩阵(形状一般为(batch_size, num_heads, seq_len, seq_len))
  • 输入处理时必须包含[CLS]和[SEP]特殊令牌,这是BERT要求的标准输入格式,用encode_plus自动处理比手动分词转ID更稳妥
  • 不管是bert-base-uncased还是bert-large-uncased,只要添加该参数,都能正常输出注意力权重

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:28:35