НЛП — оценка BLEU для оценки нейронного машинного перевода — Python
Нейронный машинный перевод (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 и поняли его математику.