logo

PNL – Score BLEU pour l'évaluation de la traduction automatique neuronale – Python

Traduction automatique neuronale (NMT) est une tâche standard dans PNL cela implique de traduire un texte d’une langue source vers une langue cible. BLEU (Doublure d'Evaluation Bilingue) est un score utilisé pour évaluer les traductions effectuées par un traducteur automatique. Dans cet article, nous verrons les mathématiques derrière le score BLEU et son implémentation en Python.

Table des matières



Qu’est-ce que le score BLEU ?

Comme indiqué ci-dessus, BLEU Score est une mesure d'évaluation pour les tâches de traduction automatique. Il est calculé en comparant les n-grammes de phrases traduites automatiquement au n-gramme de phrases traduites par des humains. Habituellement, il a été observé que le score BLEU diminue à mesure que la durée de la peine augmente. Toutefois, cela peut varier en fonction du modèle utilisé pour la traduction. Ce qui suit est un graphique illustrant la variation du score BLEU en fonction de la longueur de la phrase.

Expression mathématique pour le score BLEU

Mathématiquement, le score BLEU est donné comme suit :

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



arraylist.sort

Ici,

  • PA représente Pénalité de brièveté
  • w_i est le poids pour une précision en n-grammes d'ordre i (généralement, les poids sont égaux pour tous les i)
  • p_iest le score de précision modifié n-gramme d'ordre i.
  • N est l'ordre maximum de n-grammes à considérer (généralement jusqu'à 4)

Précision n-gramme modifiée (p_i)

La précision modifiéep_iest en effet calculé comme le rapport entre le nombre de n -grammes dans la traduction candidate qui correspondent exactement n -grammes dans l'une des traductions de référence, tronqués par le nombre de n -grammes dans la traduction candidate.

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



Ici,

  • Count Clips est une fonction qui coupe le nombre de n-grammes correspondants (matches_i)par le nombre maximum de n-grammes dans toutes les traductions de référence ( ext{max-ref-count}_i.
  • matches_iest le nombre de n-grammes d'ordre i qui correspondent exactement entre la traduction candidate et l’une des traductions de référence.
  • ext{max-ref-count}_iest le nombre maximum d'occurrences du n-gramme d'ordre spécifique que j'ai trouvé dans une traduction de référence unique.
  • ext{candidate-n-grams}_iest le nombre total de n-grammes d'ordre que je présente dans la traduction candidate.

Pénalité de brièveté (BP)

Pénalité de brièveté pénalise les traductions plus courtes que les traductions de référence. L'expression mathématique de Pénalité de brièveté est donné comme suit :

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

Ici,

  • r est la longueur de la traduction candidate
  • c est la longueur moyenne des traductions de référence.

Comment calculer le score BLEU ?

Pour mieux comprendre le calcul du BLEU Score, prenons un exemple. Voici un cas de traduction du français vers l’anglais :

  • Texte source (français) : cette image est cliqué par moi
  • Texte traduit automatiquement : la photo la photo par moi
  • Texte de référence-1 : c'est moi qui clique sur cette image
  • Texte de référence-2 : c'est moi qui ai cliqué sur la photo

On voit bien que la traduction faite par la machine n’est pas exacte. Calculons le score BLEU pour la traduction.

Précision modifiée Unigram

Pour n = 1, nous allons calculer le Précision modifiée Unigram :

UnigrammeCompter dans la traduction automatique

Nombre maximum dans la réf.

Nombre tronqué =
min (nombre en MT, nombre maximum en réf)
le2

1

1
image2

1

système d'exploitation Linux
1
par1

1

1
moi1

1

1

Ici, les unigrammes (le, photo, par, moi) sont tirés du texte traduit automatiquement. Le nombre fait référence à la fréquence des n-grammes dans tout le texte traduit automatiquement, et le nombre tronqué fait référence à la fréquence des unigrammes dans l'ensemble des textes de référence.

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}

Précision modifiée bigramme

Pour n = 2 , nous calculerons le Précision modifiée bigramme :

BigrammesCompter en MT

Nombre maximum dans la réf.

Nombre tronqué =
min (nombre en MT, nombre maximum en réf)
l'image2

1

1
imaginez le1

0

0
photo par1

0

0
par moi1

1

1

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

Précision modifiée du trigramme

Pour n = 3 , nous calculerons le Précision modifiée du trigramme :

TrigrammeCompter en MT

Nombre maximum dans la réf.

kylie jenner âge
Nombre tronqué =
min (nombre en MT, nombre maximum en réf)
la photo le1

0

0
imaginez la photo1

0

0
la photo par1

0

0
photo de moi1

0

0

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

Précision modifiée de 4 grammes

Pour n = 4 , nous calculerons le Précision modifiée de 4 grammes :

4 grammesCompter

Nombre maximum dans la réf.

Nombre tronqué =
min (nombre en MT, nombre maximum en réf)
la photo la photo1

0

0
imaginez l'image par1

0

0
la photo par moi1

0

un tableau en java
0

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

Pénalité de brièveté informatique

Maintenant que nous avons calculé tous les scores de précision, trouvons la pénalité de brièveté pour la traduction :

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

  • Longueur de sortie de traduction automatique = 6 (Texte traduit automatiquement : l'image, l'image par moi)
  • Longueur de sortie de référence maximale = 6 (Texte de référence-2 : c'est moi qui ai cliqué sur l'image)

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

Calcul du score BLEU

Finalement, le score BLEU pour la traduction ci-dessus est donné par :

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

En substituant les valeurs, nous obtenons,

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

Enfin, nous avons calculé le score BLEU pour la traduction donnée.

Implémentation du score BLEU en Python

Après avoir calculé manuellement le score BLEU, on est désormais habitué au fonctionnement mathématique du score BLEU. Cependant, Python NLTK fournit un module intégré pour le calcul du score BLEU. Calculons le score BLEU pour le même exemple de traduction que ci-dessus mais cette fois en utilisant NLTK.

Code:

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