使用NLTK计算BLEU得分异常偏低及权重影响的原因咨询
关于NLTK中BLEU分数计算的疑问解答
为什么短句子默认权重得分极低?
NLTK的sentence_bleu函数默认权重是(0.25, 0.25, 0.25, 0.25),也就是同时对1-gram(单个词)、2-gram(连续两个词)、3-gram(连续三个词)、4-gram(连续四个词)的匹配率做几何平均。
你第一个例子里,参考句和候选句只有第三个词不同:
- 1-gram匹配率是3/4=0.75
- 2-gram里,
['is','ae']和候选的['is','ad']不匹配,匹配率为2/3≈0.666 - 3-gram里,
['this','is','ae']和['is','ae','test']都和候选不匹配,匹配率为1/2=0.5 - 4-gram完全不匹配,匹配率为0
几何平均的特点是只要有一项为0,结果就会趋近于0,所以最终得到了接近0的极小值1.0547686614863434e-154。
为什么加weights=[1]能得到合理的0.75?
weights=[1]表示只计算1-gram的匹配率,也就是只看单个词的匹配情况。你的候选句4个词里对了3个,3/4=0.75,这就是直接反映单词匹配度的结果。
长句子默认权重得分仍然偏低的原因
长句子例子里,虽然只有一个词错误,但这个错误会影响所有包含该词的高n-gram:
- 1-gram匹配率是6/7≈0.857
- 2-gram里,
['is','ae']不匹配,匹配率为5/6≈0.833 - 3-gram里,
['this','is','ae']、['is','ae','test']都不匹配,匹配率为3/5=0.6 - 4-gram里,前三个包含
ae的4-gram都不匹配,匹配率为1/4=0.25
默认权重下,这四个n-gram的匹配率要做几何平均,低匹配率的高n-gram会大幅拉低整体分数,所以最终得到0.488左右的结果。
总结
BLEU分数的计算逻辑高度依赖你设置的n-gram权重:
- 短句子或局部词错误的场景,默认的4-gram均衡权重很容易因为高n-gram匹配率骤降导致分数失真
- 如果只关注单词层面的匹配,用
weights=[1]就够了 - 如果需要兼顾局部连续词的匹配,可以根据句子长度调整权重,比如短句子用
weights=(0.5, 0.5, 0, 0)(只看1-gram和2-gram),避免高n-gram的负面影响
内容的提问来源于stack exchange,提问作者randie pathirage
相关产品推荐
相关产品推荐

