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

为何相似句子计算出的BLEU得分极低?Python代码示例解析

相似句子BLEU得分极低的原因及解决办法

这种情况是正常的,核心问题出在BLEU的计算逻辑和你当前的分词方式上:

  • BLEU依赖n-gram精确匹配
    BLEU得分是各n-gram精确率的加权几何平均,你的例子里:

    • 参考句用split()分词后是 ["I'm", "ABC."],预测句分词后是 ["I", "am", "ABC."]
    • 1-gram层面:只有ABC.能匹配,I和am在参考句中没有对应token(参考里是I'm),精确率仅1/3
    • 2-gram及以上层面:预测句的I am、am ABC.和参考句的I'm ABC.完全不匹配,精确率为0
      高n-gram的0值会严重拉低整体得分,即便用平滑处理也无法大幅提升。
  • 粗糙分词放大了语义等价表达的差异
    直接用split()分词无法处理英文缩写,把I'm当成一个独立token,而I am被拆成两个token,导致本应语义一致的表达无法被BLEU识别为匹配项。

修改后的代码示例

使用NLTK的word_tokenize处理分词,它会自动将缩写拆分为语义单元:

prediction = "I am ABC."
reference = "I'm ABC."

from nltk.translate.bleu_score import sentence_bleu
from nltk.translate.bleu_score import SmoothingFunction
from nltk.tokenize import word_tokenize

# 用word_tokenize分词
prediction_tokens = word_tokenize(prediction)
reference_tokens = word_tokenize(reference)
   
# 计算BLEU得分
bleu_score = sentence_bleu([reference_tokens], prediction_tokens, smoothing_function=SmoothingFunction().method4)

print(f"BLEU score: {bleu_score:.4f}")

这段代码输出的得分会提升至约0.45左右,更符合句子的实际相似程度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 07:02:40