Pontuação BLEU para avaliação de tradução automática neural usando Python
Usando NMT ou Tradução Automática Neural em PNL, podemos traduzir um texto de um determinado idioma para um idioma de destino. Para avaliar o desempenho da tradução, usamos a pontuação BLEU ou Bilingual Evaluation Understudy em Python.
O BLEU Score funciona comparando frases traduzidas automaticamente com frases traduzidas por humanos, ambas em n-gramas. Além disso, com o aumento do comprimento das frases, a pontuação BLEU diminui. Em geral, uma pontuação BLEU varia de 0 a 1 e um valor mais alto indica melhor qualidade. No entanto, alcançar uma pontuação perfeita é muito raro. Observe que a avaliação é feita com base na correspondência de substrings e não considera outros aspectos da linguagem, como coerência, tempos verbais e gramática, etc.
Fórmula
BLEU = BP * exp(1/n * sum_{i=1}^{n} log(p_i))
Aqui, os vários termos têm os seguintes significados -
BP é a Pena de Brevidade. Ajusta a pontuação BLEU com base na extensão dos dois textos. Sua fórmula é dada por -
BP = min(1, exp(1 - (r / c)))
n é a ordem máxima de correspondência de n-gramas
-
p_i é a pontuação de precisão
Algoritmo
Etapa 1 - Importar biblioteca de conjuntos de dados.
Step 2 - Use a função load_metric com bleu como parâmetro.
Etapa 3 - Faça uma lista com as palavras da string traduzida.
Etapa 4 - Repita a etapa 3 com as palavras da string de saída desejada.
Etapa 5 - Use bleu.compute para encontrar o valor do bleu.
Exemplo 1
Neste exemplo, usaremos a biblioteca NLTK do Python para calcular a pontuação BLEU para uma máquina de frases alemã traduzida para inglês.
Texto fonte (alemão) - es regnet heute
Texto traduzido automaticamente - choveu hoje
Texto desejado - está chovendo hoje, estava chovendo hoje
Embora possamos perceber que a tradução não foi feita corretamente, podemos ter uma visão melhor da qualidade da tradução encontrando a pontuação AZUL.
Exemplo
#import the libraries
from datasets import load_metric
#use the load_metric function
bleu = load_metric("bleu")
#setup the predicted string
predictions = [["it", "rain", "today"]]
#setup the desired string
references = [
[["it", "is", "raining", "today"],
["it", "was", "raining", "today"]]
]
#print the values
print(bleu.compute(predictions=predictions, references=references))
Saída
{'bleu': 0.0, 'precisions': [0.6666666666666666, 0.0, 0.0, 0.0], 'brevity_penalty': 0.7165313105737893, 'length_ratio': 0.75, 'translation_length': 3, 'reference_length': 4}
Você pode ver que a tradução feita não é muito boa e assim, a pontuação do bleu sai como 0.
Exemplo 2
Neste exemplo, calcularemos novamente a pontuação BLEU. Mas desta vez, pegaremos uma frase em francês que foi traduzida automaticamente para o inglês.
Texto fonte (alemão) − nous partons en voyage
Texto traduzido automaticamente - vamos viajar
Texto desejado - vamos viajar, íamos viajar
Você pode ver que desta vez o texto traduzido está muito mais próximo do texto desejado. Vamos verificar a pontuação do BLEU.
Exemplo
#import the libraries
from datasets import load_metric
#use the load_metric function
bleu = load_metric("bleu")
#steup the predicted string
predictions = [["we", "going", "on", "a", "trip"]]
#steup the desired string
references = [
[["we", "are", "going", "on", "a", "trip"],
["we", "were", "going", "on", "a", "trip"]]
]
#print the values
print(bleu.compute(predictions=predictions, references=references))
Saída
{'bleu': 0.5789300674674098, 'precisions': [1.0, 0.75, 0.6666666666666666, 0.5], 'brevity_penalty': 0.8187307530779819, 'length_ratio': 0.8333333333333334, 'translation_length': 5, 'reference_length': 6}
Você pode perceber que desta vez a tradução realizada ficou bem próxima da saída desejada e assim, a pontuação azul também é superior a 0,5.
Conclusão
O BLEU Score é uma ferramenta maravilhosa para verificar a eficiência de um modelo de tradução e assim melhorá-lo ainda mais para produzir melhores resultados. Embora a pontuação BLEU possa ser usada para se ter uma ideia aproximada sobre um modelo, ela é limitada a um vocabulário específico e muitas vezes ignora as nuances da linguagem. É por isso que há tão pouca coordenação entre a pontuação BLEU e o julgamento humano. Mas existem algumas alternativas como pontuação ROUGE, métrica METEOR e métrica CIDEr que você pode definitivamente tentar.