cs224n 笔记10 神经机器翻译和注意力模型

前言

cs224n 第十讲,又讲了一些关于机器翻译的内容

神经机器翻译(NMT)

什么是NMT

神经机器翻译是用一个端到端的神经网络建模完成翻译过程的系统。如下图所示
在这里插入图片描述

NMT发展

80年代用神经网络做机器翻译还是很边缘的领域,但是我们现在用的很多算法都是当时提出来的,比如常见的反向传播算法。当时提出了encoder-decoder模型,但是还是很简单的模型,固定的输入输出(二进制表示),十分有限的输入输出数据,这也反映了当时计算资源的限制。
在这里插入图片描述
90年代一个叫Lonnie Chrisman的小伙开发了一个复杂的基于encoder-decoder结构的神经网络,叫RAAMS。这个模型已经很类似现在的RNN了。
在这里插入图片描述
现代的NMT模型就很多了,上一节课提到的基于RNN的encoder-decoder模型:
在这里插入图片描述
使用过程中再复杂一些:
在这里插入图片描述
可以将解码器看做一个条件递归语言模型,也就是说在源文编码Y的条件下进行解码。
在这里插入图片描述
通常我们使用encoder的最后一层的输出作为decoder模型的输入,这里存在的一个问题就是我们不想在decoder的过程中丢失太多信息,这里的一个做法就是decoder使用LSTM这种可以存储记忆的单元,另外一种就是将encoder的最后一层输出加到decoder的每一层中去,如下图所示。
在这里插入图片描述
老爷子接着吹嘘了一波神经机器翻译的发展之迅速,就是amazing~
在这里插入图片描述

NMT的四大优势

1.端到端的训练方式
可以根据一个loss函数同时优化所有参数
2.分布式表示
词、短语之间的分布式表示能够很好的表达词语之间的相似性
3.更好的利用上下文信息
4.NMT善于生成流畅的文本

NMT的缺点

1.黑箱操作
2.无法显示利用语义或语法结构(现在应该是有相关的工作研究了)
3.无法处理好高阶文本,如篇章结构、连接子句、回指等

统计\神经网络机器翻译

老爷子说中文是他们接触的第二多的语言,所以课程中用了中文进行了例子讲解,下图是在不同年份下得到的谷歌翻译结果
在这里插入图片描述
前期翻译的效果并不怎么样,到2017年才算是有了质的改变。当然最后一句还有翻译的有问题,但是已经比前几年的翻译进步了很多。

attention介绍和应用

attention介绍

问题:我们通常使用编码器的最后单元的输出Y作为译文的表示,整个解码过程中都依赖这个Y。这造成的问题就是当译文是长句时,翻译效果不如短句效果好,因为固定长度的Y无法将长句的信息很好的保存。
所以这就引出了attention机制,其主要原理就是在翻译不同单词时给予源文单词不同的权重,使得更关注于对应翻译的单词。这和我们人类翻译员做翻译时类似,翻译员在翻译时也不是看一遍直接翻译完成,而是在翻译过程中不断去回看源文,关注源文中不同的文字信息。
上一节课也讲到,传统的NMT在翻译之前需要先做到双语对齐,如下图所示。
在这里插入图片描述
但是现在融合attention的模型可以同时学习对齐和翻译。如下图所示,该图很好的展示了在翻译过程中注意力权重是如何进行变化的。
在这里插入图片描述

attention实现

课程中提到打分,其实也就是给不同的词赋予不同的权重,这里就不按照课程中的顺序进行记录。
在这里插入图片描述
上图中,score就是用来计算权重的公式, h t h_t ht h ‾ s \overline{h}_s hs分别代表decoder的隐层向量和encoder中的隐层向量。 h t h_t ht是当前的译文, h ‾ s \overline{h}_s hs是源文,该公式计算出当前译文与源文每个单词之间的权重,就能够知道源文哪个单词对于当前的译文更重要,其对应权重就是越高。score的计算方式有多种,比较流行的是中间的那种,老爷子说这种方法中的 W a W_a Wa使得两个向量之间有了更多的交互。
得到相应权重后,先将权重 a t a_t at进行归一化,然后将源文的每个单词与权重 a t a_t at对应相乘,得到此时刻的上下文向量 c t c_t ct
在这里插入图片描述
在这里插入图片描述
得到 c t c_t ct后,将 c t c_t ct作为条件之一生成decoder的当前状态。

全局和局部attention

上面讲的方法有一个问题,就是当序列长度很长时,该方法的计算复杂度就会很高。所以就有人提出了局部attention,也就是每次只将注意力放到一部分状态上的模型。
在这里插入图片描述
但是上述模型也没有取得特别好的结果,下图是Manning给出的一张实验对比图
在这里插入图片描述
图中传达的最重要的一个信息就是,当句子序列变长时,attention的存在会使得效果保持稳定。
下面是一些attention在翻译过程中表现良好的例子
在这里插入图片描述
在这里插入图片描述
但是attention翻译的句子也不是完美的,上面这张图中翻译的时候出现了翻译词重复的问题。
###The idea of coverage
这里的思想是为了不丢失每一个重要的部分。比如在图像领域,根据图片中的每一部分的场景生成对应的词语来描述这一副图片。
在这里插入图片描述
把这种思想引入神经机器翻译中,有一种思路是doubly attention。也就是同时在encoder和decoder上做attention,反映在下图中就是水平方向和竖直方向都做attention。
在这里插入图片描述
另外,Manning还讲到了一些其他的方法,但是也都没有细讲,比如fertility。为了防止attention模型过分注重某个词,使得翻译结果一直在重复。

