logo

NLP – BLEU-poäng för utvärdering av neural maskinöversättning – Python

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?

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 kommando

Hä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 precisionenp_iberäknas verkligen som förhållandet mellan antalet n -gram i kandidatöversättningen som matchar exakt n -gram i någon av referensöversättningarna, avskurna med antalet n -gram i kandidatöversättningen.

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:

UnigramRäkna i maskinöversättning

Max antal i Ref

latex bord
Klippt Count =
min (Räkna i MT, Max antal i Ref)
de2

1

1
bild2

1

1
förbi1

1

1
mig1

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.

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 Modifierad Precision

För n = 2 , beräknar vi Bigram Modifierad Precision :

BigramsRäkna i MT

Max antal i Ref

Klippt Count =
min (Räkna i MT, Max antal i Ref)
bilden2

1

1
bild på1

0

0
bild av1

0

0
av mig1

1

1

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

fjäderverktygssvit

Trigram Modifierad Precision

För n = 3 , beräknar vi Trigram modifierad precision:

TrigramRäkna i MT

Max antal i Ref

Klippt Count =
min (Räkna i MT, Max antal i Ref)
bilden den1

0

0
bild bilden1

0

0
bilden av1

0

0
bild av mig1

0

0

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

4-grams modifierad precision

För n=4 , beräknar vi 4 gram modifierad precision:

4 gramRäkna

Max antal i Ref

Klippt Count =
min (Räkna i MT, Max antal i Ref)
bilden bilden1

0

0
bild bilden av1

0

mamta kulkarni skådespelare
0
bilden av mig1

0

0

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

Computing Brevity Penalty

Nu har vi beräknat alla precisionspoäng, låt oss hitta Brevity Penalty för översättningen:

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

  • Machine Translation Output Length = 6 (Maskinöversatt text: bilden bilden av mig)
  • Max referensutgångslängd = 6 (Referenstext-2: bilden klickades av mig)

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

Beräkna BLEU-poäng

Slutligen ges BLEU-poängen för ovanstående översättning av:

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

När vi byter ut värdena får vi,

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

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