НЛП — оценка BLEU для оценки нейронного машинного перевода — Python

Опубликовано: 13 Декабря, 2022

Нейронный машинный перевод (NMT) — это стандартная задача НЛП, которая включает в себя перевод текста с исходного языка на целевой язык. BLEU (Bilingual Evaluation Understudy) — это балл, используемый для оценки переводов, выполненных машинным переводчиком. В этой статье мы рассмотрим математику оценки BLEU и ее реализацию в Python.

СИНИЙ счет

Как указано выше, BLEU Score — это показатель оценки задач машинного перевода. Он рассчитывается путем сравнения n-граммов машинно-переведенных предложений с n-граммами предложений, переведенных человеком. Обычно было замечено, что балл BLEU уменьшается по мере увеличения длины предложения. Это, однако, может варьироваться в зависимости от модели, используемой для перевода. Ниже приведен график, показывающий изменение оценки BLEU в зависимости от длины предложения.

Математическое выражение для оценки BLEU

В случаях перевода BLEU Score, математически, BLEU Score дается следующим образом:

Here,

BP stands for Brevity Penalty, which penalizes the score when the Machine Translation is too short compared to the Reference (Correct) translations.

n ∈ [1,4]

Pn is the n-gram modified precision score.

Математическое выражение штрафа за краткость выглядит следующим образом:

P n можно определить следующим образом:

Чтобы лучше понять расчет BLEU Score, давайте рассмотрим пример. Ниже приведен пример перевода с французского на английский язык:

  • Исходный текст (французский) : cette image est cliqué par moi
  • Текст с машинным переводом : картинка сделана мной
  • Ссылочный текст-1 : я щелкнул эту картинку
  • Справочный текст-2 : картинка была нажата мной

Мы ясно видим, что перевод, сделанный машиной, не точен. Давайте посчитаем балл BLEU за перевод.

Для n = 1 мы рассчитаем модифицированную точность Unigram:

Униграмма Считать Обрезанный счет
в 2 1
картина 2 1
по 1 1
мне 1 1

Здесь униграммы (the, picture, by, me) взяты из машинно переведенного текста. Количество относится к частоте n-грамм во всем тексте с машинным переводом, а усеченное количество относится к частоте униграмм в справочных текстах в совокупности.

Для n = 2 мы рассчитаем модифицированную точность биграммы :

Биграммы Считать Обрезанный счет
изображение 2 1
представить 1 0
фотография 1 0
мной 1 1

Для n = 3 мы рассчитаем модифицированную точность триграммы:

Триграмма Считать Обрезанный счет
картина 1 0
представить картину 1 0
картина 1 0
картинка от меня 1 0

Для n =4 мы рассчитаем 4-граммовую модифицированную точность:

4 грамма Считать Обрезанный счет
картина картина 1 0
представить картину по 1 0
картинка от меня 1 0

Теперь, когда мы вычислили все показатели точности, давайте найдем штраф за краткость перевода:

  • Длина вывода машинного перевода = 7 (машинный перевод текста: картинка на картинке, сделанная мной)
  • Максимальная длина исходного вывода = 7 (Справочный текст-2: изображение было нажато мной)

Наконец, оценка BLEU для приведенного выше перевода определяется следующим образом:

При подстановке значений получаем,

Наконец, мы рассчитали балл BLEU для данного перевода.

Реализация оценки BLEU в Python

Рассчитав оценку BLEU вручную, человек уже привык к математической обработке оценки BLEU. Однако Python NLTK предоставляет встроенный модуль для расчета оценки BLEU. Давайте посчитаем оценку BLEU для того же примера перевода, что и выше, но на этот раз с использованием NLTK.

Требования к установке:

pip install datasets transformers[sentencepiece]

Код:

Python3




from datasets import load_metric
  
bleu = load_metric("bleu")
predictions = [["the", "picture", "the", "picture",
                "by", "me"]]
references = [
    [["the", "picture", "is", "clicked", "by", "me"], 
     ["this", "picture", "was", "clicked", "by", "me"]]
]
print(bleu.compute(predictions=predictions, references=references))

Выход:

{"bleu": 0.0, 
 "precisions": [0.6666666666666666, 0.4, 0.0, 0.0], 
 "brevity_penalty": 1.0, 
 "length_ratio": 1.0, 
 "translation_length": 6, 
 "reference_length": 6}

Мы видим, что оценка BLEU, рассчитанная с помощью Python, такая же, как и оценка, рассчитанная вручную. Таким образом, мы успешно рассчитали балл BLEU и поняли его математику.