Neural Machine Translation (NMT) er en standardopgave i NLP der involverer oversættelse af en tekst fra et kildesprog til et målsprog. BLEU (Bilingual Evaluation Understudy) er en score, der bruges til at evaluere oversættelser udført af en maskinoversætter. I denne artikel vil vi se matematikken bag BLEU-scoren og dens implementering i Python.
Indholdsfortegnelse
- Hvad er BLEU-score?
- Matematisk udtryk for BLEU-score
- Hvordan beregner man BLEU-score?
- BLEU Score Implementering i Python
Hvad er BLEU-score?
Som nævnt ovenfor er BLEU Score en evalueringsmetrik for maskinoversættelsesopgaver. Det beregnes ved at sammenligne n-gram af maskinoversatte sætninger til n-grammet af menneskeoversatte sætninger. Normalt er det blevet observeret, at BLEU-scoren falder, når sætningslængden øges. Dette kan dog variere afhængigt af den model, der bruges til oversættelse. Det følgende er en graf, der viser variationen af BLEU-score med sætningslængden.
Matematisk udtryk for BLEU-score
Matematisk gives BLEU-score som følger:
BLEU Score = BP * exp(sum_{i=1}^{N}(w_i * ln(p_i))
linux filerHer,
- BP står for Korthed Straf
w_i er vægten for n-gram præcision af orden i (typisk er vægten ens for alle i)p_i er den n-gram modificerede præcisionsscore af orden i.- N er den maksimale n-gram rækkefølge, der skal tages i betragtning (normalt op til 4)
Modificeret n-gram præcision (p_i )
Den modificerede præcision
p_i = frac{ ext{Count Clip}(matches_i, ext{max-ref-count}_i)}{ ext{candidate-n-grams}_i}
Her,
- Count Clips er en funktion, der klipper antallet af matchede n-gram (
matches_i ) med det maksimale antal af n-gram på tværs af alle referenceoversættelser (ext{max-ref-count}_i .matches_i er antallet af n-gram orden i, der matcher Nemlig mellem kandidatoversættelsen og enhver af referenceoversættelserne.ext{max-ref-count}_i er det maksimale antal forekomster af den specifikke n-gram af orden, jeg fandt i en enkelt referenceoversættelse.ext{candidate-n-grams}_i er det samlede antal n-gram ordre i præsenterer i kandidatoversættelsen.
Brevity Penalty (BP)
Korthed Straf straffer oversættelser, der er kortere end referenceoversættelserne. Det matematiske udtryk for Korthed Straf er givet som følger:
BP = exp(1- frac{r}{c}) Her,
- r er længden af kandidatoversættelsen
- c er den gennemsnitlige længde af referenceoversættelserne.
Hvordan beregner man BLEU-score?
For en bedre forståelse af beregningen af BLEU-score, lad os tage et eksempel. Følgende er en sag for fransk til engelsk oversættelse:
- Kildetekst (fransk) : dette billede er klikket af mig
- Maskinoversat tekst : billedet billedet af mig
- Referencetekst-1 : dette billede er klikket af mig
- Referencetekst-2 : billedet blev klikket af mig
Vi kan tydeligt se, at oversættelsen udført af maskinen ikke er nøjagtig. Lad os beregne BLEU-score for oversættelsen.
Unigram modificeret præcision
Til n = 1, vi beregner Unigram modificeret præcision:
| Unigram | Tæl i maskinoversættelse | Max antal i Ref | Klippet Antal = min (tæller i MT, maks. antal i ref) |
|---|---|---|---|
| det | 2 | 1 | 1 |
| billede | 2 | 1 Madhuri sagde kom nu | 1 |
| ved | 1 | 1 | 1 |
| mig | 1 | 1 | 1 |
Her er unigrammerne (the, picture, by, me) taget fra den maskinoversatte tekst. Count refererer til frekvensen af n-gram i al den maskinoversatte tekst, og Clipped Count refererer til frekvensen af unigram i referenceteksterne samlet.
Bigram modificeret præcision
Til n = 2 , beregner vi Bigram modificeret præcision :
| Bigrammer | Tæl i MT | Max antal i ref | Klippet Antal = min (tæller i MT, maks. antal i ref) |
|---|---|---|---|
| billedet | 2 | 1 | 1 |
| billede af | 1 | 0 | 0 |
| billede af | 1 | 0 | 0 |
| af mig | 1 | 1 | 1 |
Trigram modificeret præcision
Til n = 3 , beregner vi Trigram modificeret præcision:
| Trigram | Tæl i MT | Max antal i ref int parseint | Klippet Antal = min (Tæller i MT, Maks. Antal i Ref) |
|---|---|---|---|
| billedet | 1 | 0 | 0 |
| billede billedet | 1 | 0 | 0 |
| billedet af | 1 | 0 | 0 |
| billede af mig | 1 | 0 | 0 |
4 grams modificeret præcision
Til n = 4 , beregner vi 4 grams modificeret præcision:
| 4 gram | Tælle | Max antal i ref | Klippet Antal = min (tæller i MT, maks. antal i ref) |
|---|---|---|---|
| billedet billedet | 1 | 0 | 0 |
| billede billedet af | 1 | 0 | 0 |
| billedet af mig | 1 | 0 java hale | 0 |
Computing Brevity Penalty
Nu har vi beregnet alle præcisionsresultaterne, lad os finde Brevity Penalty for oversættelsen:
- Maskinoversættelse outputlængde = 6 (Maskinoversat tekst: billedet billedet af mig)
- Max reference udgangslængde = 6 (Referencetekst-2: billedet blev klikket af mig)
Udregning af BLEU-score
Endelig er BLEU-score for ovenstående oversættelse givet af:
Ved at erstatte værdierne får vi,
Til sidst har vi beregnet BLEU-scoren for den givne oversættelse.
BLEU Score Implementering i Python
Efter at have beregnet BLEU-scoren manuelt, er man nu vant til den matematiske bearbejdning af BLEU-scoren. Dog Python's NLTK giver et indbygget modul til BLEU-scoreberegning. Lad os beregne BLEU-score for det samme oversættelseseksempel som ovenfor, men denne gang ved hjælp af 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.>