本周任务
学课程
机器翻译、序列到序列、注意力模型:Machine Translation, Seq2Seq and Attention
- 课件: lecture10
- 观看视频
- 学习笔记: 机器翻译、序列到序列、注意力模型
GRU和NMT的进阶
- 课件: lecture11
- 观看视频
- 学习笔记:GRU和NMT的进阶
读论文
论文导读:谷歌的多语种神经网络翻译系统
- 论文原文: paper
- 论文分析: highlight
- 论文笔记:谷歌的多语种神经网络翻译系统
写作业
- 3.1 A window into named entity recognition(NER)基于窗口模式的名称识别
第十课笔记
用神经网络做机器翻译叫做NMT(Neural Machine Translation)。课程前半部分讲了机器翻译的发展史。
Decoder部分的改进
一开始的做法是encoder的最后一层,作为decoder第一层的输入。所有的信息都存在了encoder的最后一层中,往后传着传着会丢失,咋办?要么用LSTM,要么把encoder的最后一层的隐状态,输入给每一个decoder中。这个在上节课其实也讲过。
NMT的四大优势
-
End-to-end training
为优化同一个损失函数调整所有参数 -
Distributed representation
更好地利用词语、短语之间的相似性 -
Better exploitation of context
利用更多上下文——原文和部分译文的上下文 -
生成的文本更流畅
可能跟上述优势有关
NMT还避免了传统MT中的黑盒子(reorder之类)模型。NMT也存在弱点
-
无法显式利用语义或语法结构(依存句法分析完全用不上了,有些工作正在展开)
-
无法显式利用指代相消之类的结果
Attention
最初的思想是待翻译的句子的所有信息都只有encoder最后一刻的隐状态来向后传递,这导致在稍微长一些的句子上,效果就骤降。想到一个隐状态可能存不下待翻译的长句子中的所有信息,那么就拿多个隐状态输入给后面的decoder不就好了?我们将这个隐状态称为c1, c2, ...
这个隐状态c又是怎么来的?
举个例子:把“我爱中国”翻译成“I love China”。很明显,“我”->“I”;“爱”->“love”;“中国”->“China”。当decoder要输出“I”的时候,注意力应该集中在“我”这个单词上,那么令
c1 = 权重α1 * 隐状态h
剩下的问题就是权重α是怎么来的。
实际上αt是利用decoder的t-1的隐状态h't-1和encoder的隐状态h,通过学习模型得到的。设一个打分函数叫score()。对于在decoder里的单元,应该关注哪些时刻的encoder状态呢?关注的强度是多少呢?可以先打个分:score(h't-1, h)。再把decoder里的每个单元得分拿出来softmax一下,就得到了概率,也就是应该关注的对应的encoder单元的强度。
score函数可以有这几种选择,中间那个比较好,因为Wa给了两个向量更复杂的interinteraction
以上图为例,
- α1 = (α11, α12, α13, α14)
- 我, 爱, 中, 国 = h1, h2, h3, h4
- I = h0'
当α1=(1,0,0,0)或者以一个概率形式(0.97, 0.01, 0.01, 0.01)出现的时候,就能满足把“I”的翻译集中在“我”这个词的隐状态h1上。
计算权重的方法不同,分为 hard attention, soft attention, global attention,local attention等等。
- hard就是(1,0,0,0)这种形式,不是1就是0 , 很粗暴
- soft是(0.97, 0.01, 0.01, 0.01)这样以概率形式出现的
- global是将全部的encoder的隐状态考虑进来
- local是画了个窗口,窗口内的词才与之有关。找窗口又有两种方法,一个是线性对齐,就是decoder里那个词,就在encoder中对应的那个地方取个窗口;另一个是通过函数来预测窗口会在哪里出现。
decoder
在模型给定原文s1的情况下计算译文s2的概率P(s2|s1)之后,就会到了传统问题上,找出最可能的译文s2*。不可能生成所有的翻译并逐个打分。目前有三种思路:
- Ancestral sampling
根据之前的词语依概率生成当前词语
这有个问题是会产生高方差的差效果,且同一个句子每次翻译的结果不一样。
- Greedy search
贪婪搜索,直接选当前最可能的单词
缺点:这并不是全局最优,前面错后面就会受影响
- Beam search
束搜索
记录每个时刻,k个最可能的选项,从这k个词,接上词表里的所有词,就是下一时刻可能出现的情况,从中再选出k个概率最大的出来。
不用说,束搜索是最好的。
第十一课
GRU为什么能避免梯度消失
学生提问为啥GRU不会有梯度消失
f就是隐状态h,注意GRU中这里的加号,如果更新门ut是0的话,那么新状态ht就和前一个状态ht-1是一个线性的关系,反向求导的时候梯度一定是存在的。
LSTM训练技巧
-
将递归权值矩阵初始化为正交
-
将其他矩阵初始化为较小的值
-
将forget gate偏置设为1:默认为不遗忘
-
使用自适应的学习率算法:Adam、AdaDelta
-
裁剪梯度的长度为小于1-5
-
在Cell中垂直应用Dropout而不是水平Dropout
-
保持耐心,通常需要训练很长时间
-
训练多个模型,平均他们的预测,可以额外带来效果提升
BLEU
BLEU (bilingual evaluation understudy) ,中文名称为双语互译质量辅助工具。是用来衡量机器翻译文本与参考文本之间的相似程度的指标,取值范围在0-1, 取值越靠近1表示机器翻译结果越好。
- n-gram。n看做一个窗口大小,这个窗口从句子最左依次滑到句子最右
- 惩罚因子BP。针对翻译译文长度比参考译文要短的情况,需要加上惩罚因子惩罚。
有了上面两条知识,可以用下面的公式算出BLEU
其中pn是n-gram的精度。pn = (n-gram在翻译译文和参考译文中出现的最小次数 / n-gram在翻译译文中出现次数)
wn是权重,自己定
也可以取个对数:log(BLEU),更好算。
解决大词表问题
大词表问题指的是softmax的计算难度,可以参照下面这篇博客: