第五门课:序列模型(第三周)——序列模型和注意力机制

序列模型和注意力机制

  • 1. 基础模型
  • 2. 选择最可能的句子
  • 3. 集束搜索(Beam Search)
  • 4. 改进集束搜索
  • 5. 集束搜索的误差分析
  • 6. Bleu 得分
  • 7. 注意力模型直观理解
  • 8. 注意力模型
  • 9. 语音识别(Speech recognition)
  • 10. 触发字检测(Trigger Word Detection)

1. 基础模型

  • seq2seq : 语言翻译

特征:输入长度和输出长度不一样
第五门课:序列模型(第三周)——序列模型和注意力机制_第1张图片

  • image to sequence:图片理解

特征:先获取图片中的信息,然后将信息转译出来
第五门课:序列模型(第三周)——序列模型和注意力机制_第2张图片

2. 选择最可能的句子

第五门课:序列模型(第三周)——序列模型和注意力机制_第3张图片
机器翻译模型(条件语言模型)语言模型 一个主要的区别:

  • 语言模型随机地生成句子
  • 条件语言模型,你要找到最有可能的英语句子,但是由于句子组合数量过于巨大,因此需要一种合适的搜索算法——集束搜索(Beam Search)

贪心搜索算法:每次根据条件概率找到最好的构成句子的单词,但是这种算法没有前后关联意识,因此翻译出来的句子往往不好。

3. 集束搜索(Beam Search)

集束算法:用于获取最好的翻译结果或者识别结果

第一步:设置集束宽,开始计算概率获取第一个单词
第五门课:序列模型(第三周)——序列模型和注意力机制_第4张图片
第二步:建立在第一步获取的三个单词基础上,去计算第二个单词的概率,取前三个

具体过程如下:由于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),选择概率值最大的前三个作为下一次运算的输入。
第五门课:序列模型(第三周)——序列模型和注意力机制_第5张图片
第三步:类似与第二步操作,循环上述操作
第五门课:序列模型(第三周)——序列模型和注意力机制_第6张图片
第四步:同理,继续增加一个单词作为输入,这样最终会找到“Jane visits africa in september”这个句子,终止在句尾符号

直观表示如下所示:
第五门课:序列模型(第三周)——序列模型和注意力机制_第7张图片

注:1. 在集束宽为3时,集束搜索一次只考虑3个可能结果。如果集束宽等于1,就变成了贪心搜索算法。
2. 同时考虑多个可能的结果比如3个,10个或者其他的个数,集束搜索通常比贪婪搜索更好

4. 改进集束搜索

上节讲到 集束搜索 要选出条件概率最高的前 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^{} \mid x, y^{<1>}, \ldots, y^{}\right) argymaxt=1TyP(y<t>x,y<1>,,y<t1>)

概率部分展开后就是下面的式子
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^{} \mid X, y^{<1>}, y^{<2>} \ldots y^{}\right) P(y<1>X)P(y<2>X,y<1>)P(y<3>X,y<1>,y<2>)P(y<Ty>X,y<1>,y<2>y<Ty1>)
P ( Y ∣ X ) P\left(Y \mid X\right) P(YX) —— 在已知法语句子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^{} \mid x, y^{<1>}, \ldots, y^{}\right) argymaxy=1TylogP(y<t>x,y<1>,,y<t1>)

再对长度进行归一化:乘以系数

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^{} \mid x, y^{<1>}, \ldots, y^{}\right) argymaxTyα1y=1TylogP(y<t>x,y<1>,,y<t1>)

超参数 α = 0.7 \alpha = 0.7 α=0.7 常用(采用0的话没有归一化,采用1的话就完全由长度来归一化)

注意集束搜索不一定搜到的是最优解,是一种启发式搜索算法,达到较好的效果

如何选择束宽 B

  • B 越大,输出句子越好,计算代价也大,内存占用大
  • B 较小,输出效果没那么好,计算快些,内存占用小

产品中常见 B = 10,科研看情况可以取大些,效果好,好发文章

5. 集束搜索的误差分析

怎样才能发现是 Beam搜索 算法出现了问题,还是你的 RNN模型 出了问题?
第五门课:序列模型(第三周)——序列模型和注意力机制_第8张图片

第五门课:序列模型(第三周)——序列模型和注意力机制_第9张图片
分析哪种错误更多:

  • Beam搜索 算法造成了大部分错误时,才值得花费努力增大集束宽度
  • RNN模型 出了更多错,可以进行更深层次的分析,来决定是需要增加正则化还是获取更多的训练数据,抑或是尝试一个不同的网络结构

6. Bleu 得分

机器翻译(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=cadinatereferencecandinate

以下面例子为例:

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=ccandidatesngramcCount(ngram)ccandidatesngramcCountclip(ngram)

很多时候在评价一个系统时会用多条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}}} ccandidates 描述的是各个candinate的总和;
2)第二个 ∑ n − g r a m ∈ c \sum_{n-gram_{\in c}} ngramc描述的是一条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=BPexp(n=1Nwnlogpn)

其中, 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的精度的对数的加权和。

7. 注意力模型直观理解

第五门课:序列模型(第三周)——序列模型和注意力机制_第10张图片
第五门课:序列模型(第三周)——序列模型和注意力机制_第11张图片

  • 注意力权重 a < t , t ′ > a^{} a<t,t>告诉你,当你尝试生成第 t t t 个英文词,它应该花多少注意力在第 t ′ t' t个法语词上面。
  • 当生成一个特定的英文词时,这允许它在每个时间步去看周围词距内的法语词要花多少注意力。

8. 注意力模型

注意力模型如何让一个神经网络只注意到一部分的输入句子。当它在生成句子的时候,更像人类翻译
第五门课:序列模型(第三周)——序列模型和注意力机制_第12张图片
第五门课:序列模型(第三周)——序列模型和注意力机制_第13张图片

9. 语音识别(Speech recognition)

第五门课:序列模型(第三周)——序列模型和注意力机制_第14张图片
第五门课:序列模型(第三周)——序列模型和注意力机制_第15张图片

10. 触发字检测(Trigger Word Detection)

第五门课:序列模型(第三周)——序列模型和注意力机制_第16张图片

你可能感兴趣的:(吴恩达《深度学习》,自然语言处理,深度学习,机器学习)