文章目录
1.前言
最近在利用transformer自动化生成弹幕。在transformer的实现中,用到了一个标准BLEU标准。这个标准全称为bilingual evaluation understudy。同时参考了一些文章的介绍:
- 机器翻译评测——BLEU算法详解:http://www.cnblogs.com/by-dream/p/7679284.html
最后根据自己的理解解释一下这个算法的含义。
2.N-gram
BLEU测评标准,主要是利用了N-gram来对翻译译文和标准译文进行一个一个匹对。比如:
机器译文:It is a nice day today
人工译文:Today is a nice day
2.1 1-gram
如果用1-gram进行匹配的话,则可以得到:
这时候,机器译文可以匹配到5个词语,而它总词语数为6,所以匹配度为:
5
/
6
5/6
5/6
2.2 3-gram
如果使用3-gram进行匹配:
可以看到,机器译文可以组成4个词组,而匹配上了2个词组,所以匹配度为:
2
/
4
2/4
2/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算法修正了这个错误,改为考虑词语出现在译文中的最小次数:
c
o
u
n
t
k
=
m
i
n
(
c
k
,
s
k
)
count_{k} = min(c_k,s_k)
countk=min(ck,sk)
其中
k
k
k表示在机器译文中的第
k
k
k个词语,
c
k
c_k
ck则代表在机器译文中这个词语出现的次数,而
s
k
s_k
sk则代表在人工译文中这个词语出现的次数。最后可以得到修正后的匹配度:
1
/
4
1/4
1/4
3.2 BLEU公式
首先定义几个数学符号:
- 人工译文表示为 s j s_j sj,其中 j ∈ M j \in M j∈M, M M M表示共有 M M M个参考答案。
- 翻译译文表示 c i c_i ci,其中 i ∈ E i \in E i∈E, E E E表示共有 E E E个翻译。
- N-gram表示 n n n个单词长度的词组集合,令 k k k表示第 k k k个词组
- h k ( c i ) h_k(c_i) hk(ci) 表示第 k k k个词组在翻译译文 c i c_i ci中出现的次数
- h k ( s i , j ) h_k(s_{i,j}) hk(si,j) 表示第 k k k个词组在标准答案 s i , j s_{i,j} si,j中出现的次数
最后可以得到计算每个n-gram的公式:
P
n
=
∑
i
E
∑
k
K
m
i
n
(
h
k
(
c
i
)
,
m
i
n
j
∈
M
h
k
(
s
i
,
j
)
)
∑
i
E
∑
k
K
m
i
n
(
h
k
(
c
i
)
)
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))}
Pn=∑iE∑kKmin(hk(ci))∑iE∑kKmin(hk(ci),minj∈Mhk(si,j))
- 在分子中, m i n j ∈ M h k ( s i , j ) min_{j \in M} h_k(s_{i,j}) minj∈Mhk(si,j)指的是第k个词组在 s i , j s_{i,j} si,j中的最小次数,也就是相当于找了最相似的候选句子。
3.3 惩罚因子
上面的算法已经足够可以有效的翻译评估了,然而N-gram的匹配度可能会随着句子长度的变短而变好,因此会存在这样一个问题:一个翻译引擎只翻译出了句子中部分句子且翻译的比较准确,那么它的匹配度依然会很高。为了避免这种评分的偏向性,BLEU在最后的评分结果中引入了长度惩罚因子(Brevity Penalty)。
B P = { 1 i f l c > l s e 1 − l s l c i f l c < = l s 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={1 if lc>lse1−lcls if lc<=ls
BP的计算公式如上。 l c l_c lc代表表示机器翻译译文的长度, l s l_s ls表示参考答案的有效长度。当存在多个参考译文时,选取和翻译译文最接近的长度。当翻译译文长度大于参考译文的长度时,惩罚系数为 1 1 1,意味着不惩罚,只有机器翻译译文长度小于参考答案才会计算惩罚因子。
3.4 BLEU最终公式
由于各N-gram统计量的精度随着阶数的升高而呈指数形式递减,所以为了平衡各阶统计量的作用,对其采用几何平均形式求平均值然后加权,再乘以长度惩罚因子,得到最后的评价公式:
B
L
E
U
=
B
P
×
e
x
p
(
∑
n
=
1
N
W
n
l
o
g
(
P
n
)
)
BLEU = BP \times exp(\sum_{n=1}^{N} W_n log(P_n))
BLEU=BP×exp(n=1∑NWnlog(Pn))
BLEU的原型系统采用的是均匀加权,即
W
n
=
1
/
N
W_n=1/N
Wn=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计算: P 1 = 6 / 7 P_1 = 6/7 P1=6/7
- 2-gram计算: P 2 = 4 / 6 P_2 = 4/6 P2=4/6
- 3-gram计算: P 3 = 2 / 5 P_3 = 2/5 P3=2/5
- 4-gram计算: P 4 = 1 / 4 P_4 = 1/4 P4=1/4
- BP计算: B P = e x p ( 1 − 8 / 7 ) BP = exp(1-8/7) BP=exp(1−8/7)
最后根据公式计算BLEU的值:
B
L
E
U
=
B
P
×
e
x
p
(
(
l
o
g
(
P
1
)
+
l
o
g
(
P
2
)
+
l
o
g
(
P
3
)
+
l
o
g
(
P
4
)
)
/
4
)
=
0.4238
BLEU = BP \times exp( (log(P_1) + log(P_2) + log(P_3) + log(P_4))/4) = 0.4238
BLEU=BP×exp((log(P1)+log(P2)+log(P3)+log(P4))/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计算: P 1 = 6 + 6 7 + 6 = 12 13 P_1 = \frac{6+6}{7+6} = \frac{12}{13} P1=7+66+6=1312
- 2-gram计算: P 2 = 4 + 4 6 + 5 = 8 11 P_2 = \frac{4+4}{6+5} = \frac{8}{11} P2=6+54+4=118
- 3-gram计算: P 3 = 2 + 2 5 + 4 = 4 9 P_3 = \frac{2+2}{5+4} = \frac{4}{9} P3=5+42+2=94
- 4-gram计算: P 4 = 1 + 1 4 + 3 = 2 7 P_4 = \frac{1+1}{4+3} = \frac{2}{7} P4=4+31+1=72
- BP计算: B P = e x p ( 1 − ( 8 + 8 ) / ( 7 + 6 ) ) = 0.79392... BP = exp(1-(8+8)/(7+6)) = 0.79392... BP=exp(1−(8+8)/(7+6))=0.79392...
最后根据公式计算BLEU的值:
B
L
E
U
=
B
P
×
e
x
p
(
(
l
o
g
(
P
1
)
+
l
o
g
(
P
2
)
+
l
o
g
(
P
3
)
+
l
o
g
(
P
4
)
)
/
4
)
=
0.4290
BLEU = BP \times exp( (log(P_1) + log(P_2) + log(P_3) + log(P_4))/4) = 0.4290
BLEU=BP×exp((log(P1)+log(P2)+log(P3)+log(P4))/4)=0.4290
总的来说,如果是评价一个语料集的BLEU,需要把所有的句子进行整体考虑,来计算BLEU,而不是把每个句子的BLEU求和平均。