@kpatrick
2019-10-18T16:18:14.000000Z
字数 2539
阅读 269
nlp
笔记
机器翻译
BLEU(bilingual evaluation understudy),中文名称为双语互译质量辅助工具,计算这个指标,需要使用机器翻译好的文本(称作candidate docs)以及一些专业翻译人员翻译的文本(称作reference docs)。本质上讲 BLEU 就是用来衡量机器翻译文本与参考文本之间的相似程度的指标,取值范围在0-1,取值越靠近1表示机器翻译结果越好。 然而这个指标也是经过多次的更新升级。
最初的BLEU计算特别简单,通常的讲,当我们自己计算两个文本之间的相似程度的时候,我们会考虑单词的频率,最早的BLEU就是采用了这种思想,计算方法是:使用一个累加器表示candidate中的词在reference doc中出现的次数,从candidate doc中的第一个词开始比较,如果在参考文本中出现过,那么计数加1。最后使用这个累加值除以candidate doc中的单词数目即可计算得到文本的BLEU取值,我们称之为Precision,for example:
Candidate | the | the | the | the | the | the | the |
---|---|---|---|---|---|---|---|
Reference 1 | the | cat | is | on | the | mat | |
Reference 2 | there | is | a | cat | on | the | mat |
根据这个例子和上述的算法,可以很容易的计算当前文本的precision。整个candidate doc的单词长度为7,而且每一个单词 the 都在reference doc里面出现过,所以此时累加值为7,因此准确度为:
但是实际上这个翻译非常不理想,这也是最初的BLEU评估指标不完善的地方,当遇到出现较多常见词汇时,翻译质量不高的译文还能够得到较高的precision,因此也诞生了后续的改良型BLEU计算指标的算法.
BLEU实现者的主要编程任务是将候选翻译的n-gram与参考翻译的n-gram进行比较并计算匹配数。 这些匹配与位置无关。 匹配越多,候选翻译就越好。 为简单起见,我们首先关注计算unigram匹配。
从上面的例子可以看到,最初的BLEU的分数在这种极端的情况下并不可信。优化后的BLEU引入了词组,构成gram。初版的BLEU可以看成词组只有1个单词,因此可以称为uni-gram。
针对每种不同长度的词组(bi-gram, tri-gram, ···, n-gram),都可以计算出一个相应的precision:。对于不同长度的gram的得分,最终需要做几个加权平均,得出最终的BLEU分数。
对于每一个gram,计算的方式如下:
- candidate doc以为长度截取,假设有个,选取第个为,在翻译中出现的次数为;
- reference doc的数目为,在第j个参考翻译中的出现次数为
- 选取中的最大值:
- 选取和中的最小值:
- 最终,长度为的的得分为:
上述公式得到candidate doc中对长度为的的得分,一般情况下,一般最大取到4即可,最后对加权平均后作为最终翻译BLUE得分。
上面改良型的BLEU的计算公式会受到翻译句子长短的影响,句子越短,越可能得到高分,为了防止模型最终倾向输出短句子,需要在评估的指标计算中加入惩罚因子,这个因子是跟句子的长度直接相关的,句子越短,计算分数时权重越低。
如上的改良型BLEU的计算公式基本可以解决翻译中的常见的词汇对翻译结果评估的影响, 比如参考第一个翻译例子。但是上述的方法针对于翻译结果为短句依然会得出不准确的评估。for example:
Candidate | the | cat | |||||
---|---|---|---|---|---|---|---|
Reference 1 | the | cat | is | on | the | mat | |
Reference 2 | there | is | a | cat | on | the | mat |
因此在这个基础上引入了对于短翻译句子的惩罚因子,此处定义一个概念:最佳匹配。
当candidate doc长度等于任何一个reference doc的长度的时候,我们称此时为最佳匹配,此时不需要对翻译的结果进行惩罚;
当candidate doc的长度不等于任何reference doc的长度的时候,需要引入一个参考长度,同时定义candidate doc的长度为,惩罚因子计算公式如下:
综上所述, 含有惩罚因子的BLEU最终的计算公式如下: