logo

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



yra santykiai

Čia

  • BP reiškia Trumpumo bausmė
  • w_i yra i eilės n-gramų tikslumo svoris (paprastai svoriai yra vienodi visiems i)
  • p_iyra 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 tikslumasp_iiš 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_iyra i eilės atitinkančių n-gramų skaičius tiksliai tarp kandidato vertimo ir bet kurio etaloninio vertimo.
  • ext{max-ref-count}_iyra didžiausias konkretaus n-gramo eilės atvejų skaičius, kurį radau bet kuriame atskirame nuorodos vertime.
  • ext{candidate-n-grams}_iyra 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ą.

kaip pervardyti katalogą linux

Unigram modifikuotas tikslumas

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

UnigramaSkaič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 :

BigramaiSkaičiuokite MT

Maksimalus skaičius nuorodoje

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

1

1
pavaizduoti1

0

0
nuotrauka pagal1

0

„Java“ įtraukimas į masyvą
0
pas mane1

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:

TrigramaSkaičiuokite MT

Maksimalus skaičius nuorodoje

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

0

0
pavaizduoti paveikslėlį1

0

0
paveikslėlį pateikė1

0

0
mano nuotrauka1

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 gramaiSuskaičiuoti

Maksimalus skaičius nuorodoje

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

0

0
pavaizduokite paveikslėlį pagal1

0

0
mano nuotrauka1

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.

masyvas java

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