BLEU (Bilingual Evaluation Understudy) is an algorithm for evaluating the quality of text which has been machine-translated from one natural language to another. Quality is considered to be the correspondence between a machine's output and that of a human: "the closer a machine translation is to a professional human translation, the better it is" – this is the central idea behind BLEU. BLEU was one of the first metrics to achieve a high correlation with human judgements of quality, and remains one of the most popular automated and inexpensive metric. -- 维基百科html
解释一下,首先bleu是一种文本评估算法,它是用来评估机器翻译跟专业人工翻译之间的对应关系,核心思想就是机器翻译越接近专业人工翻译,质量就越好,通过bleu算法得出的分数能够做为机器翻译质量的其中一个指标。python
现实中不少时候咱们须要用人工来评价翻译结果的,但这种方式很是慢,而且成本很是高,由于你须要请足够专业的翻译人员才能给出相对靠谱的翻译评估结果,通常这种人工评价都偏主观,而且很是依赖专业水平和经验。算法
为了解决这一问题,机器翻译领域的研究人员就发明了一些自动评价指标好比BLEU,METEOR和NIST等,在这些自动评价指标当中,BLEU是目前最接近人类评分的。ide
METEOR和NIST评价指标,笔者还未作深刻研究,有机会会针对这几个指标作个对比。工具
为何BLEU能做为机器翻译的一个评估指标,仍是得看看它的原理是什么。学习
接下来咱们逐个这几个概念:优化
N-gramthis
N-gram是一种统计语言模型,该模型能够将一句话表示n个连续的单词序列,利用上下文中相邻词间的搭配信息,计算出句子的几率,从而判断一句话是否通顺。lua
BLEU也是采用了N-gram的匹配规则,经过它可以算出比较译文和参考译文之间n组词的类似的一个占比。idea
例子:
原文: 猫坐在垫子上
机器翻译:The cat sat on the mat.
人工翻译:The cat is on the mat.
咱们分别看下1-4 gram的匹配状况:
1-gram
能够看到机器翻译6个词,有5个词命中参考觉得,那么它的匹配度为 5/6。
2-gram
2元词组的匹配度则是 3/5。
3-gram
3元词组的匹配度是1/4。
4-gram
4元词组的匹配状况就没有了。
通过上面的举例你应该很清楚n-gram是怎么计算了吧。通常状况1-gram能够表明原文有多少词被单独翻译出来,能够反映译文的充分性,2-gram以上能够反映译文的流畅性,它的值越高说明可读性越好。这两个指标是可以跟人工评价对标的。
可是它存在一些特殊状况,经过n-gram是没办法反映译文的正确性的,例如:
原文:猫坐在垫子上
机器译文: the the the the the the the.
参考译文:The cat is on the mat.
若是计算1-gram的话,你会发现全部the都匹配上了,匹配度是7/7
,这个确定不能反映充分性的,怎么办?
BLEU修正了这个算法,提出取机器翻译译文N-gram的出现次数和参考译文中N-gram最大出现次数中的最小值的算法,具体以下:
因此上面修正后的结果应该是count = 7,Max_ref_Count = 2,取它们之间的最小值为2,那么修正后的1-gram的匹配度应该为2/7
。
是时候拿出论文中的计算各阶N-gram的精度计算公式:
一眼看过去是否是以为很高大上,看不懂了有木有,解释一下吧:
表示取n-gram在翻译译文和参考译文中出现的最小次数,好比上面的1-gram出现的最小次数是2.
表示取n-gram在翻译译文中出现次数,好比上面的1-gram出现的次数是7.
ok,到这里你基本清楚bleu中n-gram精度究竟是怎么计算的了。
上面的计算已经足够好了吗? No,还得继续改进,举个例子:
机器译文:The cat
参考译文:The cat is on the mat.
若是出现这种短句子,你会发现计算n-gram的精度会得很高分,很显然此次的得分为1,但实际上它的得分应该是比较低的。针对翻译译文长度比参考译文要短的状况,就须要一个惩罚的机制去控制。
惩罚因子
这里的c是机器译文的词数,r是参考译文的词数,
这样的话咱们从新算精度就应该是:
BP = e^(1- 6 / 2) = 7.38905609893065
e是一个常无理数,是一个无限不循环小数,因此用e来表示2.718281828
Bleu算法
通过上面的各类改进,BLEU最终的计算公式以下:
BP咱们已经知道了,那么
又是什么鬼?先不用想这么多,其实就是一些数学运算,它的做用就是让各阶n-gram取权重服从均匀分布,就是说不论是1-gram、2-gram、3-gram仍是4-gram它们的做用都是同等重要的。因为随着n-gram的增大,整体的精度得分是呈指数降低的,因此通常N-gram最多取到4-gram。
说实话,数学用人话来解释是很是困难的,咱们仍是来经过例子来学习,仍是以前的:
机器翻译:The cat sat on the mat.
人工翻译:The cat is on the mat.
第一步:计算各阶n-gram的精度
P1 = 5 / 6 = 0.833333333333333
P2 = 3 / 5 = 0.6
P3 = 1 / 4 = 0.25
P4 = 0 / 3 = 0
第二步:加权求和
取权重:Wn = 1 / 4 = 0.25
加权求和:
第三步:求BP
机器翻译长度 = 参考译文长度,因此:
BP = 1
最后求BLEU
写程序的时候,不用费那么大的劲去实现上面的算法,现成的工具就能够用:
from nltk.translate.bleu_score import sentence_bleu reference = [['The', 'cat', 'is', 'on', 'the', 'mat']] candidate = ['The', 'cat', 'sat', 'on', 'the', 'mat'] score = sentence_bleu(reference, candidate) print(score) # 输出结果:0.5946035575013605
优势:方便、快速,结果比较接近人类评分。
缺点:
BLEU自己就不追求百分之百的准确性,也不可能作到百分之百,它的目标只是给出一个快且不差的自动评估解决方案。
BLEU原理其实并非很复杂,更可能是基于n-gram基础上的优化,写这篇文章的目的也是想梳理清楚BLEU可以解决的问题,还有不能解决的问题,这对本身后续思考如何经过其余手段去更好地提升翻译评估的能力有必定的启发做用。翻译质量评估自己就是MT领域的热门课题,若是咱们可以找到一个比BLEU更好的,这将会产生很大的价值。
最后,文中不少内容从其余参考文章均可以找到,参考文章对BLEU如何计算,原理也有很不错的讲解,你们也能够参考学习下。