Neural Machine Translation (NMT) är en standarduppgift i NLP som innebär att en text översätts från ett källspråk till ett målspråk. BLEU (Bilingual Evaluation Understudy) är en poäng som används för att utvärdera översättningar som utförs av en maskinöversättare. I den här artikeln kommer vi att se matematiken bakom BLEU-poängen och dess implementering i Python.
Innehållsförteckning
- Vad är BLEU Score?
- Matematiskt uttryck för BLEU-poäng
- Hur beräknar man BLEU-poäng?
- BLEU Score Implementation i Python
Vad är BLEU Score?
Som nämnts ovan är BLEU Score ett utvärderingsmått för maskinöversättningsuppgifter. Den beräknas genom att jämföra n-gram av maskinöversatta meningar till n-grammet av människoöversatta meningar. Vanligtvis har det observerats att BLEU-poängen minskar när strafflängden ökar. Detta kan dock variera beroende på vilken modell som används för översättning. Följande är en graf som visar variationen av BLEU-poängen med meningslängden.
Matematiskt uttryck för BLEU-poäng
Matematiskt ges BLEU-poäng enligt följande:
BLEU Score = BP * exp(sum_{i=1}^{N}(w_i * ln(p_i))
arp-a kommandoHär,
- BP står för Kortfattad straff
w_i är vikten för n-grams precision av ordning i (typiskt är vikter lika för alla i)p_i är det n-gram modifierade precisionspoäng av ordning i.- N är den maximala n-gramsordningen att beakta (vanligtvis upp till 4)
Modifierad n-gram precision (p_i )
Den modifierade precisionen
p_i = frac{ ext{Count Clip}(matches_i, ext{max-ref-count}_i)}{ ext{candidate-n-grams}_i}
Här,
- Count Clips är en funktion som klipper antalet matchade n-gram (
matches_i )med det maximala antalet n-gram över alla referensöversättningar (ext{max-ref-count}_i .matches_i är antalet n-gram ordning i som matchar exakt mellan kandidatöversättningen och någon av referensöversättningarna.ext{max-ref-count}_i är det maximala antalet förekomster av det specifika n-gram av ordning jag hittade i en enskild referensöversättning.ext{candidate-n-grams}_i är det totala antalet n-gram order i presenterar i kandidatöversättningen.
Brevity Penalty (BP)
Kortfattad straff straffar översättningar som är kortare än referensöversättningarna. Det matematiska uttrycket för Kortfattad straff ges enligt följande:
BP = exp(1- frac{r}{c}) Här,
- r är längden på kandidatöversättningen
- c är medellängden på referensöversättningarna.
Hur beräknar man BLEU-poäng?
För en bättre förståelse av beräkningen av BLEU-poängen, låt oss ta ett exempel. Följande är ett fall för franska till engelska översättning:
- Källtext (franska) : den här bilden har jag klickat på
- Maskinöversatt text : bilden bilden av mig
- Referenstext-1 : den här bilden har jag klickat på
- Referenstext-2 : bilden klickades av mig
Vi kan tydligt se att översättningen som görs av maskinen inte är korrekt. Låt oss beräkna BLEU-poängen för översättningen.
Unigram Modifierad Precision
För n = 1, vi beräknar Unigram modifierad precision:
| Unigram | Räkna i maskinöversättning | Max antal i Ref latex bord | Klippt Count = min (Räkna i MT, Max antal i Ref) |
|---|---|---|---|
| de | 2 | 1 | 1 |
| bild | 2 | 1 | 1 |
| förbi | 1 | 1 | 1 |
| mig | 1 | 1 | 1 |
Här är unigrammen (the, picture, by, me) hämtade från den maskinöversatta texten. Count hänvisar till frekvensen av n-gram i all maskinöversatt text, och Clipped Count hänvisar till frekvensen av unigram i referenstexterna tillsammans.
Bigram Modifierad Precision
För n = 2 , beräknar vi Bigram Modifierad Precision :
| Bigrams | Räkna i MT | Max antal i Ref | Klippt Count = min (Räkna i MT, Max antal i Ref) |
|---|---|---|---|
| bilden | 2 | 1 | 1 |
| bild på | 1 | 0 | 0 |
| bild av | 1 | 0 | 0 |
| av mig | 1 | 1 | 1 |
fjäderverktygssvit
Trigram Modifierad Precision
För n = 3 , beräknar vi Trigram modifierad precision:
| Trigram | Räkna i MT | Max antal i Ref | Klippt Count = min (Räkna i MT, Max antal i Ref) |
|---|---|---|---|
| bilden den | 1 | 0 | 0 |
| bild bilden | 1 | 0 | 0 |
| bilden av | 1 | 0 | 0 |
| bild av mig | 1 | 0 | 0 |
4-grams modifierad precision
För n=4 , beräknar vi 4 gram modifierad precision:
| 4 gram | Räkna | Max antal i Ref | Klippt Count = min (Räkna i MT, Max antal i Ref) |
|---|---|---|---|
| bilden bilden | 1 | 0 | 0 |
| bild bilden av | 1 | 0 mamta kulkarni skådespelare | 0 |
| bilden av mig | 1 | 0 | 0 |
Computing Brevity Penalty
Nu har vi beräknat alla precisionspoäng, låt oss hitta Brevity Penalty för översättningen:
- Machine Translation Output Length = 6 (Maskinöversatt text: bilden bilden av mig)
- Max referensutgångslängd = 6 (Referenstext-2: bilden klickades av mig)
Beräkna BLEU-poäng
Slutligen ges BLEU-poängen för ovanstående översättning av:
När vi byter ut värdena får vi,
Slutligen har vi beräknat BLEU-poängen för den givna översättningen.
BLEU Score Implementation i Python
Efter att ha beräknat BLEU-poängen manuellt är man vid det här laget van vid den matematiska bearbetningen av BLEU-poängen. Däremot Python's NLTK tillhandahåller en inbyggd modul för beräkning av BLEU-poäng. Låt oss beräkna BLEU-poängen för samma översättningsexempel som ovan men den här gången med 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.>