код:
import nltk
from nltk.translate.bleu_score import sentence_bleu
score1 = sentence_bleu(ref1, cand)
Как я могу игнорировать штраф за краткость из рассчитанного здесь балла BLEU?
код:
import nltk
from nltk.translate.bleu_score import sentence_bleu
score1 = sentence_bleu(ref1, cand)
Как я могу игнорировать штраф за краткость из рассчитанного здесь балла BLEU?
Если вы посмотрите на исходный код в NLTK, вы увидите, что штраф за краткость жестко запрограммирован в вычислении непосредственно перед возвратом окончательной оценки в следующей строке.
s = bp * math.exp(math.fsum(s))
Конечно, вы можете скопировать и изменить исходный код. Также существует функция breivity_penalty
, которая позволяет вам вычислить это самостоятельно и снова разделить счет.
Также имейте в виду, что реализация BLEU в NLTK отличается от исходной эталонной реализации, которая недавно была полностью реплицирована в sacrebleu пакет. Основная проблема заключается в том, что эталонная реализация BLEU использовала нестандартные правила токенизации, которые NLTK не реализует. Во всей текущей литературе по машинному переводу баллы BLEU приводятся с использованием сакребле.
С sacrebleu вы можете получить уровень предложения BLEU следующим образом:
import sacrebleu
bleu = sacrebleu.sentence_bleu("I am the walrus.", ["I am the walrus."])
Результатом является кортеж, который содержит окончательную оценку, а также отдельные компоненты: точность n-граммов и штраф за краткость.