logo

PNL - Puntuació BLEU per a l'avaluació de la traducció automàtica neuronal - Python

Traducció automàtica neuronal (NMT) és una tasca estàndard PNL que implica traduir un text d'una llengua d'origen a una llengua d'arribada. BLEU (Superestudi d'avaluació bilingüe) és una puntuació que s'utilitza per avaluar les traduccions realitzades per un traductor automàtic. En aquest article, veurem les matemàtiques darrere de la puntuació BLEU i la seva implementació a Python.

Taula de contingut



Què és BLEU Score?

Com s'ha dit més amunt, la puntuació BLEU és una mètrica d'avaluació per a les tasques de traducció automàtica. Es calcula comparant el n-grams de frases traduïdes automàticament al n-gram de frases traduïdes per humans. Normalment, s'ha observat que la puntuació BLEU disminueix a mesura que augmenta la longitud de la frase. Això, però, pot variar segons el model utilitzat per a la traducció. El següent és un gràfic que mostra la variació de la puntuació BLEU amb la longitud de la frase.

Expressió matemàtica per a la puntuació BLEU

Matemàticament, la puntuació BLEU es dóna de la següent manera:

BLEU Score = BP * exp(sum_{i=1}^{N}(w_i * ln(p_i))



com executar un script

Aquí,

  • BP significa Penal de brevetat
  • w_i és el pes de la precisió de n grams d'ordre i (normalment els pesos són iguals per a tots els i)
  • p_iés la puntuació de precisió modificada per n grams d'ordre i.
  • N és l'ordre màxim de n grams a considerar (normalment fins a 4)

Precisió n-gram modificada (p_i)

La precisió modificadap_ide fet es calcula com la relació entre el nombre de n -grams a la traducció del candidat que coincideixin exactament n -grams en qualsevol de les traduccions de referència, retallades pel nombre de n -grams a la traducció del candidat.

p_i = frac{ ext{Count Clip}(matches_i, ext{max-ref-count}_i)}{ ext{candidate-n-grams}_i}



Aquí,

  • Comptar clips és una funció que retalla el nombre de n-grams coincidents (matches_i) pel recompte màxim del n-gram a totes les traduccions de referència ( ext{max-ref-count}_i.
  • matches_iés el nombre de n grams d'ordre i que coincideixen exactament entre la traducció candidata i qualsevol de les traduccions de referència.
  • ext{max-ref-count}_iés el nombre màxim d'ocurrències de l'n-gram d'ordre específic que he trobat en qualsevol traducció de referència única.
  • ext{candidate-n-grams}_iés el nombre total de n grams d'ordre que presento a la traducció candidata.

Penal de breutat (BP)

Penal de brevetat penalitza les traduccions que són més curtes que les traduccions de referència. L'expressió matemàtica per Penal de brevetat es dóna de la següent manera:

BP = exp(1- frac{r}{c})

Aquí,

  • r és la durada de la traducció del candidat
  • c és la longitud mitjana de les traduccions de referència.

Com calcular la puntuació BLEU?

Per a una millor comprensió del càlcul de la puntuació BLEU, prenguem un exemple. El següent és un cas per a la traducció del francès a l'anglès:

  • Text font (francès) : jo he fet clic en aquesta imatge
  • Text traduït automàticament : la imatge la foto feta per mi
  • Text de referència-1 : jo he fet clic en aquesta imatge
  • Text de referència-2 : vaig fer clic a la imatge

Podem veure clarament que la traducció feta per la màquina no és precisa. Calculem la puntuació BLEU per a la traducció.

Precisió modificada Unigram

Per n = 1, calcularem el Precisió modificada a Unigram:

UnigramaCompte en traducció automàtica

Recompte màxim a la Ref

Recompte retallat =
min (Recompte en MT, Recompte màxim en Ref)
el2

1

1
imatge2

1

com funciona un ordinador
1
per1

1

1
jo1

1

1

Aquí els unigrames (the, picture, by, me) estan extrets del text traduït automàticament. El recompte es refereix a la freqüència d'n-grams en tot el text traduït automàticament, i el recompte retallat fa referència a la freqüència d'unigrama en els textos de referència col·lectivament.

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 de precisió modificada

Per n = 2 , calcularem el Bigram de precisió modificada :

BigramesComptar en MT

Recompte màxim a la ref

Recompte retallat =
min (Recompte en MT, Recompte màxim en Ref)
la imatge2

1

1
imatge el1

0

0
imatge de1

0

0
Al meu costat1

1

1

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

Precisió modificada del trigrama

Per n = 3 , calcularem el Precisió modificada del trigrama:

TrigramaComptar en MT

Recompte màxim a la ref

variable de referència en java
Recompte retallat =
min (Recompte en MT, Recompte màxim en Ref)
la imatge la1

0

0
imatge la imatge1

0

0
la imatge per1

0

0
foto feta per mi1

0

0

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

Precisió modificada de 4 grams

Per n = 4 , calcularem el Precisió modificada de 4 grams:

4 gramsCompte

Recompte màxim a la ref

Recompte retallat =
min (Recompte en MT, Recompte màxim en Ref)
la imatge la imatge1

0

0
imatge la imatge per1

0

0
la foto feta per mi1

0

travessa de comanda prèvia
0

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

Càlcul de la Penal de Brevetat

Ara hem calculat totes les puntuacions de precisió, anem a trobar la penalització de brevetat per a la traducció:

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

  • Longitud de sortida de traducció automàtica = 6 (Text traduït automàticament: la imatge de la foto feta per mi)
  • Longitud màxima de sortida de referència = 6 (Text de referència-2: vaig fer clic a la imatge)

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

Informàtica BLEU Score

Finalment, la puntuació BLEU de la traducció anterior ve donada per:

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

En substituir els valors, obtenim,

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

Finalment, hem calculat la puntuació BLEU per a la traducció donada.

Implementació de la puntuació BLEU a Python

Després d'haver calculat la puntuació BLEU manualment, ja s'està acostumat al funcionament matemàtic de la puntuació BLEU. Tanmateix, Python NLTK proporciona un mòdul integrat per al càlcul de la puntuació BLEU. Calculem la puntuació BLEU per al mateix exemple de traducció que l'anterior, però aquesta vegada utilitzant NLTK.

Codi:

Python 3

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