对 BLEU 不是特别熟,所以我不确定 4-gram 是不是你所说的 BLEU-4 得分,但你的代码权重是正确的单一 4 元得分。
不过 4-gram 报错的原因貌似挺明显的:你的 reference 中的任何一句都不包含 candidate 中的任何一个 4 元词组,所以错误信息里面也说了 “Sentence contains 0 counts of 4-gram overlaps.”
手机上发代码不太方便,简单解释一下为什么得到 1.0 这个不合理的结果(BLEU scores might be undesirable):首先是没有 4 元词组这个问题导致你计算 4-gram 时默认的 smoothing_function 返回 0(其实是没有得分),得分变换后得到 1.0;第二就是你第四个 reference 和 candidate 长度相等,导致 brevity_penalty=1。以上两者相乘得到了 1.0。
yunhai_luo,发表于 2018-4-23 05:30:26