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 ?
- Expression mathématique pour le score BLEU
- Comment calculer le score BLEU ?
- Implémentation du score BLEU en Python
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.sortIci,
- 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_i est 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ée
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_i est 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}_i est 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}_i est 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 :
| Unigramme | Compter dans la traduction automatique | Nombre maximum dans la réf. | Nombre tronqué = min (nombre en MT, nombre maximum en réf) |
|---|---|---|---|
| le | 2 | 1 | 1 |
| image | 2 | 1 système d'exploitation Linux | 1 |
| par | 1 | 1 | 1 |
| moi | 1 | 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.
Précision modifiée bigramme
Pour n = 2 , nous calculerons le Précision modifiée bigramme :
| Bigrammes | Compter en MT | Nombre maximum dans la réf. | Nombre tronqué = min (nombre en MT, nombre maximum en réf) |
|---|---|---|---|
| l'image | 2 | 1 | 1 |
| imaginez le | 1 | 0 | 0 |
| photo par | 1 | 0 | 0 |
| par moi | 1 | 1 | 1 |
Précision modifiée du trigramme
Pour n = 3 , nous calculerons le Précision modifiée du trigramme :
| Trigramme | Compter en MT | Nombre maximum dans la réf. kylie jenner âge | Nombre tronqué = min (nombre en MT, nombre maximum en réf) |
|---|---|---|---|
| la photo le | 1 | 0 | 0 |
| imaginez la photo | 1 | 0 | 0 |
| la photo par | 1 | 0 | 0 |
| photo de moi | 1 | 0 | 0 |
Précision modifiée de 4 grammes
Pour n = 4 , nous calculerons le Précision modifiée de 4 grammes :
| 4 grammes | Compter | Nombre maximum dans la réf. | Nombre tronqué = min (nombre en MT, nombre maximum en réf) |
|---|---|---|---|
| la photo la photo | 1 | 0 | 0 |
| imaginez l'image par | 1 | 0 | 0 |
| la photo par moi | 1 | 0 un tableau en java | 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 :
- 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)
Calcul du score BLEU
Finalement, le score BLEU pour la traduction ci-dessus est donné par :
En substituant les valeurs, nous obtenons,
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.>