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?
- Expressió matemàtica per a la puntuació BLEU
- Com calcular la puntuació BLEU?
- Implementació de la puntuació BLEU en Python
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 scriptAquí,
- 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 = 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 com funciona un ordinador | 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.
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 |
Precisió modificada del trigrama
Per n = 3 , calcularem el Precisió modificada del trigrama:
| Trigrama | Comptar 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 la | 1 | 0 | 0 |
| imatge la imatge | 1 | 0 | 0 |
| la imatge per | 1 | 0 | 0 |
| foto feta per mi | 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 travessa de comanda prèvia | 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ó:
- 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)
Informàtica BLEU Score
Finalment, la puntuació BLEU de la traducció anterior ve donada per:
En substituir els valors, obtenim,
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.>