logo

Skóre NLP – BLEU pre hodnotenie neurónového strojového prekladu – Python

Neurónový strojový preklad (NMT) je štandardná úloha v NLP ktorá zahŕňa preklad textu zo zdrojového jazyka do cieľového jazyka. BLEU (Bilingual Evaluation Understudy) je skóre používané na hodnotenie prekladov vykonaných strojovým prekladačom. V tomto článku uvidíme matematiku za skóre BLEU a jeho implementáciu v Pythone.

Obsah



Čo je skóre BLEU?

Ako je uvedené vyššie, BLEU skóre je hodnotiaca metrika pre úlohy strojového prekladu. Vypočítava sa porovnaním n-gramov strojovo preložených viet na n-gram viet preložených človekom. Zvyčajne sa pozorovalo, že skóre BLEU sa znižuje so zvyšujúcou sa dĺžkou vety. To sa však môže líšiť v závislosti od modelu použitého na preklad. Nasleduje graf znázorňujúci variáciu skóre BLEU s dĺžkou vety.

Matematický výraz pre skóre BLEU

Matematicky je skóre BLEU dané takto:

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



ako previesť celé číslo na reťazec java

Tu,

  • BP znamenať Trest za stručnosť
  • w_i je hmotnosť pre n-gramovú presnosť rádu i (zvyčajne sú hmotnosti rovnaké pre všetky i)
  • p_ije n-gram modifikované skóre presnosti rádu i.
  • N je maximálne poradie n-gramov, ktoré treba zvážiť (zvyčajne do 4)

Upravená n-gramová presnosť (p_i)

Upravená presnosťp_isa skutočne vypočíta ako pomer medzi počtom n -gramy v kandidátskom preklade, ktoré sa presne zhodujú n -gramov v ktoromkoľvek z referenčných prekladov, skrátených o počet n -gramy v kandidátskom preklade.

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



Tu,

  • Count Clips je funkcia, ktorá orezáva počet zhodných n-gramov (matches_i) podľa maximálneho počtu n-gramov vo všetkých referenčných prekladoch ( ext{max-ref-count}_i.
  • matches_ije počet n-gramov rádu i, ktoré sa zhodujú presne tak medzi kandidátskym prekladom a ktorýmkoľvek referenčným prekladom.
  • ext{max-ref-count}_ije maximálny počet výskytov konkrétneho n-gramového rádu, ktorý som našiel v každom jednom referenčnom preklade.
  • ext{candidate-n-grams}_ije celkový počet n-gramov rádu i prítomných v kandidátskom preklade.

Trest za krátkosť (BP)

Trest za stručnosť penalizuje preklady, ktoré sú kratšie ako referenčné preklady. Matematický výraz pre Trest za stručnosť sa uvádza takto:

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

Tu,

  • r je dĺžka kandidátskeho prekladu
  • c je priemerná dĺžka referenčných prekladov.

Ako vypočítať skóre BLEU?

Pre lepšie pochopenie výpočtu skóre BLEU si uveďme príklad. Nasleduje príklad prekladu z francúzštiny do angličtiny:

  • Zdrojový text (francúzština) : na tento obrázok som klikol ja
  • Strojovo preložený text : obrázok obrázok odo mňa
  • Referenčný text-1 : na tento obrázok som klikol ja
  • Referenčný text-2 : na obrázok som klikol ja

Jasne vidíme, že preklad vykonaný strojom nie je presný. Vypočítajme skóre BLEU pre preklad.

Unigram upravená presnosť

Pre n = 1, vypočítame si Unigram upravená presnosť:

UnigramPočítajte v strojovom preklade

Maximálny počet v Ref

v regexe java
Počet orezaných =
min (počet v MT, maximálny počet v referencii)
a2

1

1
obrázok2

1

1
podľa1

1

1
ja1

1

1

Tu sú unigramy (the, picture, by, me) prevzaté zo strojovo preloženého textu. Počet sa vzťahuje na frekvenciu n-gramov vo všetkých strojovo preložených textoch a počet orezaných sa vzťahuje na frekvenciu unigramov v referenčných textoch spoločne.

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 modifikovaná presnosť

Pre n = 2 , vypočítame Bigram modifikovaná presnosť :

BigramyPočítajte v MT

Maximálny počet v Ref

Počet orezaných =
min (počet v MT, maximálny počet v referencii)
obrázok2

1

1
predstavte si1

0

0
obrázok od1

0

0
mnou1

1

1

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

ako zatvoriť režim vývojára

Trigram upravená presnosť

Pre n = 3 , vypočítame Trigram upravená presnosť:

TrigramPočítajte v MT

Maximálny počet v Ref

Počet orezaných =
min (počet v MT, maximálny počet v referencii)
obrázok1

0

0
predstavte si obrázok1

0

0
obrázok podľa1

0

0
obrázok odo mňa1

0

0

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

4-gramová modifikovaná presnosť

Pre n = 4 , vypočítame 4-gramová modifikovaná presnosť:

4-gramovýpočítať

Maximálny počet v Ref

Počet orezaných =
min (počet v MT, maximálny počet v referencii)
obrázok obrázok1

0

0
obrázok podľa1

0

java inak ak
0
obrázok odo mňa1

0

0

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

Výpočet trestu za krátkosť

Teraz sme vypočítali všetky skóre presnosti, poďme nájsť trest za krátkosť prekladu:

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

  • Dĺžka výstupu strojového prekladu = 6 (Text preložený strojom: obrázok, obrázok odo mňa)
  • Maximálna referenčná výstupná dĺžka = 6 (Referenčný text-2: klikol som na obrázok)

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

Výpočet skóre BLEU

Nakoniec, skóre BLEU pre vyššie uvedený preklad je dané:

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

Nahradením hodnôt 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

Nakoniec sme vypočítali skóre BLEU pre daný preklad.

Implementácia skóre BLEU v Pythone

Po manuálnom vypočítaní skóre BLEU je človek už zvyknutý na matematické fungovanie skóre BLEU. Avšak, Python's NLTK poskytuje vstavaný modul na výpočet skóre BLEU. Vypočítajme skóre BLEU pre rovnaký príklad prekladu ako vyššie, ale tentoraz pomocou 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.>