decoder策略

几种生成译文的方法

穷举法

列出所有可能的译文组合,找出可能性最大的译文,这种方法显然计算量太大,不可能使用这种方式。
在这里插入图片描述

Ancestral sampling

祖先抽样,这种方法的思想就是根据当前已经生成的词语,基于模型的概率分布来生成现在的词语 x t x_t xt,根据模型的概率分布一次随机采样一个词。
x t ∼ P ( x t ∣ x 1 , . . . , x n ) x_t \sim P(x_t|x_1,...,x_n) xtP(xtx1,...,xn)
这种方法的缺陷是方差大,且因为每次都是随机选取单词,所以同一个句子每次的翻译效果都不一样

Greedy Search

贪心策略,每一次选择最可能的单词。也就是说,以t时刻之前的单词为条件,选取条件概率最大的单词作为当前t时刻的单词。
在这里插入图片描述
但是,走错一步就会影响后面的选择,不容易得到全局最优解。

Beam Search

在这里插入图片描述
每个时刻记录K个最可能的选项,也就是说依据概率最大原则,在t时刻生成K个单词序列。课程中的公式显得很复杂,举个例子简单说明这种相对最优的方法。
比如我们现在的字典大小为10000,K=3,要翻译如下句子

法语句子"Jane visite l'Afrique en septembre."
翻译1-Jane is visiting Africa in September.
翻译2-Jane is going to be visiting Africa in September.

第一步,通过模型计算得到第一个词的分布概率,选取前K个作为候选结果,比如下图中的‘in’,‘jane’,‘september’
在这里插入图片描述
第二步,根据已经选出来的K个词,考虑第二个词的条件概率,分别以‘in’,‘jane’,‘september’为条件,得到第二个词的概率分布。也就是说得到10000*K=30000个单词序列组合的概率分布,从中选取概率最大的前K个单词序列,比如是‘in september’,‘jane is’,‘jane visits’,这样不断循环下去,直到得到终止符号。
可以看出来,当K=1时,这种方法就是前面所说的贪心策略。
下面是课程中给出的三种方法对比结果
在这里插入图片描述
另外,课程中也讲到,K的选取也要在一定范围内。K值较小时,反向效果是随K值的增大而变好的,但是当K过于大后,就会使得模型效率下降,翻译性能降低。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
去年,谷歌发布了 Google Neural Machine Translation (GNMT),即谷歌神经机器翻译,一个 sequence-to-sequence (“seq2seq”) 的模型。现在,它已经用于谷歌翻译的产品系统。   虽然消费者感受到的提升并不十分明显,谷歌宣称,GNMT 对翻译质量带来了巨大飞跃。   但谷歌想做的显然不止于此。其在官方博客表示:“由于外部研究人员无法获取训练这些模型的框架,GNMT 的影响力受到了束缚。”   如何把该技术的影响力最大化?答案只有一个——开源。   因而,谷歌于昨晚发布了 tf-seq2seq —— 基于 TensorFlow 的 seq2seq 框架。谷歌表示,它使开发者试验 seq2seq 模型变得更方便,更容易达到一流的效果。另外,tf-seq2seq 的代码库很干净并且模块化,保留了全部的测试覆盖,并把所有功能写入文件。   该框架支持标准 seq2seq 模型的多种配置,比如编码器/解码器的深度、注意力机制(attention mechanism)、RNN 单元类型以及 beam size。这样的多功能性,能帮助研究人员找到最优的超参数,也使它超过了其他框架。详情请参考谷歌论文《Massive Exploration of Neural Machine Translation Architectures》。   上图所示,是一个从中文到英文的 seq2seq 翻译模型。每一个时间步骤,编码器接收一个汉字以及它的上一个状态(黑色箭头),然后生成输出矢量(蓝色箭头)。下一步,解码器一个词一个词地生成英语翻译。在每一个时间步骤,解码器接收上一个字词、上一个状态、所有编码器的加权输出和,以生成下一个英语词汇。雷锋网(公众号:雷锋网)提醒,在谷歌的执行中,他们使用 wordpieces 来处理生僻字词。   据雷锋网了解,除了机器翻译,tf-seq2seq 还能被应用到其他 sequence-to-sequence 任务上;即任何给定输入顺序、需要学习输出顺序的任务。这包括 machine summarization、图像抓取、语音识别、对话建模。谷歌自承,在设计该框架时可以说是十分地仔细,才能维持这个层次的广适性,并提供人性化的教程、预处理数据以及其他的机器翻译功能。   谷歌在博客表示: “我们希望,你会用 tf-seq2seq 来加速(或起步)你的深度学习研究。我们欢迎你对 GitHub 资源库的贡献。有一系列公开的问题需要你的帮助!”   GitHub 地址:https://github.com/google/seq2seq   GitHub 资源库:https://google.github.io/seq2seq/nmt/ 标签:tensorflow  seq2seq  谷歌  机器学习

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值