机器翻译模型(条件语言模型) 和 语言模型 一个主要的区别:
贪心搜索算法:每次根据条件概率找到最好的构成句子的单词,但是这种算法没有前后关联意识,因此翻译出来的句子往往不好。
集束算法:用于获取最好的翻译结果或者识别结果
第一步:设置集束宽,开始计算概率获取第一个单词
第二步:建立在第一步获取的三个单词基础上,去计算第二个单词的概率,取前三个
具体过程如下:由于beam width = 3,所以需要再次建立三个RNN网络,将解码部分第一个时间步得到的预测值(即in、jane和september),作为第二个时间步的输入,去计算条件概率 P ( y ^ < 2 > ∣ x , " i n " ) P(\hat{y}^{<2>}|x,"in") P(y^<2>∣x,"in")、 P ( y ^ < 2 > ∣ x , " j a n e " ) P(\hat{y}^{<2>}|x,"jane") P(y^<2>∣x,"jane") 和 P ( y ^ < 2 > ∣ x , " s e p t e m b e r " ) P(\hat{y}^{<2>}|x,"september") P(y^<2>∣x,"september"),需要计算3×10000 = 30000个概率值,然后乘以 P ( y ^ < 1 > ∣ x ) P(\hat{y}^{<1>}|x) P(y^<1>∣x) 得到 P ( y ^ < 1 > , y ^ < 2 > ∣ x ) P(\hat{y}^{<1>},\hat{y}^{<2>}|x) P(y^<1>,y^<2>∣x),选择概率值最大的前三个作为下一次运算的输入。
第三步:类似与第二步操作,循环上述操作
第四步:同理,继续增加一个单词作为输入,这样最终会找到“Jane visits africa in september”这个句子,终止在句尾符号
。
注:1. 在集束宽为3时,集束搜索一次只考虑3个可能结果。如果集束宽等于1,就变成了贪心搜索算法。
2. 同时考虑多个可能的结果比如3个,10个或者其他的个数,集束搜索通常比贪婪搜索更好
上节讲到 集束搜索 要选出条件概率最高的前 B 个,公式如下:
arg max y ∏ t = 1 T y P ( y < t > ∣ x , y < 1 > , … , y < t − 1 > ) \arg \max _{y} \prod_{t=1}^{T_{y}} P\left(y^{
概率部分展开后就是下面的式子:
P ( y < 1 > ∣ X ) P ( y < 2 > ∣ X , y < 1 > ) P ( y < 3 > ∣ X , y < 1 > , y < 2 > ) … P ( y < T y > ∣ X , y < 1 > , y < 2 > … y < T y − 1 > ) P\left(y^{<1>} \mid X \right) P\left(y^{<2>} \mid X, y^{<1>}\right) P\left(y^{<3>} \mid X, y^{<1>}, y^{<2>}\right) \ldots P\left(y^{
即 P ( Y ∣ X ) P\left(Y \mid X\right) P(Y∣X) —— 在已知法语句子X的情况下得到正确的英语翻译后的句子Y的可能性。
上式缺点:
采用取 log 的式子:
arg max y ∑ y = 1 T y log P ( y < t > ∣ x , y < 1 > , … , y < t − 1 > ) \arg \max _{y} \sum_{y=1}^{T_{y}} \log P\left(y^{
再对长度进行归一化:乘以系数
arg max y 1 T y α ∑ y = 1 T y log P ( y < t > ∣ x , y < 1 > , … , y < t − 1 > ) \arg \max _{y} \frac{1}{T_y^{\alpha}}\sum_{y=1}^{T_{y}} \log P\left(y^{
超参数 α = 0.7 \alpha = 0.7 α=0.7 常用(采用0的话没有归一化,采用1的话就完全由长度来归一化)
注意:集束搜索不一定搜到的是最优解,是一种启发式搜索算法,达到较好的效果
如何选择束宽 B:
产品中常见 B = 10,科研看情况可以取大些,效果好,好发文章
怎样才能发现是 Beam搜索 算法出现了问题,还是你的 RNN模型 出了问题?
机器翻译(machine translation)的一大难题是一个法语句子可以有多种英文翻译而且都同样好,所以当有多个同样好的答案时,怎样评估一个机器翻译系统呢 ?
BLEU,即bilingual evaluation understudy (双语评估替补),可以代替人类对每一种输出给出一个评估结果。BLEU得分背后的理念:观察机器生成的翻译,然后看生成的词是否出现在至少一个人工翻译参考之中
BLEU算法详解:
假定人工给出的译文为reference
,机器翻译的译文为candidate
。
1)最早的BLEU算法
最早的BLEU算法是直接统计cadinate中的单词有多少个出现在reference中,具体的式子是:
B L E U = 出 现 在 r e f e r e n c e 中 的 c a n d i n a t e 的 单 词 的 个 数 c a d i n a t e 中 单 词 的 总 数 BLEU = \frac {出现在reference中的candinate的单词的个数} {cadinate中单词的总数} BLEU=cadinate中单词的总数出现在reference中的candinate的单词的个数
以下面例子为例:
candinate: the the the the the the the
reference: the cat is on the mat
cadinate中所有的单词都在reference中出现过,因此: B L E U = 7 7 = 1 BLEU = \frac {7} {7} = 1 BLEU=77=1
对上面的结果显然是不合理的,而且主要是分子的统计不合理,因此对上面式子中的分子进行了改进。
2)改进的BLEU算法 —— 分子截断计数
针对上面不合理的结果,对分子的计算进行了改进,具体的做法如下:
C o u n t w i c l i p = m i n ( C o u n t w i , R e f _ C o u n t w i ) Count_{w_i}^{clip} = min(Count_{w_i},Ref\_Count_{w_i}) Countwiclip=min(Countwi,Ref_Countwi)
上面式子中:
C o u n t w i Count_{wi} Countwi 表示单词 w i w_i wi在 c a n d i n a t e candinate candinate中出现的次数;
R e f _ C o u n t w i Ref\_Count_{w_i} Ref_Countwi 表示单词 w i w_i wi在reference中出现的次数;
但一般情况下reference可能会有多个,因此有: C o u n t c l i p = m a x ( C o u n t w i , j c l i p ) , j = 1 , 2 , 3...... Count^{clip} = max(Count_{w_i,j}^{clip}), j=1,2,3...... Countclip=max(Countwi,jclip),j=1,2,3......
上面式子中: j j j表示第 j j j个reference。
仍然以上面的例子为例,在candinate中只有一个单词the,因此只要计算一个 C o u n t c l i p Count^{clip} Countclip,the在reference中只出现了两次,因此: B L E U = 2 7 BLEU = \frac {2} {7} BLEU=72
3)引入n-gram
在上面我们一直谈的都是对于单个单词进行计算,单个单词可以看作时1−gram,1−gram可以描述翻译的充分性,即逐字翻译的能力,但不能关注翻译的流畅性,因此引入了n-gram,n-gram一般n不大于4。引入n-gram后的表达式如下:
p n = ∑ c ∈ c a n d i d a t e s ∑ n − g r a m ∈ c C o u n t c l i p ( n − g r a m ) ∑ c ∈ c a n d i d a t e s ′ ∑ n − g r a m ∈ c ′ ′ C o u n t ( n − g r a m ′ ) p_{n}=\frac{\sum_{c_{\in candidates}}\sum_{n-gram_{\in c}}Count^{clip}(n-gram)}{\sum_{c^{'}_{\in candidates}}\sum_{n-gram^{'}_{\in c^{'}}}Count(n-gram^{'})} pn=∑c∈candidates′∑n−gram∈c′′Count(n−gram′)∑c∈candidates∑n−gram∈cCountclip(n−gram)
很多时候在评价一个系统时会用多条candinate来评价,因此上面式子中引入了一个候选集合candinates。 p n p_n pn 中的n表示n-gram, p n p_n pn表示n-gram的精度。
接下来简单的理解下上面的式子,首先来看分子:
1)第一个 ∑ c ∈ c a n d i d a t e s {\sum_{c_{\in candidates}}} ∑c∈candidates 描述的是各个candinate的总和;
2)第二个 ∑ n − g r a m ∈ c \sum_{n-gram_{\in c}} ∑n−gram∈c描述的是一条candinate中所有的n-gram的总和;
3) C o u n t c l i p ( n Count^{clip}(n Countclip(n- g r a m ) gram) gram) 表示某一个n-gram词的截断计数;
再来看分母,前两个 ∑ ∑ ∑ 和分子中的含义一样,Count(n-gram′) 表示 n-gram′ 在candinate中的计数。
再进一步来看,实际上分母就是candinate中n-gram的个数,分子是出现在reference中的candinate中n-gram的个数。
举一个例子来看看实际的计算:
candinate: the cat sat on the mat
reference: the cat is on the mat
计算n-gram的精度:
p 1 = 5 6 = 0.83333 p_1 = \frac {5} {6} = 0.83333 p1=65=0.83333
p 2 = 3 5 = 0.6 p_2 = \frac {3} {5} = 0.6 p2=53=0.6
p 3 = 1 4 = 0.25 p_3= \frac {1} {4} = 0.25 p3=41=0.25
p 4 = 0 3 = 0 p_4 = \frac {0} {3} = 0 p4=30=0
4)添加对句子长度的惩罚因子
在翻译时,若出现译文很短的句子时往往会有较高的BLEU值,因此引入对句子长度的乘法因子,其表达式如下:
在这里c表示cadinate的长度,r表示reference的长度。
将上面的整合在一起,得到最终的表达式:
B L E U = B P ⋅ e x p ( ∑ n = 1 N w n log p n ) BLEU = BP·exp(\sum_{n=1}^N w_n \log p_n) BLEU=BP⋅exp(n=1∑Nwnlogpn)
其中, w n w_n wn=1/n(一般n最大为4), e x p ( ∑ n = 1 N w n log p n ) exp(\sum_{n=1}^N w_n \log p_n) exp(∑n=1Nwnlogpn) 表示不同的n-gram的精度的对数的加权和。
注意力模型如何让一个神经网络只注意到一部分的输入句子。当它在生成句子的时候,更像人类翻译