Neural Machine Translation (NMT) er en standardoppgave i NLP som innebærer å oversette en tekst fra et kildespråk til et målspråk. BLEU (Bilingual Evaluation Understudy) er en poengsum som brukes til å evaluere oversettelsene utført av en maskinoversetter. I denne artikkelen vil vi se matematikken bak BLEU-poengsummen og dens implementering i Python.
Innholdsfortegnelse
- Hva er BLEU-score?
- Matematisk uttrykk for BLEU-poengsum
- Hvordan beregne BLEU-score?
- BLEU Score Implementering i Python
Hva er BLEU-score?
Som nevnt ovenfor er BLEU Score en evalueringsberegning for maskinoversettelsesoppgaver. Det beregnes ved å sammenligne n-gram av maskinoversatte setninger til n-grammet av menneskeoversatte setninger. Vanligvis har det blitt observert at BLEU-skåren avtar etter hvert som strafflengden øker. Dette kan imidlertid variere avhengig av modellen som brukes for oversettelse. Følgende er en graf som viser variasjonen av BLEU-poengsummen med setningslengden.
Matematisk uttrykk for BLEU-poengsum
Matematisk er BLEU-score gitt som følger:
BLEU Score = BP * exp(sum_{i=1}^{N}(w_i * ln(p_i)) hvordan sette sammen strenger i javaHer,
- BP står for Korthetsstraff
w_i er vekten for n-grams presisjon av orden i (vanligvis er vektene like for alle i)p_i er den n-gram modifiserte presisjonspoengsummen av orden i.- N er den maksimale n-gram rekkefølgen å vurdere (vanligvis opptil 4)
Modifisert n-gram presisjon (p_i )
Den modifiserte presisjonen
p_i = frac{ ext{Count Clip}(matches_i, ext{max-ref-count}_i)}{ ext{candidate-n-grams}_i} Her,
- Count Clips er en funksjon som klipper antall matchende n-gram (
matches_i ) med maksimalt antall n-gram på tvers av alle referanseoversettelser (ext{max-ref-count}_i .matches_i er antall n-gram orden i som samsvarer nøyaktig mellom kandidatoversettelsen og noen av referanseoversettelsene.ext{max-ref-count}_i er det maksimale antallet forekomster av det spesifikke n-gram av rekkefølgen jeg fant i en enkelt referanseoversettelse.ext{candidate-n-grams}_i er det totale antallet n-gram ordre jeg presenterer i kandidatoversettelsen.
Brevity Penalty (BP)
Korthetsstraff straffer oversettelser som er kortere enn referanseoversettelsene. Det matematiske uttrykket for Korthetsstraff er gitt som følger:
BP = exp(1- frac{r}{c}) Her,
- r er lengden på kandidatoversettelsen
- c er gjennomsnittslengden på referanseoversettelsene.
Hvordan beregne BLEU-score?
For en bedre forståelse av beregningen av BLEU-poengsummen, la oss ta et eksempel. Følgende er en sak for fransk til engelsk oversettelse:
- Kildetekst (fransk) : dette bildet er klikket av meg
- Maskinoversatt tekst : bildet bildet av meg
- Referansetekst-1 : dette bildet er klikket av meg
- Referansetekst-2 : bildet ble klikket av meg
Vi kan tydelig se at oversettelsen gjort av maskinen ikke er nøyaktig. La oss beregne BLEU-poengsummen for oversettelsen.
Unigram modifisert presisjon
Til n = 1, vi beregner Unigram modifisert presisjon:
| Unigram | Tell i maskinoversettelse | Maks antall i Ref | Klippt Count = min (Tell i MT, Max Count i Ref) |
|---|---|---|---|
| de | 2 | 1 | 1 |
| bilde | 2 | 1 fjerner siste commit git | 1 |
| av | 1 | 1 | 1 |
| meg | 1 | 1 | 1 |
Her er unigrammene (the, picture, by, me) hentet fra den maskinoversatte teksten. Count refererer til frekvensen av n-gram i all maskinoversatt tekst, og Clipped Count refererer til frekvensen av unigram i referansetekstene samlet.
Bigram modifisert presisjon
Til n = 2 , beregner vi Bigram modifisert presisjon :
| Bigrams | Tell i MT | Maks antall i Ref | Klippt Count = min (Tell i MT, Max Count i Ref) |
|---|---|---|---|
| bildet | 2 | 1 | 1 |
| bilde av | 1 | 0 | 0 |
| bilde av | 1 | 0 | 0 |
| av meg | 1 | 1 | 1 |
Trigram modifisert presisjon
Til n = 3 , beregner vi Trigram modifisert presisjon:
| Trigram | Tell i MT | Maks antall i Ref int parseint | Klippt Count = min (Tell i MT, Max Count i Ref) |
|---|---|---|---|
| bildet | 1 | 0 | 0 |
| bilde bildet | 1 | 0 | 0 |
| bildet av | 1 | 0 | 0 |
| bilde av meg | 1 | 0 | 0 |
4 gram modifisert presisjon
Til n = 4 , beregner vi 4 gram modifisert presisjon:
| 4 gram | Telle | Maks antall i Ref | Klippt Count = min (Tell i MT, Max Count i Ref) |
|---|---|---|---|
| bildet bildet | 1 | 0 | 0 |
| bilde bildet av | 1 | 0 | 0 |
| bildet av meg | 1 | 0 alfabet med tall | 0 |
Computing Brevity Penalty
Nå har vi beregnet alle presisjonspoeng, la oss finne Brevity Penalty for oversettelsen:
- Machine Translation Output Length = 6 (maskinoversatt tekst: bildet bildet av meg)
- Maks referanseutgangslengde = 6 (Referansetekst-2: bildet ble klikket av meg)
Beregning av BLEU-poengsum
Til slutt er BLEU-poengsummen for oversettelsen ovenfor gitt av:
Ved å erstatte verdiene får vi,
Til slutt har vi beregnet BLEU-poengsummen for den gitte oversettelsen.
BLEU Score Implementering i Python
Etter å ha beregnet BLEU-poengsummen manuelt, er man nå vant til den matematiske bearbeidingen av BLEU-poengsummen. Imidlertid Python's NLTK gir en innebygd modul for beregning av BLEU-poengsum. La oss beregne BLEU-poengsummen for det samme oversettelseseksemplet som ovenfor, men denne gangen ved å bruke NLTK.
Kode:
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.>