logo

NLP – BLEU ocena za ocenjevanje nevronskega strojnega prevajanja – Python

Nevronsko strojno prevajanje (NMT) je standardna naloga v NLP ki vključuje prevajanje besedila iz izvornega jezika v ciljni jezik. BLEU (dvojezična evalvacija podštudija) je ocena, ki se uporablja za ocenjevanje prevodov, ki jih izvede strojni prevajalnik. V tem članku si bomo ogledali matematiko, ki stoji za oceno BLEU, in njeno implementacijo v Python.

Kazalo



Kaj je BLEU Score?

Kot je navedeno zgoraj, je ocena BLEU metrika vrednotenja za naloge strojnega prevajanja. Izračuna se s primerjavo n-gramov strojno prevedenih stavkov na n-gram stavkov, ki so jih prevedli ljudje. Običajno je bilo ugotovljeno, da se rezultat BLEU zmanjšuje z večanjem dolžine stavka. To pa se lahko razlikuje glede na model, uporabljen za prevod. Sledi graf, ki prikazuje variacijo ocene BLEU glede na dolžino stavka.

Matematični izraz za oceno BLEU

Matematično je rezultat BLEU podan na naslednji način:

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



mysql spremeni vrsto stolpca

tukaj,

  • BP pomeni Kazen za kratkost
  • w_i je utež za n-gramsko natančnost reda i (običajno so uteži enake za vse i)
  • p_ije n-gramsko spremenjen rezultat natančnosti reda i.
  • N je največji n-gramski vrstni red, ki ga je treba upoštevati (običajno do 4)

Spremenjena n-gramska natančnost (p_i)

Spremenjena natančnostp_ise namreč izračuna kot razmerje med številom n -gramov v možnem prevodu, ki se natančno ujemajo n -grami v katerem koli referenčnem prevodu, odrezani s številom n -gramov v kandidatnem prevodu.

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



tukaj,

  • Count Clips je funkcija, ki izreže število ujemajočih se n-gramov (matches_i)z največjim številom n-gramov v vseh referenčnih prevodih ( ext{max-ref-count}_i.
  • matches_ije število n-gramov reda i, ki se ujemajo točno med kandidatnim prevodom in katerim koli referenčnim prevodom.
  • ext{max-ref-count}_ije največje število pojavitev določenega n-grama reda, ki sem ga našel v katerem koli posameznem referenčnem prevodu.
  • ext{candidate-n-grams}_ije skupno število n-gramov reda i, prisotnih v kandidatnem prevodu.

Kazen za kratkost (BP)

Kazen za kratkost kaznuje prevode, ki so krajši od referenčnih prevodov. Matematični izraz za Kazen za kratkost je podan kot sledi:

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

tukaj,

  • r je dolžina kandidatnega prevoda
  • c je povprečna dolžina referenčnih prevodov.

Kako izračunati rezultat BLEU?

Za boljše razumevanje izračuna ocene BLEU vzemimo primer. Sledi primer prevoda iz francoščine v angleščino:

  • Izvorno besedilo (francosko) : to sliko sem kliknil jaz
  • Strojno prevedeno besedilo : slika moja slika
  • Referenčno besedilo-1 : to sliko sem kliknil jaz
  • Referenčno besedilo-2 : sliko sem kliknil jaz

Jasno lahko vidimo, da prevod, ki ga opravi stroj, ni točen. Izračunajmo oceno BLEU za prevod.

Unigram spremenjena natančnost

Za n = 1, bomo izračunali Spremenjena natančnost Unigrama:

UnigramŠtetje v strojnem prevajanju

Največje število v Ref

Odrezano število =
min (štetje v MT, največje število v ref.)
the2

1

1
slika2

1

1
avtor1

1

1
jaz1

1

1

Tukaj so unigrami (the, picture, by, me) vzeti iz strojno prevedenega besedila. Count se nanaša na pogostost n-gramov v celotnem strojno prevedenem besedilu, Clipped Count pa se nanaša na pogostost unigramov v referenčnih besedilih skupaj.

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 spremenjena natančnost

Za n = 2 , bomo izračunali Bigram spremenjena natančnost :

BigramiŠtej v MT

Največje število v ref

statična java
Odrezano število =
min (štetje v MT, največje število v ref.)
slika2

1

1
slikajte1

0

0
slika avtorja1

0

0
ob meni1

1

1

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

Trigram spremenjena natančnost

Za n = 3 , bomo izračunali Spremenjena natančnost trigrama:

TrigramŠtej v MT

Največje število v ref

Odrezano število =
min (štetje v MT, največje število v ref.)
slika1

0

0
slikaj sliko1

0

0
slika avtorja1

0

0
moja slika1

0

0

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

4-gramska spremenjena natančnost

Za n =4 , bomo izračunali 4-gramska spremenjena natančnost:

funkcija python chr
4-gramskištetje

Največje število v ref

Odrezano število =
min (štetje v MT, največje število v ref.)
slika slika1

0

0
slikaj sliko po1

0

0
slika od mene1

0

0

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

Izračunavanje kazni za kratkost

Zdaj, ko smo izračunali vse ocene natančnosti, poiščimo kazen za kratkost prevoda:

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

obravnavanje izjem v Javi
  • Izhodna dolžina strojnega prevoda = 6 (strojno prevedeno besedilo: slika, slika, ki sem jo napisal jaz)
  • Največja referenčna izhodna dolžina = 6 (Referenčno besedilo-2: sliko sem kliknil jaz)

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

Izračunavanje rezultatov BLEU

Končno je ocena BLEU za zgornji prevod podana z:

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

Če zamenjamo vrednosti, dobimo

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

Nazadnje smo izračunali oceno BLEU za dani prevod.

Implementacija rezultatov BLEU v Pythonu

Po ročnem izračunu ocene BLEU smo že navajeni na matematično delovanje ocene BLEU. Vendar pa Python NLTK ponuja vgrajen modul za izračun ocene BLEU. Izračunajmo oceno BLEU za isti primer prevoda kot zgoraj, vendar tokrat z uporabo NLTK.

Koda:

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