logo

NLP – BLEU skóre pro hodnocení neuronového strojového překladu – Python

Neural Machine Translation (NMT) je standardním úkolem NLP která zahrnuje překlad textu ze zdrojového jazyka do cílového jazyka. BLEU (Bilingual Evaluation Understudy) je skóre používané k hodnocení překladů provedených strojovým překladačem. V tomto článku uvidíme matematiku za skóre BLEU a jeho implementaci v Pythonu.

Obsah



Co je BLEU skóre?

Jak je uvedeno výše, BLEU skóre je hodnotící metrikou pro úlohy strojového překladu. Vypočítá se porovnáním n-gramů strojově přeložených vět na n-gram vět přeložených člověkem. Obvykle bylo pozorováno, že skóre BLEU klesá s rostoucí délkou věty. To se však může lišit v závislosti na modelu použitém pro překlad. Následuje graf znázorňující variaci skóre BLEU s délkou věty.

Matematický výraz pro skóre BLEU

Matematicky je skóre BLEU dáno následovně:

BLEU Score = BP * exp(sum_{i=1}^{N}(w_i * ln(p_i))



pandy a numpy

Tady,

  • BP znamená Trest za krátkost
  • w_i je hmotnost pro n-gramovou přesnost řádu i (obvykle jsou váhy stejné pro všechna i)
  • p_ije n-gram modifikované skóre přesnosti řádu i.
  • N je maximální řád n-gramů, který je třeba vzít v úvahu (obvykle až 4)

Upravená n-gramová přesnost (p_i)

Upravená přesnostp_ise skutečně vypočítá jako poměr mezi počtem n -gramy v kandidátském překladu, které se přesně shodují n -gramů v libovolném referenčním překladu, oříznuté počtem n -gramy v kandidátském překladu.

p_i = frac{ ext{Count Clip}(matches_i, ext{max-ref-count}_i)}{ ext{candidate-n-grams}_i}



Tady,

  • Count Clips je funkce, která ořízne počet odpovídajících n-gramů (matches_i)o maximální počet n-gramů ve všech referenčních překladech ( ext{max-ref-count}_i.
  • matches_ije počet n-gramů řádu i, které se shodují přesně mezi kandidátským překladem a jakýmkoli referenčním překladem.
  • ext{max-ref-count}_ije maximální počet výskytů konkrétního n-gramu řádu, který jsem našel v každém jednotlivém referenčním překladu.
  • ext{candidate-n-grams}_ije celkový počet n-gramů řádu i přítomných v kandidátském překladu.

Trest za krátkost (BP)

Trest za krátkost penalizuje překlady, které jsou kratší než referenční překlady. Matematický výraz pro Trest za krátkost je dáno následovně:

BP = exp(1- frac{r}{c})

Tady,

  • r je délka kandidátského překladu
  • c je průměrná délka referenčních překladů.

Jak vypočítat skóre BLEU?

Pro lepší pochopení výpočtu BLEU skóre si uveďme příklad. Následuje příklad překladu z francouzštiny do angličtiny:

  • Zdrojový text (francouzština) : na tento obrázek jsem klikl já
  • Strojově přeložený text : obrázek obrázek ode mě
  • Referenční text-1 : na tento obrázek jsem kliknul já
  • Referenční text-2 : na obrázek jsem kliknul já

Jasně vidíme, že překlad provedený strojem není přesný. Vypočítejme skóre BLEU pro překlad.

Unigram upravená přesnost

Pro n = 1, spočítáme si Unigram upravená přesnost:

metody v Javě
UnigramPočítání ve strojovém překladu

Max. počet v Ref

Oříznutý počet =
min (počet v MT, maximální počet v referencích)
a2

1

1
obrázek2

1

1
podle1

1

1
1

1

1

Zde jsou unigramy (the, picture, by, me) převzaty ze strojově přeloženého textu. Počet se týká četnosti n-gramů ve všech strojově přeložených textech a počet oříznutí se týká četnosti unigramů v referenčních textech společně.

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 upravená přesnost

Pro n = 2 , spočítáme Bigram upravená přesnost :

BigramyPočítejte v MT

Max. počet v Ref

Oříznutý počet =
min (počet v MT, maximální počet v referencích)
obrázek2

1

1
obrázek1

0

0
obrázek od1

0

0
mnou1

1

python seřazená n-tice
1

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

Trigram upravená přesnost

Pro n = 3 , spočítáme Trigram upravená přesnost:

TrigramPočítejte v MT

Maximální počet v Ref

Oříznutý počet =
min (počet v MT, maximální počet v referencích)
obrázek1

0

0
obrázek obrázek1

0

0
obrázek od1

0

0
obrázek ode mě1

0

0

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

4gramová modifikovaná přesnost

Pro n = 4 , spočítáme 4 gramy upravená přesnost:

4 gramyPočet

Max. počet v Ref

Oříznutý počet =
min (počet v MT, maximální počet v referencích)
obrázek obrázek1

0

0
obrázek podle obrázku1

0

0
obrázek ode mě1

0

0

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

Výpočetní trest za krátkost

Nyní jsme spočítali všechna skóre přesnosti, pojďme najít penalizaci za krátkost překladu:

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

  • Délka výstupu strojového překladu = 6 (strojově přeložený text: obrázek obrázek já)
  • Maximální referenční výstupní délka = 6 (Referenční text-2: na obrázek jsem klikl já)

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

Výpočet skóre BLEU

Nakonec skóre BLEU pro výše uvedený překlad je dáno:

vlk versus liška

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

Dosazením hodnot dostaneme,

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

Nakonec jsme spočítali BLEU skóre pro daný překlad.

Implementace skóre BLEU v Pythonu

Po ručním výpočtu skóre BLEU je nyní člověk zvyklý na matematické fungování skóre BLEU. Nicméně Python's NLTK poskytuje vestavěný modul pro výpočet skóre BLEU. Pojďme vypočítat skóre BLEU pro stejný příklad překladu jako výše, ale tentokrát s použitím NLTK.

Kód:

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