Метод NLTK Offering_bleu 7 дает оценку выше 1

При использовании функции NLTK sentence_bleu в сочетании с SmoothingFunction методом 7 максимальная оценка составляет 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

Я что-то делаю не так, это ожидаемое поведение или ошибка в реализации функции сглаживания?


person Rink Stiekema    schedule 15.06.2019    source источник


Ответы (1)


Похоже, что эта реализация, по крайней мере, согласуется с Ченом и Черри, 2014. Они предложили усреднить n-1, n, n+1 грамм. Также определено m0_prime как m1 + 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) / 3; 10/9 = (4/3 + 1 + 1) / 3 и так далее.

person irudyak    schedule 26.08.2019