为何相似句子计算出的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
相关产品推荐
相关产品推荐

