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?
- Matematični izraz za oceno BLEU
- Kako izračunati rezultat BLEU?
- Implementacija rezultatov BLEU v Pythonu
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 stolpcatukaj,
- 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_i je 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čnost
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_i je število n-gramov reda i, ki se ujemajo točno med kandidatnim prevodom in katerim koli referenčnim prevodom.ext{max-ref-count}_i je 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}_i je 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.) |
|---|---|---|---|
| the | 2 | 1 | 1 |
| slika | 2 | 1 | 1 |
| avtor | 1 | 1 | 1 |
| jaz | 1 | 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.
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.) |
|---|---|---|---|
| slika | 2 | 1 | 1 |
| slikajte | 1 | 0 | 0 |
| slika avtorja | 1 | 0 | 0 |
| ob meni | 1 | 1 | 1 |
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.) |
|---|---|---|---|
| slika | 1 | 0 | 0 |
| slikaj sliko | 1 | 0 | 0 |
| slika avtorja | 1 | 0 | 0 |
| moja slika | 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 slika | 1 | 0 | 0 |
| slikaj sliko po | 1 | 0 | 0 |
| slika od mene | 1 | 0 | 0 |
Izračunavanje kazni za kratkost
Zdaj, ko smo izračunali vse ocene natančnosti, poiščimo kazen za kratkost prevoda:
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)
Izračunavanje rezultatov BLEU
Končno je ocena BLEU za zgornji prevod podana z:
Če zamenjamo vrednosti, dobimo
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.>