BLEU算法(例子和公式解释)

1.前言

最近在利用transformer自动化生成弹幕。在transformer的实现中,用到了一个标准BLEU标准。这个标准全称为bilingual evaluation understudy。同时参考了一些文章的介绍:

最后根据自己的理解解释一下这个算法的含义。

2.N-gram

BLEU测评标准,主要是利用了N-gram来对翻译译文和标准译文进行一个一个匹对。比如:

机器译文:It is a nice day today
人工译文:Today is a nice day

2.1 1-gram

如果用1-gram进行匹配的话,则可以得到:
1-gram
这时候,机器译文可以匹配到5个词语,而它总词语数为6,所以匹配度为:5/65/6

2.2 3-gram

如果使用3-gram进行匹配:
3-gram
可以看到,机器译文可以组成4个词组,而匹配上了2个词组,所以匹配度为:2/42/4

2.3 N-gram总结

n-gram匹配以此类推,一般使用1-gram,2-gram,3-gram和4-gram来衡量句子与句子之间的匹配度。1-gram的结果代表了文中有多少个词被单独翻译出来了,因此它反映的是这篇译文的忠实度;而当我们计算2-gram以上时,更多时候结果反映的是译文的流畅度,值越高文章的可读性就越好。

3. BLEU算法

3.1 召回率

上面的n-gram方法,只考虑了机器译文中的词语数,而没有同时考虑人工译文中出现的次数。举个例子:

机器译文:the the the the 
人工译文:The cat is standing on the ground

如果使用1-gram方法进行匹配,则得到100%的匹配度。这是因为“the”这个词语在人工译文中都出现了,但这个100%的匹配度显然是不准确的。因此BLEU算法修正了这个错误,改为考虑词语出现在译文中的最小次数:
countk=min(ck,sk) count_{k} = min(c_k,s_k)
其中kk表示在机器译文中的第kk个词语,ckc_k则代表在机器译文中这个词语出现的次数,而sks_k则代表在人工译文中这个词语出现的次数。最后可以得到修正后的匹配度:1/41/4

3.2 BLEU公式

首先定义几个数学符号:

  • 人工译文表示为sjs_j,其中jMj \in MMM表示共有MM个参考答案。
  • 翻译译文表示cic_i,其中iEi \in EEE表示共有EE个翻译。
  • N-gram表示nn个单词长度的词组集合,令kk表示第kk个词组
  • hk(ci)h_k(c_i) 表示第kk个词组在翻译译文cic_i中出现的次数
  • hk(si,j)h_k(s_{i,j}) 表示第kk个词组在标准答案si,js_{i,j}中出现的次数

最后可以得到计算每个n-gram的公式:
Pn=iEkKmin(hk(ci),minjMhk(si,j))iEkKmin(hk(ci)) P_n = \frac{\sum_{i}^{E} \sum_{k}^{K} min(h_k(c_i), min_{j \in M} h_k(s_{i,j}))}{\sum_{i}^{E} \sum_{k}^{K} min(h_k(c_i))}

  • 在分子中,minjMhk(si,j)min_{j \in M} h_k(s_{i,j})指的是第k个词组在si,js_{i,j}中的最小次数,也就是相当于找了最相似的候选句子

3.3 惩罚因子

上面的算法已经足够可以有效的翻译评估了,然而N-gram的匹配度可能会随着句子长度的变短而变好,因此会存在这样一个问题:一个翻译引擎只翻译出了句子中部分句子且翻译的比较准确,那么它的匹配度依然会很高。为了避免这种评分的偏向性,BLEU在最后的评分结果中引入了长度惩罚因子(Brevity Penalty)

BP={1        if  lc>lse1lslc   if  lc<=ls BP=\left\{ \begin{aligned} 1 ~~~~~~~~ if ~~l_c > l_s \\ e^{1-\frac{l_s}{l_c}} ~~~ if ~~l_c <= l_s \\ \end{aligned} \right.

BP的计算公式如上。lcl_c代表表示机器翻译译文的长度,lsl_s表示参考答案的有效长度。当存在多个参考译文时,选取和翻译译文最接近的长度。当翻译译文长度大于参考译文的长度时,惩罚系数为11,意味着不惩罚,只有机器翻译译文长度小于参考答案才会计算惩罚因子。

3.4 BLEU最终公式

由于各N-gram统计量的精度随着阶数的升高而呈指数形式递减,所以为了平衡各阶统计量的作用,对其采用几何平均形式求平均值然后加权,再乘以长度惩罚因子,得到最后的评价公式:
BLEU=BP×exp(n=1NWnlog(Pn)) BLEU = BP \times exp(\sum_{n=1}^{N} W_n log(P_n))
BLEU的原型系统采用的是均匀加权,即Wn=1/NW_n=1/N 。N的上限取值为4,即最多只统计4-gram的精度。

4.实例

4.1 句子间的BLEU

翻译译文:Going to play basketball this afternoon ?
人工译文:Going to play basketball in the afternoon ?

其中翻译译文gram长度为:7,人工译文长度为:8

  • 1-gram计算:P1=6/7P_1 = 6/7
  • 2-gram计算:P2=4/6P_2 = 4/6
  • 3-gram计算:P3=2/5P_3 = 2/5
  • 4-gram计算:P4=1/4P_4 = 1/4
  • BP计算:BP=exp(18/7)BP = exp(1-8/7)

最后根据公式计算BLEU的值:
BLEU=BP×exp((log(P1)+log(P2)+log(P3)+log(P4))/4)=0.4238 BLEU = BP \times exp( (log(P_1) + log(P_2) + log(P_3) + log(P_4))/4) = 0.4238

4.2 多个句子间的BLEU

翻译译文:
(1)Going to play basketball this afternoon ?
(2)Going to play basketball afternoon ?
人工译文:
(1)Going to play basketball in the afternoon ?
(2)Going to play basketball in the afternoon ?

上面的翻译译文有两个,其对应的人工译文也是有两个。

第一个翻译译文长度:7;第二个翻译译文长度:6
第一个人工译文长度:8;第二个人工译文长度:8

  • 1-gram计算:P1=6+67+6=1213P_1 = \frac{6+6}{7+6} = \frac{12}{13}
  • 2-gram计算:P2=4+46+5=811P_2 = \frac{4+4}{6+5} = \frac{8}{11}
  • 3-gram计算:P3=2+25+4=49P_3 = \frac{2+2}{5+4} = \frac{4}{9}
  • 4-gram计算:P4=1+14+3=27P_4 = \frac{1+1}{4+3} = \frac{2}{7}
  • BP计算:BP=exp(1(8+8)/(7+6))=0.79392...BP = exp(1-(8+8)/(7+6)) = 0.79392...

最后根据公式计算BLEU的值:
BLEU
BLEU=BP×exp((log(P1)+log(P2)+log(P3)+log(P4))/4)=0.4290 BLEU = BP \times exp( (log(P_1) + log(P_2) + log(P_3) + log(P_4))/4) = 0.4290

总的来说,如果是评价一个语料集的BLEU,需要把所有的句子进行整体考虑,来计算BLEU,而不是把每个句子的BLEU求和平均。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章