使用 Python 评估神经机器翻译的 BLEU 分数

pythonserver side programmingprogramming

使用 NLP 中的 NMT 或神经机器翻译,我们可以将文本从给定语言翻译成目标语言。为了评估翻译的效果,我们使用 Python 中的 BLEU 或双语评估替补分数。

BLEU 分数的工作原理是将机器翻译的句子与人工翻译的句子进行比较,两者均以 n-gram 形式进行。此外,随着句子长度的增加,BLEU 分数会降低。一般来说,BLEU 分数在 0 到 1 的范围内,值越高表示质量越好。但是,获得满分的情况非常罕见。请注意,评估是基于子字符串匹配进行的,它不考虑语言的其他方面,如连贯性、时态和语法等。

公式

BLEU = BP * exp(1/n * sum_{i=1}^{n} log(p_i))

这里,各种术语具有以下含义 −

  • BP 是简洁性惩罚。它根据两个文本的长度调整 BLEU 分数。其公式如下:-

BP = min(1, exp(1 - (r / c)))
  • n 是 n-gram 匹配的最大阶数

  • p_i 是精度分数

算法

  • 步骤 1 - 导入数据集库。

  • 步骤 2 - 使用 load_metric 函数并以 bleu 为参数。

  • 步骤 3 - 列出翻译字符串的单词列表。

  • 步骤 4 - 使用所需输出字符串的单词重复步骤 3。

  • 步骤 5 - 使用 bleu.compute 查找 bleu 值。

示例 1

在此示例中,我们将使用 Python 的 NLTK 库来计算德语句子机器翻译成英语的 BLEU 分数。

  • 源文本(德语)- es regnet heute

  • 机器翻译文本 - 今天下雨

  • 所需文本 - 今天正在下雨,今天正在下雨

虽然我们可以看到翻译不正确,但我们可以通过查找 BLUE 分数来更好地了解翻译质量。

示例

#导入库
从数据集导入 load_metric

#使用 load_metric 函数
bleu = load_metric("bleu")

#设置预测字符串
predictions = [["it", "rain", "today"]]

#设置所需字符串
references = [
   [["it", "is", "raining", "today"], 
   ["it", "was", "raining", "today"]]
]

#print the values
print(bleu.compute(predictions=predictions, references=references))

输出

{'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}

您可以看到翻译效果不是很好,因此 bleu 分数为 0。

示例 2

在此示例中,我们将再次计算 BLEU 分数。但这次,我们将采用机器翻译成英语的法语句子。

  • 源文本(德语)- nous partons en voyage

  • 机器翻译文本 - 我们要去旅行

  • 所需文本 - 我们要去旅行,我们要去旅行

您可以看到,这次翻译的文本更接近所需文本。让我们检查一下它的 BLEU 分数。

示例

#导入库
从数据集导入 load_metric

#使用 load_metric 函数
bleu = load_metric("bleu")

#设置预测字符串
predictions = [["we", "going", "on", "a", "trip"]]

#设置所需字符串
references = [
   [["we", "are", "going", "on", "a", "trip"], 
   ["we", "were", "going", "on", "a", "trip"]]
]

#打印值
print(bleu.compute(predictions=predictions, references=references))

输出

{'bleu': 0.5789300674674098, 'precisions': [1.0, 0.75, 0.666666666666666, 0.5], 'brevity_penalty': 0.8187307530779819, 'length_ratio': 0.8333333333333334, 'translation_length': 5, 'reference_length': 6}

您可以看到,这次完成的翻译非常接近所需的输出,因此蓝色分数也高于 0.5。

结论

BLEU 分数是一种出色的工具,可用于检查翻译模型的效率,从而进一步改进模型以产生更好的结果。虽然 BLEU 分数可用于大致了解模型,但它仅限于特定词汇,并且经常忽略语言的细微差别。这就是为什么 BLEU 分数与人类判断的协调性如此之低的原因。但有一些替代方案,如 ROUGE 分数、METEOR 指标和 CIDEr 指标,您绝对可以尝试。


相关文章