NLTK sentence_bleu 方法 7 给出的分数高于 1

NLTK sentence_bleu method 7 gives scores above 1

当结合SmoothingFunction方法7使用NLTKsentence_bleu函数时,最高分是1.1167470964180197。而 BLEU 分数被定义为介于 01 之间。

此分数显示为与参考完美匹配。我正在使用方法 7,因为我并不总是有长度为 4 的句子,有些可能更短。使用方法 5 给出相同的结果。其他方法确实给出了 1.0 作为满分。

当我使用单个参考和候选时出现,例如:

from nltk.translate.bleu_score import sentence_bleu, SmoothingFunction
cc = SmoothingFunction()
reference = ['overofficious 98461 54363 39016 78223 52180']
candidate = 'overofficious 98461 54363 39016 78223 52180'
sentence_bleu(reference, candidate, smoothing_function=cc.method7)

这给出了分数:1.1167470964180197

我是不是做错了什么,这是预期的行为还是平滑函数的实现存在错误?

看起来这个实现至少与 Chen 和 Cherry,2014 年一致。他们建议平均 n-1, n, n+1 克计数。还将 m0_prime 定义为 m1 + 1(因此在我们的例子中它将是 2,这会破坏我们的计算)。

我正在使用来自 heremethod5(它被 method7 使用)。

cc = SmoothingFunction()
references = ['overofficious 98461 54363 39016 78223 52180'.split()]
candidate = 'overofficious 98461 54363 39016 78223 52180'.split()
p_n = [Fraction(1, 1)] * 4
p_n5 = cc.method5(p_n, references, candidate, len(candidate))

输出:

[Fraction(4, 3), Fraction(10, 9), Fraction(28, 27), Fraction(82, 81)]

我们可以这样计算4/3(2 + 1 + 1) / 310/9 = (4/3 + 1 + 1) / 3 等等。