1

sentence_bleu结合方法 7使用 NLTK函数时SmoothingFunction,最高得分为1.1167470964180197. 而 BLEU 分数被定义为介于0和之间1

此分数显示与参考完美匹配。我正在使用方法 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

我做错了什么,这是预期的行为还是平滑功能的实现中存在错误?

4

1 回答 1

1

看起来这个实现至少与 Chen and Cherry, 2014 一致。他们建议平均n-1, n, n+1-gram 计数。也定义m0_primem1 + 1(所以在我们的例子中它将是 2,这会破坏我们的计算)。

我从这里method5使用(由 使用) 。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

于 2019-08-26T21:08:56.603 回答