【NLP训练营】 第六周

本周任务

学课程

机器翻译、序列到序列、注意力模型:Machine Translation, Seq2Seq and Attention

GRU和NMT的进阶

读论文

论文导读:谷歌的多语种神经网络翻译系统

写作业

作业:Assignment 3.1

  • 3.1 A window into named entity recognition(NER)基于窗口模式的名称识别

 

第十课笔记

用神经网络做机器翻译叫做NMT(Neural Machine Translation)。课程前半部分讲了机器翻译的发展史。

 

Decoder部分的改进

一开始的做法是encoder的最后一层,作为decoder第一层的输入。所有的信息都存在了encoder的最后一层中,往后传着传着会丢失,咋办?要么用LSTM,要么把encoder的最后一层的隐状态,输入给每一个decoder中。这个在上节课其实也讲过。

hankcs.com 2017-06-27 ä¸å3.59.24.png

 

NMT的四大优势

  1. End-to-end training
    为优化同一个损失函数调整所有参数

  2. Distributed representation
    更好地利用词语、短语之间的相似性

  3. Better exploitation of context
    利用更多上下文——原文和部分译文的上下文

  4. 生成的文本更流畅
    可能跟上述优势有关

NMT还避免了传统MT中的黑盒子(reorder之类)模型。NMT也存在弱点

  • 无法显式利用语义或语法结构(依存句法分析完全用不上了,有些工作正在展开)

  • 无法显式利用指代相消之类的结果

 

Attention

 最初的思想是待翻译的句子的所有信息都只有encoder最后一刻的隐状态来向后传递,这导致在稍微长一些的句子上,效果就骤降。想到一个隐状态可能存不下待翻译的长句子中的所有信息,那么就拿多个隐状态输入给后面的decoder不就好了?我们将这个隐状态称为c1, c2, ...

这个隐状态c又是怎么来的?

举个例子:把“我爱中国”翻译成“I love China”。很明显,“我”->“I”;“爱”->“love”;“中国”->“China”。当decoder要输出“I”的时候,注意力应该集中在“我”这个单词上,那么令

c1 = 权重α1 * 隐状态h

å®å¨å¾è§£RNNãRNNåä½ãSeq2SeqãAttentionæºå¶

剩下的问题就是权重α是怎么来的。

实际上αt是利用decoder的t-1的隐状态h't-1和encoder的隐状态h,通过学习模型得到的。设一个打分函数叫score()。对于在decoder里的单元,应该关注哪些时刻的encoder状态呢?关注的强度是多少呢?可以先打个分:score(h't-1, h)。再把decoder里的每个单元得分拿出来softmax一下,就得到了概率,也就是应该关注的对应的encoder单元的强度。

score函数可以有这几种选择,中间那个比较好,因为Wa给了两个向量更复杂的interinteraction

2017-06-28_09-20-16.png

 

å®å¨å¾è§£RNNãRNNåä½ãSeq2SeqãAttentionæºå¶

以上图为例,

  • α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表示机器翻译结果越好。

  1. n-gram。n看做一个窗口大小,这个窗口从句子最左依次滑到句子最右
  2. 惩罚因子BP。针对翻译译文长度比参考译文要短的情况,需要加上惩罚因子惩罚。

有了上面两条知识,可以用下面的公式算出BLEU

其中pn是n-gram的精度。pn = (n-gram在翻译译文和参考译文中出现的最小次数 / n-gram在翻译译文中出现次数)

wn是权重,自己定

也可以取个对数:log(BLEU),更好算。

 

解决大词表问题

大词表问题指的是softmax的计算难度,可以参照下面这篇博客:

http://www.hankcs.com/nlp/cs224n-gru-nmt.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值