Нейронний машинний переклад (NMT) є стандартним завданням в НЛП що передбачає переклад тексту з мови оригіналу на мову перекладу. BLEU (двомовне оцінювання) це бал, який використовується для оцінки перекладів, виконаних машинним перекладачем. У цій статті ми побачимо математику, що лежить в основі оцінки BLEU, і її реалізацію в Python.
Зміст
- Що таке BLEU Score?
- Математичний вираз для оцінки BLEU
- Як обчислити бал BLEU?
- Реалізація оцінки BLEU у Python
Що таке BLEU Score?
Як зазначено вище, BLEU Score є показником оцінювання завдань машинного перекладу. Він розраховується шляхом порівняння n-грами речень, перекладених машиною, до n-грами речень, перекладених людиною. Зазвичай спостерігається, що бал BLEU зменшується зі збільшенням довжини речення. Однак це може відрізнятися залежно від моделі, яка використовується для перекладу. Нижче наведено графік, що зображує зміну балу BLEU залежно від довжини речення.
Математичний вираз для оцінки BLEU
Математично оцінка BLEU надається таким чином:
BLEU Score = BP * exp(sum_{i=1}^{N}(w_i * ln(p_i))
arraylist.sortтут,
- BP виступає за Штраф за стислість
w_i це вага для n-грамової точності порядку i (зазвичай ваги рівні для всіх i)p_i є модифікованим n-грамовим показником точності порядку i.- N — це максимальний порядок n-грамів, який слід враховувати (зазвичай до 4)
Змінена точність n-грам (p_i )
Змінена точність
p_i = frac{ ext{Count Clip}(matches_i, ext{max-ref-count}_i)}{ ext{candidate-n-grams}_i}
тут,
- Count Clips — це функція, яка обрізає кількість відповідних n-грамів (
matches_i ) за максимальною кількістю n-грамів у всіх еталонних перекладах (ext{max-ref-count}_i .matches_i це кількість n-грамів порядку i, які відповідають точно між кандидатським перекладом і будь-яким із еталонних перекладів.ext{max-ref-count}_i це максимальна кількість входжень конкретної n-грами порядку i, знайдена в будь-якому перекладі посилання.ext{candidate-n-grams}_i це загальна кількість n-грамів порядку i, присутніх у варіанті перекладу.
Штраф за стислість (BP)
Штраф за стислість карає переклади, які коротші, ніж переклади посилання. Математичний вираз для Штраф за стислість надається таким чином:
BP = exp(1- frac{r}{c}) тут,
- r — довжина перекладу-кандидата
- c – середня довжина еталонних перекладів.
Як обчислити бал BLEU?
Для кращого розуміння розрахунку BLEU Score розглянемо приклад. Нижче наведено приклад перекладу з французької на англійську:
- Початковий текст (французькою) : це зображення клацнуло мною
- Машинний переклад тексту : картинка моя картинка
- Довідковий текст-1 : це зображення клацнуло мною
- Довідковий текст-2 : на картинку клацнув я
Ми чітко бачимо, що переклад, виконаний машиною, є неточним. Давайте обчислимо бал BLEU для перекладу.
Unigram Modified Precision
для n = 1, ми розрахуємо Unigram Modified Precision:
| Уніграма | Граф у машинному перекладі | Максимальна кількість у Ref | Обрізана кількість = хв (кількість у тоннах, максимальна кількість у посиланні) |
|---|---|---|---|
| в | 2 | 1 C# дата і час | 1 |
| картина | 2 | 1 | 1 |
| за | 1 | 1 | 1 |
| мене | 1 | 1 | 1 |
Тут уніграми (the, picture, by, me) узяті з машинно перекладеного тексту. Підрахунок означає частоту n-грамів у всьому тексті машинного перекладу, а обрізаний підрахунок означає частоту уніграми в довідкових текстах разом.
Модифікована точність біграми
для n = 2 , розрахуємо Модифікована точність біграми :
| Біграми | Рахувати в тоннах | Макс. кількість у посил | Обрізана кількість = хв (кількість у тоннах, максимальна кількість у посиланні) |
|---|---|---|---|
| фото | 2 | 1 | 1 |
| малюнок | 1 | 0 | 0 |
| малюнок за | 1 | 0 | 0 |
| мною | 1 | 1 | 1 |
Триграма модифікованої точності
для n = 3 , розрахуємо Модифікована точність триграми:
array.sort у java
| Триграма | Рахувати в тоннах | Макс. кількість у посил | Обрізана кількість = хв (кількість у тоннах, максимальна кількість у посиланні) |
|---|---|---|---|
| малюнок | 1 | 0 | 0 |
| малюнок малюнок | 1 | 0 | 0 |
| малюнок за | 1 | 0 | 0 |
| малюнок мною | 1 | 0 | 0 |
4-грамова модифікована точність
для n =4 , розрахуємо 4-грамова модифікована точність:
| 4-грамовий | Рахувати | Макс. кількість у посил | Обрізана кількість = хв (кількість у тоннах, максимальна кількість у посиланні) |
|---|---|---|---|
| картина картина | 1 | 0 | 0 |
| намалюйте картину | 1 | 0 | 0 |
| картина від мене | 1 | 0 | 0 |
Обчислення штрафу за стислість
Тепер ми обчислили всі показники точності, давайте знайдемо штраф за стислість для перекладу:
- Довжина результату машинного перекладу = 6 (Текст машинного перекладу: малюнок малюнок моїм)
- Максимальна вихідна довжина посилання = 6 (Довідковий текст-2: на картинку клацнув я)
Обчислення оцінки BLEU
Нарешті, оцінка BLEU для наведеного вище перекладу визначається так:
перетворення int на рядок у java
Підставляючи значення, отримуємо,
Нарешті, ми розрахували бал BLEU для даного перекладу.
Реалізація оцінки BLEU у Python
Розрахувавши оцінку BLEU вручну, ви вже звикли до математичної обробки оцінки BLEU. Однак Python NLTK забезпечує вбудований модуль для розрахунку оцінки BLEU. Давайте обчислимо оцінку BLEU для того самого прикладу перекладу, що й вище, але цього разу з використанням NLTK.
код:
Python3
from> nltk.translate.bleu_score>import> sentence_bleu> # Define your desired weights (example: higher weight for bi-grams)> weights>=> (>0.25>,>0.25>,>0>,>0>)># Weights for uni-gram, bi-gram, tri-gram, and 4-gram> # Reference and predicted texts (same as before)> reference>=> [[>'the'>,>'picture'>,>'is'>,>'clicked'>,>'by'>,>'me'>],> >[>'this'>,>'picture'>,>'was'>,>'clicked'>,>'by'>,>'me'>]]> predictions>=> [>'the'>,>'picture'>,>'the'>,>'picture'>,>'by'>,>'me'>]> # Calculate BLEU score with weights> score>=> sentence_bleu(reference, predictions, weights>=>weights)> print>(score)> |
Output: 0.7186082239261684 We can see that the BLEU score computed using Python is the same as the one computed manually. Thus, we have successfully calculated the BLEU score and understood the mathematics behind it.>