【NLP】BLEU值
为了解决这个问题,首先需要知道BLEU值是如何计算出来的。
BLEU全称是Bilingual Evaulation Understudy。其意思是双语评估替补。所谓Understudy(替补),意思是代替人进行翻译结果的评估。
BLEU的思想基于Count based Model,尽管它并不完美,但它提供了一种非常有效的以单一数字指标评估机器翻译结果的方法。
下面以一个例子说明BLEU的计算。
假如正确的翻译参考(2)个是:
The cat is on the desk.
There is a cat on the desk.
那么很自然想到,用实际翻译结果中出现在参考翻译中的单词数除以实际翻译结果单词总数,是一种评估方法。例如,若翻译结果为The cat are on the desk
。则评分为:\(5/6\),只有are没有出现,这看起来是合理的。但是若翻译结果为is is is is is is is
,那么很显然,评分为\(6/6\),is在参考翻译句子中出现了。很明显,这就不对了。
一个解决方法是,规定实际翻译结果中每个单词的计数不得超过在单个参考翻译中出现的最大次数。即上述is is is is is is
结果,单词is在参考翻译中出现的最大次数是1,因此,评分为\(1/6\)。
这是比较合理的。
还有个因素需要考虑,假如实际翻译句子为desk the on cat a is there
,那么得分为\(7/7\),虽然单词都出现了,上面的方法仅仅考虑了uni-gram,句子的流畅度却没有考虑。因此,根据“平滑”的思想,进一步考虑bi-gram,tri-gram。实际应用中,一般是考虑1-gram到4-gram。具体来说:
计算所有单个单词,\(x_i\)在参考翻译中的得分,计算方式为:
\(在参考翻译中的最大出现次数在实际翻译中的出现次数score1 = \frac{\sum_{i=1}^nx_i在参考翻译中的最大出现次数}{\sum_{i=1}^nx_i在实际翻译中的出现次数}\)
式中,\(n\)是一元组,即单个单词数(不包括重复)。
计算所有二元组,记为\(x_i\)在参考翻译中的得分,计算方式为:
\(在参考翻译中的最大出现次数在实际翻译中的出现次数score2 = \frac{\sum_{i=1}^nx_i在参考翻译中的最大出现次数}{\sum_{i=1}^nx_i在实际翻译中的出现次数}\)
式中,\(n\)是二元组数(不包括重复)。
类似的计算三元组,四元组得分。
可见,若翻译结果好,每个得分的值就是1。
最后,将四个得分平均(或加权),得到最后的分数:
\(score = \frac{1}{4}*(score1+score2+score3+score4)\)
实际应用中,常常取自然指数作为最后的评分值,即:
$score =e^{ \frac{1}{4}*(score1+score2+score3+score4)} $
现在的应用(paper)中评估BLEU值,一般取n-gram从1到4,并不做平均,而是做加和再取对数值。即实际中的BLEU值计算方式为:
\(BLEU = e^{ (score1+score2+score3+score4)}\)
可见,如果翻译结果恰为某个参考翻译结果,四个得分都取1,最终的\(BLEU\)值为\(e^4=54.598\),即BLEU值最大为54.598分。