机器翻译的评价指标——bleu

一、什么是bleu

​ BLEU(Bilingual Evaluation Understudy)是一种用于自动评估机器翻译质量的指标。它最初由Kishore Papineni等人在2002年提出,旨在解决人工评估翻译质量的主观性和费时性问题。BLEU的工作原理是将机器生成的翻译与人工参考翻译进行比较,并根据它们之间的相似性分配一个分数。我们可以通过微软的nltk框架来使用bleu指标。

BLEU的计算方式如下:

  1. 对于翻译结果(机器生成的翻译),它会计算参考翻译(目标值)之间的 n-gram(连续的 n 个词或字符序列)匹配度。

  2. 对每个 n-gram 匹配,BLEU将其与候选翻译中的 n-gram 数量相比较,并采用一种修正的精确匹配度度量来计算得分。

  3. 然后,BLEU将各个 n-gram 匹配的得分合并,通过计算几何平均值来得出最终的 BLEU 分数。通常,BLEU 的分数在0到1之间,表示翻译的质量,越接近1表示越好。

公式如下:
bleu=exp∑weight∗logP∗惩罚系数 bleu = exp^{\sum weight*logP}*惩罚系数 bleu=expweightlogP惩罚系数

二、什么是n-gram

​ 与其解释抽象的公式,不如来一段代码实战理解,请看下面这段代码。

from nltk.translate.bleu.score import sentence_bleu
reference = [['the','quick','brown','fox','jumped','over','the','lazy','dog']]
candidate = ['the','quick','brown','fox','jumped','over','the','lazy','dog']
score = sentence.bleu(reference, candidate)
print(score)
# out: 1.0

# 4-gram cumulative BLEU
candidate = ['the','fast','brown','fox','jumped','over','the','lazy','dog']
score = sentence_bleu(reference, candidate, weights=(0.25, 0.25, 0.25, 0.25))
print(score)
# out:0.75

# 手动计算
import numpy as np
score = np.exp(0.25 * (np.log(8/9) + np.log(6/8) + np.log(5/7) + np.log(4/6)))
print(score)
# out:0.75
  • 过短惩罚系数,上例预测结果与目标结果长度一致,故为1。

    • 当预测结果比目标结果短时,过短惩罚系数就不为1了。
  • 在实际中,参考句可能不止一句,所以reference是二维。

    • 实际上,只要reference比candidate多一个维度就可以,candidate未必是一维的。
  • n-gram实际上就是连续n个词一样。

  • weights是对每个gram赋予一个权重。

  • 4-gram考查了1个,2个,3个,4个连续的词相同的情况。

  • P是连续n个词相同的概率。

  • bleu一定是一个0-1之间的值。

    • P是0-1之间,logP是负数,乘以weights仍然是负数。
    • e的负数次幂在0-1之间。
    • 过短惩罚系数是一个0-1之间的值。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