Neuronowe tłumaczenie maszynowe (NMT) jest standardowym zadaniem w NLP polegająca na przetłumaczeniu tekstu z języka źródłowego na język docelowy. BLEU (dubler oceny dwujęzycznej) to wynik używany do oceny tłumaczeń wykonanych przez tłumacza maszynowego. W tym artykule przyjrzymy się matematyce stojącej za wynikiem BLEU i jej implementacją w Pythonie.
Spis treści
- Co to jest wynik BLEU?
- Wyrażenie matematyczne dla wyniku BLEU
- Jak obliczyć wynik BLEU?
- Implementacja BLEU Score w Pythonie
Co to jest wynik BLEU?
Jak wspomniano powyżej, wynik BLEU jest wskaźnikiem oceny zadań tłumaczenia maszynowego. Oblicza się go poprzez porównanie n-gramów zdań przetłumaczonych maszynowo na n-gram zdań przetłumaczonych przez człowieka. Zwykle zaobserwowano, że wynik BLEU maleje wraz ze wzrostem długości zdania. Może się to jednak różnić w zależności od modelu użytego do tłumaczenia. Poniżej znajduje się wykres przedstawiający zmianę wyniku BLEU w zależności od długości zdania.
Wyrażenie matematyczne dla wyniku BLEU
Matematycznie wynik BLEU jest podawany w następujący sposób:
BLEU Score = BP * exp(sum_{i=1}^{N}(w_i * ln(p_i))
anakonda kontra wąż pytonTutaj,
- BP oznacza Kara za zwięzłość
w_i jest wagą dla n-gramowej precyzji rzędu i (zwykle wagi są równe dla wszystkich i)p_i jest n-gramowym zmodyfikowanym wynikiem precyzji rzędu i.- N to maksymalny rząd n-gramów do rozważenia (zwykle do 4)
Zmodyfikowana precyzja n-gramowa (p_i )
Zmodyfikowana precyzja
p_i = frac{ ext{Count Clip}(matches_i, ext{max-ref-count}_i)}{ ext{candidate-n-grams}_i}
Tutaj,
- Count Clips to funkcja, która odcina liczbę pasujących n-gramów (
matches_i ) przez maksymalną liczbę n-gramów we wszystkich tłumaczeniach referencyjnych (ext{max-ref-count}_i .matches_i to liczba n-gramów rzędu i, które pasują Dokładnie między tłumaczeniem kandydującym a którymkolwiek z tłumaczeń referencyjnych.ext{max-ref-count}_i to maksymalna liczba wystąpień konkretnego n-gramu rzędu i znalezionego w dowolnym pojedynczym tłumaczeniu referencyjnym.ext{candidate-n-grams}_i to całkowita liczba n-gramów porządku i występujących w tłumaczeniu kandydującym.
Kara za zwięzłość (BP)
Kara za zwięzłość karze tłumaczenia krótsze niż tłumaczenia referencyjne. Wyrażenie matematyczne dla Kara za zwięzłość podaje się następująco:
BP = exp(1- frac{r}{c}) Tutaj,
- r jest długością potencjalnego tłumaczenia
- c to średnia długość tłumaczeń referencyjnych.
Jak obliczyć wynik BLEU?
Aby lepiej zrozumieć sposób obliczania BLEU Score, weźmy przykład. Poniżej przedstawiono przypadek tłumaczenia z francuskiego na angielski:
- Tekst źródłowy (w języku francuskim) : ten obraz został kliknięty przeze mnie
- Tekst przetłumaczony maszynowo : zdjęcie zdjęcie mojego autorstwa
- Tekst referencyjny-1 : to zdjęcie zostało kliknięte przeze mnie
- Tekst referencyjny-2 : zdjęcie zostało kliknięte przeze mnie
Wyraźnie widać, że tłumaczenie wykonane przez maszynę nie jest dokładne. Obliczmy punktację BLEU dla tłumaczenia.
Unigram zmodyfikowana precyzja
Dla n = 1, obliczymy Zmodyfikowana precyzja Unigramu:
| Unigram | Policz w tłumaczeniu maszynowym | Maksymalna liczba w ref | Obcięta liczba = min (liczba w MT, maksymalna liczba w Ref) |
|---|---|---|---|
| the | 2 | 1 | 1 |
| zdjęcie | 2 | 1 jak otworzyć plik json | 1 |
| przez | 1 | 1 | 1 |
| Ja | 1 | 1 | 1 |
Tutaj unigramy (obrazek, ja) zostały wzięte z tekstu przetłumaczonego maszynowo. Liczba odnosi się do częstotliwości n-gramów w całym tekście przetłumaczonym maszynowo, a liczba przyciętych odnosi się do łącznej częstotliwości występowania unigramów w tekstach referencyjnych.
Bigram zmodyfikowana precyzja
Dla n = 2 , obliczymy Bigram zmodyfikowana precyzja :
| Biggramy | Licz w MT | Maksymalna liczba w ref | Obcięta liczba = min (liczba w MT, maksymalna liczba w Ref) |
|---|---|---|---|
| zdjęcie | 2 | 1 | 1 |
| wyobraź sobie | 1 | 0 | 0 |
| zdjęcie wg | 1 | 0 | 0 |
| przeze mnie | 1 | 1 | 1 |
Zmodyfikowana precyzja Trigramu
Dla n = 3 , obliczymy Zmodyfikowana precyzja Trigramu:
| Trygram | Licz w MT | Maksymalna liczba w ref Java dodaj do tablicy | Obcięta liczba = min (liczba w MT, maksymalna liczba w Ref) |
|---|---|---|---|
| zdjęcie | 1 | 0 | 0 |
| wyobraź sobie zdjęcie | 1 | 0 | 0 |
| zdjęcie wg | 1 | 0 | 0 |
| zdjęcie mojego autorstwa | 1 | 0 | 0 |
4-gramowa zmodyfikowana precyzja
Dla n =4 , obliczymy 4-gramowa zmodyfikowana precyzja:
| 4 gramy | Liczyć | Maksymalna liczba w ref | Obcięta liczba = min (liczba w MT, maksymalna liczba w Ref) |
|---|---|---|---|
| zdjęcie zdjęcie | 1 | 0 | 0 |
| zrób zdjęcie według | 1 | 0 | 0 |
| zdjęcie mojego autorstwa | 1 | 0 konwersja int na string w Javie | 0 |
Kara za zwięzłość obliczania
Teraz obliczyliśmy wszystkie wyniki precyzji, znajdźmy karę za zwięzłość tłumaczenia:
- Długość wyjściowa tłumaczenia maszynowego = 6 (Tekst tłumaczony maszynowo: zdjęcie, zdjęcie mojego autorstwa)
- Maksymalna referencyjna długość wyjściowa = 6 (Tekst referencyjny-2: zdjęcie zostało kliknięte przeze mnie)
Obliczanie wyniku BLEU
Ostatecznie punktacja BLEU dla powyższego tłumaczenia jest określona wzorem:
Podstawiając wartości otrzymujemy,
Na koniec obliczyliśmy wynik BLEU dla danego tłumaczenia.
Implementacja BLEU Score w Pythonie
Po ręcznym obliczeniu wyniku BLEU jesteśmy już przyzwyczajeni do matematycznego obliczania wyniku BLEU. Jednak Python NLTK udostępnia wbudowany moduł do obliczania wyniku BLEU. Obliczmy wynik BLEU dla tego samego przykładu tłumaczenia co powyżej, ale tym razem przy użyciu NLTK.
Kod:
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.>