机器翻译的评价指标——bleu
一、什么是bleu
BLEU(Bilingual Evaluation Understudy)是一种用于自动评估机器翻译质量的指标。它最初由Kishore Papineni等人在2002年提出,旨在解决人工评估翻译质量的主观性和费时性问题。BLEU的工作原理是将机器生成的翻译与人工参考翻译进行比较,并根据它们之间的相似性分配一个分数。我们可以通过微软的nltk框架来使用bleu指标。
BLEU的计算方式如下:
-
对于翻译结果(机器生成的翻译),它会计算参考翻译(目标值)之间的 n-gram(连续的 n 个词或字符序列)匹配度。
-
对每个 n-gram 匹配,BLEU将其与候选翻译中的 n-gram 数量相比较,并采用一种修正的精确匹配度度量来计算得分。
-
然后,BLEU将各个 n-gram 匹配的得分合并,通过计算几何平均值来得出最终的 BLEU 分数。通常,BLEU 的分数在0到1之间,表示翻译的质量,越接近1表示越好。
公式如下:
b
l
e
u
=
e
x
p
∑
w
e
i
g
h
t
∗
l
o
g
P
∗
惩罚系数
bleu = exp^{\sum weight*logP}*惩罚系数
bleu=exp∑weight∗logP∗惩罚系数
二、什么是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之间的值。