logo

NLP – Wynik BLEU do oceny tłumaczenia maszynowego neuronowego – Python

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?

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ąż pyton

Tutaj,

  • 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_ijest 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 precyzjap_ijest faktycznie obliczany jako stosunek liczby N -gramy w tłumaczeniu kandydata, które dokładnie pasują N -gramy w dowolnym tłumaczeniu referencyjnym, przycięte przez liczbę N -gramy w tłumaczeniu kandydata.

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_ito 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}_ito maksymalna liczba wystąpień konkretnego n-gramu rzędu i znalezionego w dowolnym pojedynczym tłumaczeniu referencyjnym.
  • ext{candidate-n-grams}_ito 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:

UnigramPolicz w tłumaczeniu maszynowym

Maksymalna liczba w ref

Obcięta liczba =
min (liczba w MT, maksymalna liczba w Ref)
the2

1

1
zdjęcie2

1

jak otworzyć plik json
1
przez1

1

1
Ja1

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.

P_1 = frac{ ext{Clipped Count}}{ ext{Count in MT}} = frac{1+1+1+1}{2+2+1+1} =frac{4}{6} = frac{2}{3}

Bigram zmodyfikowana precyzja

Dla n = 2 , obliczymy Bigram zmodyfikowana precyzja :

BiggramyLicz w MT

Maksymalna liczba w ref

Obcięta liczba =
min (liczba w MT, maksymalna liczba w Ref)
zdjęcie2

1

1
wyobraź sobie1

0

0
zdjęcie wg1

0

0
przeze mnie1

1

1

P_2 = frac{ ext{Clip Count}}{ ext{Count in MT}} = frac{2}{5}

Zmodyfikowana precyzja Trigramu

Dla n = 3 , obliczymy Zmodyfikowana precyzja Trigramu:

TrygramLicz w MT

Maksymalna liczba w ref

Java dodaj do tablicy
Obcięta liczba =
min (liczba w MT, maksymalna liczba w Ref)
zdjęcie1

0

0
wyobraź sobie zdjęcie1

0

0
zdjęcie wg1

0

0
zdjęcie mojego autorstwa1

0

0

P_3 = frac{0+0+0+0}{1+1+1+1} =0.0

4-gramowa zmodyfikowana precyzja

Dla n =4 , obliczymy 4-gramowa zmodyfikowana precyzja:

4 gramyLiczyć

Maksymalna liczba w ref

Obcięta liczba =
min (liczba w MT, maksymalna liczba w Ref)
zdjęcie zdjęcie1

0

0
zrób zdjęcie według1

0

0
zdjęcie mojego autorstwa1

0

konwersja int na string w Javie
0

P_4 = frac{0+0+0}{1+1+1} =0.0

Kara za zwięzłość obliczania

Teraz obliczyliśmy wszystkie wyniki precyzji, znajdźmy karę za zwięzłość tłumaczenia:

Brevity Penalty = min(1, frac{Machine,Translation,Output,Length}{Maximum,Reference,Output,Length})

  • 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)

Brevity Penalty (BP) = min(1, frac{6}{6}) = 1

Obliczanie wyniku BLEU

Ostatecznie punktacja BLEU dla powyższego tłumaczenia jest określona wzorem:

BLEU Score = BP * exp(sum_{n=1}^{4} w_i * log(p_i))

Podstawiając wartości otrzymujemy,

ext{BLEU Score} = 1 * exp(0.25*ln(2/3) + 0.25*ln(2/5) + 0*ln(0) + 0*ln(0))

ext{BLEU Score} = 0.718

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.>