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

如何从BERT模型获取不同句子中相同短语词嵌入的余弦相似度

BERT语境化词嵌入提取与短语相似度计算方案

1. BERT输出层选择建议

不同层的BERT输出捕捉的语义特征维度不同,可根据你的场景选择:

  • 底层(编码器1-3层,对应hidden_states索引1-3):捕捉词法、句法特征,适合语义差异极小的短语匹配场景
  • 中间层(编码器4-8层,对应hidden_states索引4-8):平衡句法特征与上下文语义,是语境化短语相似度计算的首选,你需要识别同一短语在不同语境下的语义差异,直接选用这一区间的单层输出、或多层加权平均效果最优
  • 高层(编码器9-12层,对应hidden_states索引9-12):捕捉深度上下文语义与全局句义,适合歧义性极强的场景,比如同一短语指代完全不同的实体(如“苹果”分别指水果、科技品牌)

2. 具体计算步骤(针对你给出的示例)

2.1 分词与短语位置对齐

BERT采用WordPiece分词规则,首先需要定位目标短语在两个句子中对应的token索引:

  • 句子1I like living in New York.的分词结果为:<[BOS_never_used_51bce0c785ca2f68081bfa7d91973934]>, I, like, living, in, New, York, ., <[BOS_never_used_51bce0c785ca2f68081bfa7d91973934]>,「New York」对应索引5、6
  • 句子2New York is a prosperous city.的分词结果为:<[BOS_never_used_51bce0c785ca2f68081bfa7d91973934]>, New, York, is, a, prosperous, city, ., <[BOS_never_used_51bce0c785ca2f68081bfa7d91973934]>,「New York」对应索引1、2
    如果短语被拆分为3个及以上子词,把所有对应位置的token都纳入后续计算即可

2.2 短语嵌入聚合与相似度计算

我们选用中间第7层编码器输出作为词嵌入,对短语包含的token嵌入取均值得到短语级嵌入,再计算余弦相似度,示例代码如下:

from transformers import BertTokenizer, BertModel
import torch
from torch.nn.functional import cosine_similarity

# 加载预训练模型与分词器
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased', output_hidden_states=True)
model.eval()

sent1 = 'I like living in New York.'
sent2 = 'New York is a prosperous city.'

# 输入预处理
inputs1 = tokenizer(sent1, return_tensors='pt')
inputs2 = tokenizer(sent2, return_tensors='pt')

# 推理获取所有层隐藏状态
with torch.no_grad():
    outputs1 = model(**inputs1)
    outputs2 = model(**inputs2)

# 取第7层编码器输出(hidden_states索引0为初始嵌入层,1-12对应12层编码器输出)
hidden1 = outputs1.hidden_states[7][0]
hidden2 = outputs2.hidden_states[7][0]

# 聚合得到短语嵌入
phrase1_emb = (hidden1[5] + hidden1[6]) / 2
phrase2_emb = (hidden2[1] + hidden2[2]) / 2

# 计算余弦相似度
sim_score = cosine_similarity(phrase1_emb.unsqueeze(0), phrase2_emb.unsqueeze(0)).item()
print(f"两语境下「New York」的余弦相似度为:{sim_score:.4f}")

2.3 结果说明

你给出的示例中两个「New York」的语境差异极小,均指代纽约市,最终计算得到的相似度通常在0.85以上;如果是歧义性强的短语,不同语境下的相似度会降至0.5以下。

内容的提问来源于stack exchange,提问作者Mark J.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:45:04