logo

NLP – BLEU Score for evaluering af neural maskinoversættelse – Python

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?

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 filer

Her,

  • 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_ier 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æcisionp_iberegnes nemlig som forholdet mellem antallet af n -gram i kandidatoversættelsen, der matcher nøjagtigt n -gram i enhver af referenceoversættelserne, klippet af antallet af n -gram i kandidatoversættelsen.

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_ier antallet af n-gram orden i, der matcher Nemlig mellem kandidatoversættelsen og enhver af referenceoversættelserne.
  • ext{max-ref-count}_ier det maksimale antal forekomster af den specifikke n-gram af orden, jeg fandt i en enkelt referenceoversættelse.
  • ext{candidate-n-grams}_ier 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:

UnigramTæl i maskinoversættelse

Max antal i Ref

Klippet Antal =
min (tæller i MT, maks. antal i ref)
det2

1

1
billede2

1

Madhuri sagde kom nu
1
ved1

1

1
mig1

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.

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 modificeret præcision

Til n = 2 , beregner vi Bigram modificeret præcision :

BigrammerTæl i MT

Max antal i ref

Klippet Antal =
min (tæller i MT, maks. antal i ref)
billedet2

1

1
billede af1

0

0
billede af1

0

0
af mig1

1

1

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

Trigram modificeret præcision

Til n = 3 , beregner vi Trigram modificeret præcision:

TrigramTæl i MT

Max antal i ref

int parseint
Klippet Antal =
min (Tæller i MT, Maks. Antal i Ref)
billedet1

0

0
billede billedet1

0

0
billedet af1

0

0
billede af mig1

0

0

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

4 grams modificeret præcision

Til n = 4 , beregner vi 4 grams modificeret præcision:

4 gramTælle

Max antal i ref

Klippet Antal =
min (tæller i MT, maks. antal i ref)
billedet billedet1

0

0
billede billedet af1

0

0
billedet af mig1

0

java hale
0

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

Computing Brevity Penalty

Nu har vi beregnet alle præcisionsresultaterne, lad os finde Brevity Penalty for oversættelsen:

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

  • Maskinoversættelse outputlængde = 6 (Maskinoversat tekst: billedet billedet af mig)
  • Max reference udgangslængde = 6 (Referencetekst-2: billedet blev klikket af mig)

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

Udregning af BLEU-score

Endelig er BLEU-score for ovenstående oversættelse givet af:

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

Ved at erstatte værdierne 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

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