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?
- Expresión matemática para puntuación BLEU
- ¿Cómo calcular la puntuación BLEU?
- Implementación de puntuación BLEU en Python
¿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 diferenciaAquí,
- 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_i es 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 modificada
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_i es 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}_i es 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}_i es 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:
| Unigrama | Contar en traducción automática | Recuento máximo en referencia | Recuento recortado = min (Recuento en MT, Recuento máximo en Ref) |
|---|---|---|---|
| el | 2 | 1 | 1 |
| imagen | 2 | 1 | 1 |
| por | 1 | 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.
Precisión modificada de Bigram
Para norte = 2 , calcularemos el Precisión modificada de Bigram :
10 1 millón
| bigramas | Contar en MT | Conteo máximo en referencia | Recuento recortado = min (Recuento en MT, Recuento máximo en Ref) |
|---|---|---|---|
| la imagen | 2 | 1 | 1 |
| imagen el | 1 | 0 | 0 |
| foto por | 1 | 0 | 0 |
| por mi | 1 | 1 | 1 |
Precisión modificada de trigrama
Para norte = 3 , calcularemos el Precisión modificada del trigrama:
| trigrama | Contar en MT | Conteo máximo en referencia | Recuento recortado = min (Recuento en MT, Recuento máximo en Ref) |
|---|---|---|---|
| la imagen la | 1 | 0 | 0 |
| imagen la imagen | 1 | 0 | 0 |
| la foto por | 1 | 0 | 0 |
| foto hecha por mi | 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 gramos | Contar | Conteo máximo en referencia | Recuento recortado = min (Recuento en MT, Recuento máximo en Ref) |
|---|---|---|---|
| la imagen la imagen | 1 | 0 | 0 |
| imagen la imagen por | 1 | 0 | 0 |
| la foto hecha por mi | 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:
- 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)
Calcular la puntuación BLEU
Finalmente, la puntuación BLEU para la traducción anterior viene dada por:
Al sustituir los valores, obtenemos,
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.>