Как рассчитать BLEU Score без штрафа за краткость

код:

import nltk
from nltk.translate.bleu_score import sentence_bleu 
score1 = sentence_bleu(ref1, cand) 

Как я могу игнорировать штраф за краткость из рассчитанного здесь балла BLEU?


person NobinPegasus    schedule 10.04.2021    source источник


Ответы (1)


Если вы посмотрите на исходный код в 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-граммов и штраф за краткость.

person Jindřich    schedule 12.04.2021