NLP – BLEU balas neuroninio mašininio vertimo įvertinimui – Python

Neuroninis mašininis vertimas (NMT) yra standartinė užduotis NLP Tai apima teksto vertimą iš šaltinio kalbos į tikslinę kalbą. BLEU (dvikalbio vertinimo studija) yra balas, naudojamas mašininio vertėjo atliekamiems vertimams įvertinti. Šiame straipsnyje apžvelgsime BLEU balo matematiką ir jo įgyvendinimą Python.

Turinys

Kas yra BLEU Score?

Kaip minėta pirmiau, BLEU Score yra mašininio vertimo užduočių vertinimo metrika. Jis apskaičiuojamas lyginant n-gramų mašininiu būdu išverstų sakinių į n-gramą žmogaus išverstų sakinių. Paprastai buvo pastebėta, kad ilgėjant sakinio trukmei BLEU balas mažėja. Tačiau tai gali skirtis priklausomai nuo vertimui naudojamo modelio. Toliau pateikiamas grafikas, kuriame pavaizduotas BLEU balo kitimas su sakinio ilgiu.

BLEU balo matematinė išraiška

Matematiškai BLEU balas pateikiamas taip:

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

Čia

  • BP reiškia Trumpumo bausmė
  • w_i yra i eilės n-gramų tikslumo svoris (paprastai svoriai yra vienodi visiems i)
  • p_i yra n-gramų modifikuotas i eilės tikslumo balas.
  • N yra didžiausia n-gramų tvarka, į kurią reikia atsižvelgti (paprastai iki 4)

Modifikuotas n gramų tikslumas ( p_i )

Pakeistas tikslumas p_i iš tikrųjų apskaičiuojamas kaip santykis tarp skaičiaus n -gramai kandidato vertime, kurie tiksliai atitinka n -gramai bet kuriame nuorodos vertime, nukirpti pagal skaičių n -gramų kandidato vertime.

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

Čia

  • Skaičiuoti klipus yra funkcija, kuri sutrumpina suderintų n-gramų skaičių ( matches_i ) pagal didžiausią n-gramų skaičių visuose nuorodiniuose vertimuose ( ext{max-ref-count}_i .
  • matches_i yra i eilės atitinkančių n-gramų skaičius tiksliai tarp kandidato vertimo ir bet kurio etaloninio vertimo.
  • ext{max-ref-count}_i yra didžiausias konkretaus n-gramo eilės atvejų skaičius, kurį radau bet kuriame atskirame nuorodos vertime.
  • ext{candidate-n-grams}_i yra bendras i eilės n gramų skaičius kandidatiniame vertime.

Trumpumo bauda (BP)

Trumpumo bausmė baudžia už vertimus, kurie yra trumpesni už pamatinius vertimus. Matematinė išraiška už Trumpumo bausmė pateikiama taip:

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

Čia

  • r yra kandidato vertimo ilgis
  • c yra vidutinė nuorodų vertimų trukmė.

Kaip apskaičiuoti BLEU balą?

Norėdami geriau suprasti BLEU balo skaičiavimą, paimkime pavyzdį. Toliau pateikiamas vertimo iš prancūzų į anglų atvejis:

  • Šaltinio tekstas (prancūzų k.) : šį vaizdą spustelėjau aš
  • Mašininio vertimo tekstas : nuotrauka mano nuotrauka
  • Nuorodos tekstas-1 : šią nuotrauką spustelėjau aš
  • Nuorodos tekstas-2 : nuotrauką paspaudžiau aš

Aiškiai matome, kad mašinos atliktas vertimas nėra tikslus. Apskaičiuokime vertimo BLEU balą.

Unigram modifikuotas tikslumas

Dėl n = 1, mes apskaičiuosime Unigram modifikuotas tikslumas:

Unigrama Skaičiavimas mašininiame vertime

Maksimalus skaičius nuorodoje

Iškarpytas skaičius =
min (skaičius MT, maksimalus skaičius nuorodoje)
į 2

1

1
paveikslėlį 2

1

1
pateikė 1

1

1
1

1

1

Čia unigramos (the, picture, by, me) paimtos iš mašininiu būdu išversto teksto. Skaičius reiškia n-gramų dažnį visame mašininiu būdu išverstame tekste, o apkarpytas skaičius reiškia unigramų dažnį nuorodiniuose tekstuose bendrai.

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“ modifikuotas tikslumas

Dėl n = 2 , mes apskaičiuosime „Bigram“ modifikuotas tikslumas :

Bigramai Skaičiuokite MT

Maksimalus skaičius nuorodoje

Iškarpytas skaičius =
min (skaičius MT, maksimalus skaičius nuorodoje)
Nuotrauka 2

1

1
pavaizduoti 1

0

0
nuotrauka pagal 1

0

0
pas mane 1

1

1

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

Trigramos modifikuotas tikslumas

Dėl n = 3 , mes apskaičiuosime Trigramos modifikuotas tikslumas:

Trigrama Skaičiuokite MT

Maksimalus skaičius nuorodoje

Iškarpytas skaičius =
min (skaičius MT, maksimalus skaičius nuorodoje)
paveikslas 1

0

0
pavaizduoti paveikslėlį 1

0

0
paveikslėlį pateikė 1

0

0
mano nuotrauka 1

0

0

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

4 gramų modifikuotas tikslumas

Dėl n = 4 , mes apskaičiuosime 4 gramų modifikuotas tikslumas:

4 gramai Suskaičiuoti

Maksimalus skaičius nuorodoje

Iškarpytas skaičius =
min (skaičius MT, maksimalus skaičius nuorodoje)
paveikslas paveikslas 1

0

0
pavaizduokite paveikslėlį pagal 1

0

0
mano nuotrauka 1

0

0

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

Trumpumo skaičiavimas

Dabar apskaičiavome visus tikslumo balus, suraskime vertimo trumpumo baudą:

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

  • Mašininio vertimo išvesties ilgis = 6 (Mašininiu būdu išverstas tekstas: paveikslėlis mano)
  • Maksimalus atskaitos išvesties ilgis = 6 (2 nuoroda: paveikslėlį spustelėjau aš)

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

BLEU balo skaičiavimas

Galiausiai aukščiau pateikto vertimo BLEU balas gaunamas taip:

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

Pakeitę reikšmes, gauname,

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

Galiausiai apskaičiavome nurodyto vertimo BLEU balą.

BLEU balų diegimas Python

Apskaičiavus BLEU balą rankiniu būdu, dabar žmogus yra pripratęs prie matematinio BLEU balo veikimo. Tačiau Python's NLTK suteikia įmontuotą modulį BLEU balų skaičiavimui. Apskaičiuokime BLEU balą tam pačiam vertimo pavyzdžiui, kaip nurodyta aukščiau, bet šį kartą naudodami NLTK.

Kodas:

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.