BertScore对完全无关句子给出高分的异常问题咨询
BERTScore给完全无关句子高分的原因及解决办法
问题原因
BERTScore的核心逻辑是基于预训练语言模型(如BERT)的词嵌入余弦相似度计算:
- Precision:候选句中每个词,在参考句的所有词嵌入里找到最相似的那个,取平均值
- Recall:参考句中每个词,在候选句的所有词嵌入里找到最相似的那个,取平均值
- F1是Precision和Recall的调和平均
当候选句是单个高频通用词(比如"sky")时,预训练BERT的词向量中,这类高频词的嵌入可能和参考句里的某些词(哪怕语义看似无关)存在非零余弦相似度;再加上参考句长、候选句极短,Recall是参考句所有词与"sky"相似度的平均,而BERT预训练的词向量本身存在一定分布重叠,最终导致分数虚高——这是BERTScore在极端长度差异+语义完全无关场景下的固有局限。
解决办法
- 启用基线缩放:调用
score函数时添加rescale_with_baseline=True参数,这个功能会用随机生成的句子对计算基线分数,再对当前分数进行缩放,能有效拉低无关句子的分数。示例:refs = ["Ladies in a kitchen laughing at the camera while one grates cheese."] cands=["sky"] P,R,F = score(cands=cands,refs=refs,lang='en', rescale_with_baseline=True) print(P,R,F) - 明确适用场景:BERTScore更适合评估语义相近、长度差异不大的句子对(比如机器翻译、文本摘要的输出与参考),不适合用来判断完全无关的短文本和长文本的相关性,这类场景建议结合Zero-shot语义分类或专门的语义相似度模型。
- 更换模型或调整参数:尝试使用更大规模的预训练模型(如
model_type='bert-large-uncased'),更大的模型通常语义区分度更强;也可以调整n_gram参数(比如设置n_gram=2),让模型考虑词组层面的匹配,减少单个词匹配的偶然性。 - 结合其他指标:搭配BLEU、ROUGE等传统指标,或者BLEURT、MoverScore这类更侧重整体语义的指标,综合判断文本相关性。
内容的提问来源于stack exchange,提问作者Rafik Bouloudene
相关产品推荐
相关产品推荐

