logo

NLP – BLEU Score for Evaluating Neural Machine Translation – Python

Neuraalikonekäännös (NMT) on vakiotehtävä NLP joka sisältää tekstin kääntämisen lähdekielestä kohdekielelle. BLEU (Bilingual Evaluation Understudy) on pistemäärä, jolla arvioidaan konekääntäjän tekemiä käännöksiä. Tässä artikkelissa näemme BLEU-pisteiden takana olevan matematiikan ja sen toteutuksen Pythonissa.

Sisällysluettelo



Mikä on BLEU Score?

Kuten edellä mainittiin, BLEU Score on konekäännöstehtävien arviointimittari. Se lasketaan vertaamalla n-grammaa konekäännetyistä lauseista ihmisen kääntämien lauseiden n-grammiin. Yleensä on havaittu, että BLEU-pisteet pienenevät lauseen pituuden kasvaessa. Tämä saattaa kuitenkin vaihdella käännöksessä käytetyn mallin mukaan. Seuraavassa on kaavio, joka kuvaa BLEU-pistemäärän vaihtelua lauseen pituuden kanssa.

BLEU-pisteiden matemaattinen lauseke

Matemaattisesti BLEU-pisteet annetaan seuraavasti:

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



sivu alas näppäimistö

Tässä,

  • BP tarkoittaa Lyhyys rangaistus
  • w_i on paino n-gramman tarkkuudella luokkaa i (yleensä painot ovat samat kaikille i:lle)
  • p_ion n-gramman muunnettu tarkkuuspistemäärä luokkaa i.
  • N on suurin huomioitava n-grammien järjestys (yleensä enintään 4)

Muokattu n-gramman tarkkuus (p_i)

Muokattu tarkkuusp_ilasketaan todellakin lukujen välisenä suhteena n -grammaa ehdokaskäännöksessä, jotka vastaavat täsmälleen n -grammaa missä tahansa viitekäännöksessä, leikattu numerolla n -grammaa ehdokaskäännöksessä.

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



Tässä,

  • Count Clips on toiminto, joka leikkaa yhteensopivien n-grammien määrän (matches_i)n-grammien enimmäismäärällä kaikissa viitekäännöksissä ( ext{max-ref-count}_i.
  • matches_ion kertaluvun i vastaavien n-grammien lukumäärä tarkalleen ehdokaskäännöksen ja minkä tahansa viitekäännöksen välillä.
  • ext{max-ref-count}_ion kustakin yksittäisestä viitekäännöksestä löytämäni kertaluvun tietyn n-grammin esiintymien enimmäismäärä.
  • ext{candidate-n-grams}_ion ehdokaskäännöksessä i:n järjestyksessä olevien n-grammien kokonaismäärä.

Lyhyysrangaistus (BP)

Lyhyys rangaistus rankaisee käännöksiä, jotka ovat lyhyempiä kuin viitekäännökset. Matemaattinen lauseke for Lyhyys rangaistus annetaan seuraavasti:

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

Tässä,

  • r on ehdokaskäännöksen pituus
  • c on viitekäännösten keskimääräinen pituus.

Kuinka laskea BLEU-pisteet?

Otetaan esimerkki, jotta ymmärrämme paremmin BLEU-pisteen laskennan. Seuraavassa on tapaus käännöksestä ranskasta englanniksi:

  • Lähdeteksti (ranska) : olen napsauttanut tätä kuvaa
  • Konekäännetty teksti : kuva minun tekemäni
  • Viiteteksti-1 : olen napsauttanut tätä kuvaa
  • Viiteteksti-2 : klikkasin kuvaa

Näemme selvästi, että koneen tekemä käännös ei ole tarkka. Lasketaan käännöksen BLEU-pisteet.

Unigram Modified Precision

varten n = 1, laskemme Unigram-muokattu tarkkuus:

UnigramLaske konekäännöksessä

Enimmäismäärä viitteessä

x tai c++
Leikattu määrä =
min (laske MT, maksimimäärä viitteenä)
the2

1

1
kuva2

1

1
kirjoittaja1

1

1
minä1

1

1

Tässä unigrammit (kuva, kirjoittaja, minä) on otettu konekäännetystä tekstistä. Count viittaa n-grammien tiheyteen kaikessa konekäännetyssä tekstissä, ja Clipped Count viittaa unigrammien tiheyteen viiteteksteissä kollektiivisesti.

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}

Biggram Modified Precision

varten n = 2 , laskemme Biggram Modified Precision :

BiggrammitLaske MT

Enimmäismäärä viitteessä

Leikattu määrä =
min (laske MT, maksimimäärä viitteenä)
kuva2

1

1
kuva1

0

0
kuvan tekijä1

0

0
minulta1

1

1

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

konekirjoituskytkin

Trigram Modified Precision

varten n = 3 , laskemme Trigramin muokattu tarkkuus:

TrigrammiLaske MT

Enimmäismäärä viitteessä

Leikattu määrä =
min (laske MT, maksimimäärä viitteenä)
kuva1

0

0
kuvaa kuva1

0

0
kuvan tekijä1

0

0
kuva minulta1

0

0

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

4 gramman modifioitu tarkkuus

varten n = 4 , laskemme 4 gramman muokattu tarkkuus:

4 grammaaKreivi

Enimmäismäärä viitteessä

Leikattu määrä =
min (laske MT, maksimimäärä viitteenä)
kuva kuva1

0

0
kuva kuvan mukaan1

0

java yrittää saada kiinni
0
kuva minulta1

0

0

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

Lyhyyden rangaistus

Nyt olemme laskeneet kaikki tarkkuuspisteet, etsitään käännöksen lyhyysrangaistus:

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

  • Konekäännöstulosten pituus = 6 (konekäännetty teksti: kuva minun kirjoittamani kuva)
  • Suurin referenssilähdön pituus = 6 (Viiteteksti-2: klikkasin kuvaa)

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

BLEU-pisteiden laskeminen

Lopuksi yllä olevan käännöksen BLEU-pisteet saadaan:

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

Kun arvot korvataan, saamme

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

Lopuksi olemme laskeneet BLEU-pisteet annetulle käännökselle.

BLEU Score -toteutus Pythonissa

Laskettuaan BLEU-pisteet manuaalisesti, on jo tottunut BLEU-pisteiden matemaattiseen toimintaan. Python kuitenkin NLTK tarjoaa sisäänrakennetun moduulin BLEU-pisteiden laskemiseen. Lasketaan BLEU-pisteet samalle käännösesimerkille kuin yllä, mutta tällä kertaa käyttämällä NLTK:ta.

Koodi:

Python 3

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