logo

PNL – Puntuación BLEU para evaluar la traducción automática neuronal – Python

Traducción automática neuronal (NMT) es una tarea estándar en PNL que implica traducir un texto de un idioma de origen a un idioma de destino. BLEU (Estudiante de evaluación bilingüe) es una puntuación utilizada para evaluar las traducciones realizadas por un traductor automático. En este artículo, veremos las matemáticas detrás de la puntuación BLEU y su implementación en Python.

Tabla de contenidos



¿Qué es la puntuación BLEU?

Como se indicó anteriormente, BLEU Score es una métrica de evaluación para tareas de traducción automática. Se calcula comparando la n-gramos de oraciones traducidas por máquina al n-grama de oraciones traducidas por humanos. Por lo general, se ha observado que la puntuación BLEU disminuye a medida que aumenta la duración de la frase. Sin embargo, esto puede variar según el modelo utilizado para la traducción. El siguiente es un gráfico que muestra la variación de la puntuación BLEU con la longitud de la oración.

Expresión matemática para puntuación BLEU

Matemáticamente, la puntuación BLEU se obtiene de la siguiente manera:

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



truncar y eliminar diferencia

Aquí,

  • PA representa Penalización por brevedad
  • w_i es el peso para una precisión de n gramos de orden i (normalmente los pesos son iguales para todos los i)
  • p_ies la puntuación de precisión modificada de n-gramas de orden i.
  • N es el orden máximo de n-gramas a considerar (normalmente hasta 4)

Precisión de n-gramas modificada (p_i)

La precisión modificadap_iDe hecho, se calcula como la relación entre el número de norte -gramas en la traducción candidata que coinciden exactamente norte -gramos en cualquiera de las traducciones de referencia, recortados por el número de norte -gramos en la traducción candidata.

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



Aquí,

  • Count Clips es una función que recorta el número de n-gramas coincidentes (matches_i)por el recuento máximo de n-gramas en todas las traducciones de referencia ( ext{max-ref-count}_i.
  • matches_ies el número de n-gramos de orden i que coinciden exactamente entre la traducción candidata y cualquiera de las traducciones de referencia.
  • ext{max-ref-count}_ies el número máximo de apariciones del n-grama de orden específico que encontré en cualquier traducción de referencia única.
  • ext{candidate-n-grams}_ies el número total de n-gramas de orden i presentes en la traducción candidata.

Penalización por brevedad (BP)

Penalización por brevedad penaliza las traducciones que sean más cortas que las traducciones de referencia. La expresión matemática para Penalización por brevedad se da de la siguiente manera:

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

Aquí,

  • r es la longitud de la traducción candidata
  • c es la longitud promedio de las traducciones de referencia.

¿Cómo calcular la puntuación BLEU?

Para comprender mejor el cálculo del BLEU Score, tomemos un ejemplo. A continuación se muestra un caso de traducción del francés al inglés:

  • Texto fuente (francés) : yo hice clic en esta imagen
  • Texto traducido automáticamente : la foto la foto hecha por mí
  • Texto de referencia-1 : esta imagen fue hecha por mí
  • Texto de referencia-2 : hice clic en la imagen

Podemos ver claramente que la traducción realizada por la máquina no es precisa. Calculemos la puntuación BLEU de la traducción.

Precisión modificada de Unigram

Para norte = 1, calcularemos el Precisión modificada de Unigram:

UnigramaContar en traducción automática

Recuento máximo en referencia

Recuento recortado =
min (Recuento en MT, Recuento máximo en Ref)
el2

1

1
imagen2

1

1
por1

1

1
a mí1

1

1

Aquí los unigramas (la, imagen, por, yo) están tomados del texto traducido automáticamente. El recuento se refiere a la frecuencia de n-gramas en todo el texto traducido automáticamente, y el recuento recortado se refiere a la frecuencia de unigramas en los textos de referencia en conjunto.

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}

Precisión modificada de Bigram

Para norte = 2 , calcularemos el Precisión modificada de Bigram :

10 1 millón
bigramasContar en MT

Conteo máximo en referencia

Recuento recortado =
min (Recuento en MT, Recuento máximo en Ref)
la imagen2

1

1
imagen el1

0

0
foto por1

0

0
por mi1

1

1

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

Precisión modificada de trigrama

Para norte = 3 , calcularemos el Precisión modificada del trigrama:

trigramaContar en MT

Conteo máximo en referencia

Recuento recortado =
min (Recuento en MT, Recuento máximo en Ref)
la imagen la1

0

0
imagen la imagen1

0

0
la foto por1

0

0
foto hecha por mi1

0

0

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

cómo inyectar una clase abstracta simulada

Precisión modificada de 4 gramos

Para norte =4 , calcularemos el Precisión modificada de 4 gramos:

4 gramosContar

Conteo máximo en referencia

Recuento recortado =
min (Recuento en MT, Recuento máximo en Ref)
la imagen la imagen1

0

0
imagen la imagen por1

0

0
la foto hecha por mi1

0

0

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

Penalización por brevedad informática

Ahora que hemos calculado todos los puntajes de precisión, encontremos la penalización por brevedad para la traducción:

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

  • Longitud de salida de traducción automática = 6 (Texto traducido automáticamente: la imagen, la imagen hecha por mí)
  • Longitud máxima de salida de referencia = 6 (Texto de referencia-2: hice clic en la imagen)

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

Calcular la puntuación BLEU

Finalmente, la puntuación BLEU para la traducción anterior viene dada por:

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

Al sustituir los valores, obtenemos,

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

convertir fecha a cadena

Finalmente, hemos calculado la puntuación BLEU para la traducción dada.

Implementación de puntuación BLEU en Python

Habiendo calculado la puntuación BLEU manualmente, uno ya está acostumbrado al funcionamiento matemático de la puntuación BLEU. Sin embargo, Python NLTK proporciona un módulo incorporado para el cálculo de la puntuación BLEU. Calculemos la puntuación BLEU para el mismo ejemplo de traducción anterior, pero esta vez usando NLTK.

Código:

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