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

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ó modificada p_i de 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:

Unigrama Compte en traducció automàtica

Recompte màxim a la Ref

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

1

1
imatge 2

1

1
per 1

1

1
jo 1

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 :

Bigrames Comptar en MT

Recompte màxim a la ref

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

1

1
imatge el 1

0

0
imatge de 1

0

0
Al meu costat 1

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:

Trigrama Comptar en MT

Recompte màxim a la ref

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

0

0
imatge la imatge 1

0

0
la imatge per 1

0

0
foto feta per mi 1

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 grams Compte

Recompte màxim a la ref

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

0

0
imatge la imatge per 1

0

0
la foto feta per mi 1

0

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.