NLP学习笔记(3)

news/2024/7/5 19:35:56
  • NMT(nerual machine translation)任务经常被描述为一个encode-decode过程,输入序列利用RNN进行encode产生一个编码(包含句子的语义信息),将这个编码送进decode的RNN产生target的语言序列,这就完成了端到端的MT。decode的RNN的输入,有的人设计为只需要该RNN前一个预测的单词,即编码只在第一个时序的RNN单元输入,后面就作为隐状态传播;有的人设计为既需要前一个预测的单词,又需要前述encoder产生的编码,即编码送进每一个时序的RNN unit。
  • 谷歌使用的多语种翻译系统是只需要一个encoder 一个decoder完成从多语种到多语种的翻译。机密在于,当你想要将某个句子翻译为某种语言时,在句子的开头加一个特殊标记,表示target的语言即可。这种单一模型进行多语种的翻译十分有益,能够利用多种语言对的训练集相互促进,比如,如果中文翻译成法语的语料库比较小,单独拿这个语料库训练一个中到法的MT,效果不好。但是如果你同时又有一些中到英的语料库,或者英到法的语料库,在训练多语种的模型时,中到法的翻译能够受益而仍能有较好的效果
  • 注意力机制:上上点提到的decoder的输入仍然不完善,因为无论encoder的最终输出Y是作为隐状态在decoder中传播还是作为每一时刻的输入,只依赖于Y无疑是有限的,句子开头的部分信息可能由于序列过长而在encoder的传播中消失,这样以来Y中包含的句子开头的信息就不完整了。举一个拟人的例子,人类翻译员翻译的时候也不是看一遍句子然后不看了开始写翻译,而是在翻译的过程中会回过头去看。为了使得decoder能够回过头去看句子开头的内容,注意力机制是这样做的。decoder在每个时序增加一个注意力模型,利用上一时序decoder的隐状态,来计算encoder每个时序隐状态的分数,利用这些分数(再利用softmax变成概率值)对encoder的每个时序的隐状态进行加权平均得到一个参考向量c。也就是说这时decoder的输入就包括了c,上一时刻decoder的隐状态 h t − 1 h_{t-1} ht1,上一时刻的输出 o t − 1 o_{t-1} ot1在这里插入图片描述
  • 这个scoring function可以有不同的形式,有的用两次神经网络构成,有的只是简单的 h t − 1 T W a h ‾ s h_{t-1}^T W_a\overline{h}_s ht1TWahs但仍然十分有效
  • decode在预测阶段预测序列的策略有以下几种
    • 第一种是遍历搜索,在第t步利用t-1产生第t步应该输出的单词的概率分布时,每个单词都尝试一遍作为第t步的输出单词然后 继续第t+1步,遍历搜索所有可能的总长度T,然后将不同t的概率乘积作为每个决策的概率,从中挑选概率最高的,也就是说,如果语料库有N个单词,这个策略会产生N为底T为指数的数量级的决策,其实是非常低效而不可能实施的
    • 第二种是采样策略,即当你在t步利用t-1产生第t步应该输出的单词的概率分布时,根据这个概率分布进行采样生成第t步的输出,理论上是行得通而且能够收敛的但是实际操作的时候会导致模型非常不稳定,所以也不会采用
    • 第三种是贪婪搜索,即在概率分布中选择概率最高的单词作为第t步的输出,这个并没有什么问题,可以这样做,但是实际中更多采用的是第四种
    • 第四种是beam search,是不完全的贪婪策略。在概率分布中选择概率最高的b个单词做完第t步的输出,然后接着产生第t+1步的输出,所以现在我们有b的平方个分支,然后在这b的平方里面挑选概率乘积最高的b个,继续下去。通常b不会太大,5和10都可以。当b趋于无穷时这就是第一种方法,会得到理论上最优的无偏搜索,当b为1时这就是完全的贪婪搜索,但是容易导致一步错步步错。所以这是一种权衡,牺牲一点点效率,提高一点点质量,beam search是广泛应用的策略

http://www.niftyadmin.cn/n/3658050.html

相关文章

NLP学习笔记(4)

不要在RNN的水平方向使用dropout(虽然有人这么做,但是是用特殊的方法的),但是经常在垂直方向使用dropout初始化参数的时候,LSTM的forget gate的bias给1或2确保不会一开始就遗忘,然后其它的参数要初始化为很…

Asp.net 2.0 自定义控件开发[创建自定义HeaderRow的GridView控件][示例代码下载]

(一). 概述1. 做了个GridViewExtend自定义控件, 通过注册扩展自定义表头事件, 可以任意设置Header的格式.2. 易重用代码, 只要将ExtendGridView.dll 文件添加到项目引用即可. 实现原理:增加一个自定义事件,并将GridView头(HeaderRow)引用作为事件参数…

NLP学习笔记(5)

传统的语音识别模型需要建立一个generative模型,从语言模型中产生单词序列,然后产生tokens(音标)序列,然后产生语音序列(时域或频域的声音序列),然后是计算得到一些特征(…

深入浅出话窗体(一)——窗体事件模型(上)

深入浅出话窗体(一)——窗体事件模型(上)作者:CSDN 刘铁猛小序:工作中最大的挑战并不是那些Mission Impossible,而是你需要一边保持安静、平衡的心态以专注于工作,一边对抗公司体制、…

NLP学习笔记(6)

我们希望把多个单词组成的短语同样在词向量的空间中找到对应的向量,当然你也可以在不同的空间中,但是如果在同一空间中是有好处的 ,我可以利用该空间捕捉到短语与单词之间意思的相似度,比如the man on the snowboard 和 snowboard…

Programming C# 4th. Edition 中文/英文版对照阅读体验

Programming C# 4th Edition 中文版/英文版 对照阅读体验大概是耐心所至的缘故,我那几篇冠以“深入浅出C#”的文章在网络里被广泛转载——这当然是好事!有更多的朋友通过我的介绍认识并喜欢上了C#这门可爱的语言。广泛转载的Side Effect就是我的邮箱时常…

C# 3.0 语言定义文档(微软官方版)正式发布!

C# 3.0 语言定义文档(微软官方版)正式发布如果想精通一门编程语言,你就需要像律师研究法律条款一样来研究这门语言的定义文档(Language Specification,简称LangSpec)。静悄悄地,C# 3.0语言定义文…

NLP学习笔记(8)

这节课的内容看得太快而且有点难,所以这里只是做一下记录,并不详细,作为一个内容的索引,事后需要自己取搜论文了解细节 这是一个想改进tree LSTM的模型 有人用基于字符的模型,也有人用基于单词的模型,还有…