教程 | 如何为神经机器翻译配置编码器-解码器模型?

x
用微信扫描二维码
分享至好友和朋友圈

  选自machinelearningmastery

  作者:Jason Brownlee

  机器之心编译

  参与:Panda

  

  神经机器翻译已经成为了当前表现最好的机器翻译方法,这在很大程度上得益于编码器-解码器架构的应用。Jason Brownlee 近日发表文章对论文《Massive Exploration of Neural Machine Translation Architectures》的研究成果进行了介绍,给出了为神经机器翻译配置编码器-解码器模型的方法和一些实用的建议。

  

  编码器-解码器架构的循环神经网络在当前的标准机器翻译基准上实现了最佳的结果,并且也已经在业界的翻译服务核心得到了应用。

  这种模型很简单,但由于训练该模型需要大量的数据,为了处理你的问题可能需要在模型中对大量设计决策进行调整,对我们来说这实际上很难办到。幸好那些研究科学家可以使用谷歌提供那种大规模硬件设备来为我们完成这项工作,这也为我们了解如何为神经机器翻译以及一般意义上的序列预测任务配置编码器-解码器模型提供了一些启发。

  在这篇文章中,你将读到如何为神经机器翻译以及其它自然语言处理任务最好地配置编码器-解码器循环神经网络。

  在读完这篇文章之后,你将了解:

  谷歌为了隔离编码器-解码器模型中每个模型设计决策的影响而对它们进行的研究。

  用于词嵌入、编码器和解码器深度以及注意机制的设计决策的结果和建议。

  可用于开启你自己的序列到序列项目的一组基本的模型设计决策。

  让我们开始吧!

  用于神经机器翻译的编码器-解码器模型

  具有编码器-解码器架构的循环神经网络已经超越了传统的基于短语的统计机器翻译系统,实现了当前最佳的结果。

  给个证据,谷歌在 2016 年发表了论文《Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation》,参阅机器之心文章《重磅 | 谷歌翻译整合神经网络:机器翻译实现颠覆性突破》;该论文称谷歌现在已经将这种技术用在了他们的谷歌翻译服务中。

  这种架构面临着一个问题:模型很大,这反过来又需要非常大的数据集来进行训练。这可能会导致模型需要耗费数天乃至数周的时间,而且通常也还需要成本高昂的计算资源。因此,在模型的不同设计选择的影响方面的研究还很少。

  Denny Britz 等人在他们 2017 年的论文《Massive Exploration of Neural Machine Translation Architectures》中明确解决了这一问题。在这篇论文中,他们设计了一种用于标准英德翻译任务的基准模型,并且列出了一组不同的模型设计选择,然后描述了它们对模型的能力的影响。他们宣称完整的整套实验消耗了 250,000 小时的 GPU 计算时间,可以说这是非常了不起的。

  

  我们报告了数百次实验运行的实验结果和方差数,相当于在标准的 WMT 英德翻译任务上 250,000 小时的 GPU 计算时间。我们的实验能为开发和扩展 NMT 架构提供全新的见解和实用的建议。

  

  在这篇文章中,我们将介绍这篇论文的一些发现,并且我们可以将这些发现用于调节我们自己的神经机器翻译模型以及广义上的序列到序列模型。

  更多有关编码器-解码器架构和注意机制的背景信息可参阅:

  编码器-解码器长短期记忆网络:https://goo.gl/b38cb2

  长短期记忆循环神经网络中的注意机制:https://goo.gl/7Z5Wha

  基准模型

  我们首先介绍一下用作所有实验的起点的基准模型。

  所选择的基准模型配置应该要在翻译任务上有足够好的表现。

  嵌入:512 维

  RNN 单元:门控循环单元(GRU)

  编码器:双向

  编码器深度:2 层(每个方向各 1 层)

  解码器深度:2 层

  注意:Bahdanau 风格的

  优化器:Adam

  dropout:在输入上 dropout 20%

  每个实验都是从基准模型开始的,为了隔离设计决策对模型能力的影响,一次只改变一个元素;在这里所用的评估标准是 BLEU 分数。

  

  用于神经机器翻译的编码器-解码器模型,来自论文《Massive Exploration of Neural Machine Translation Architectures》

  嵌入的大小

  词嵌入的作用是表示用于编码器的词输入。

  这是一种分布式的表征,其中每个词都被映射成了一个连续值构成的固定大小的向量。这种方法的优势在于具有相似含义的不同词将会具有相似的表征。

  这种分布式表征通常是在训练数据上拟合模型的过程中学习到的。嵌入的大小定义了用于表征词的向量的长度。一般而言,更大的维数能得到表达能力更好的表征,由此模型的能力也会更好。

  有意思的是,结果表明使用了最大嵌入的测试也确实得到了最佳的结果,但整体上增加大小所带来的增益较小。

  

  (结果表明)2048 维的嵌入得到了整体上最好的结果,但只是更好一点点。即使较小的 128 维嵌入也表现得非常好,同时收敛速度还差不多快了一倍。

  

  建议:从较小的嵌入开始,比如 128,也许之后可以为了较小的能力提升而增大嵌入。

  RNN 单元类型

  有三种常用的循环神经网络单元类型:

  简单 RNN

  长短期记忆(LSTM)

  门控循环单元(GRU)

  LSTM 是为解决简单 RNN 的梯度消失问题而开发的,因为这个问题会限制深度 RNN 的训练。GRU 则是为简化 LSTM 而开发的。

  结果表明 GRU 和 LSTM 都比简单 RNN 显著更优,但一般来说 LSTM 总体上更好。

  

  在我们的实验中,LSTM 单元的表现一直优于 GRU 单元。

  

  建议:在你的模型中使用 LSTM RNN 单元。

  编码器-解码器深度

  一般而言,更深的网络会表现得比更浅的网络更好。

  关键在于找到网络深度、模型能力和训练时间之间的平衡。因为我们训练非常深度的网络的资源并不是无限的,所以如果对模型能力的提升不大,就不必那么深。

  那篇论文的作者研究了编码器和解码器模型的深度以及它们对模型能力的影响。

  在编码器方面,他们发现深度对模型能力的影响并不是很大,更让人惊讶的是,有一个 1 层的双向模型比 4 层的双向模型的表现还稍微好一点。有一个 2 层的双向编码器也比测试中其它配置的表现都稍好一些。

  

  我们没发现任何证据表明超过 2 层的编码器深度是必要。

  

  建议:使用 1 层的双向编码器,然后扩展成 2 层可以让模型能力得到少量提升。

  解码器方面也有类似的情况。1、2 和 4 层的解码器的表现差异不大,其中 4 层的表现稍好一些。8 层的解码器在该测试条件下不能收敛。

  在解码器方面,更深度的模型的表现比更浅的模型稍好一些。

  建议:使用 1 层的解码器作为开始,然后使用 4 层的解码器得到更好的结果。

  编码器输入的方向

  提供给编码器的源文本的序列顺序可以有多种方式:

  前向(或普通方向)

  反向

  同时前向和反向

  该论文比较了多种单向和双向配置,探索了输入序列的顺序对模型能力的影响。

  总体而言,他们证实了之前的发现,即反向序列比前向序列更好,双向序列又比反向序列稍微好些。

  

  ……双向编码器一般优于单向编码器,但超出不多。具有反向源的编码器总是比对应的非反向源更优。

  

  建议:使用反向顺序的输入序列或采用双向的方式以在模型能力上得到少量提升。

  注意机制

  朴素的编码器-解码器模型存在一个问题:其编码器将输入映射成长度固定的内部表征,编码器又必须使用这些内部表征来得到整个输出序列。

  注意是针对模型的一种改进,可以让模型在得到输出序列中的每个词时「关注」输入序列中的不同词。

  该论文调查了简单注意机制的几种变体。结果表明使用注意能极大地提升模型的表现。

  

  尽管我们确实能够预料基于注意的模型的表现会显著超越没使用注意机制的模型,但无注意模型的表现之差还是让人惊讶。

  

  Bahdanau 等人在 2015 年的论文《Neural machine translation by jointly learning to align and translate》中描述了一种简单的加权平均式的注意,事实证明这种方法的表现是现在最好的。

  建议:使用注意,最好是 Bahdanau 那种加权平均式的注意。

  推理

  神经机器翻译系统经常使用波束搜索来采样模型输出的序列中词的概率。

  波束的宽度越大,搜索就越详尽,结果就应该越好。

  研究结果表明,适中的 3 到 5 的波束宽度的表现最好,通过使用长度惩罚项(length penalty)只能在上面带来少许改善。一般而言,作者建议针对具体问题调整波束宽度。

  

  我们发现经过良好调节的波束搜索对实现优良的结果而言是很重要的,其能带来超过 1 个 BLEU 分数的增益。

  

  建议:从贪婪搜索(波束=1)开始,然后根据你的具体问题进行调节。

  最终的模型

  该论文将他们的发现总结成了一个单一的「最佳模型」,并且将这个模型与其它表现良好的模型以及当前最佳模型进行了比较。

  这个模型的具体配置情况如下表所示,该表取自原论文。当你在为 NLP 应用开发自己的编码器-解码器模型时,可以使用这些参数作为开始,这能提供一个相当好或最好的起点。

  

  最终的 NMT 模型配置总结,来自论文《Massive Exploration of Neural Machine Translation Architectures》

  该系统的表现非常出色,使用一个更简单的模型就达到了接近当前最佳的水平——实现当前最佳并不是该论文的目标。

  

  ……我们的研究表明经过仔细的超参数调节和优良的初始化,在标准的 WMT 基准上实现当前最佳的表现是可能的。

  

  而且,该论文的作者还在 tf-seq2seq 项目中开源了他们所有的代码。因为其中两位作者是谷歌大脑 Residency 项目的成员,所以谷歌研究博客也曾介绍过他们的研究成果,参阅机器之心的引介《资源 | 谷歌官方开源 tf-seq2seq:一种通用编码器-解码器框架》。

  扩展阅读

  这部分提供了更多资源,可以帮助你更深入的学习。

  论文《Massive Exploration of Neural Machine Translation Architectures》:https://arxiv.org/abs/1703.03906 ;参阅机器之心的介绍《前沿 | 首次大规模神经机器翻译架构分析结果出炉,LSTM 优于 GRU》

  Denny Britz 的主页:http://blog.dennybritz.com

  WildML 博客:http://www.wildml.com

  谷歌博客介绍 tf-seq2seq:https://research.googleblog.com/2017/04/introducing-tf-seq2seq-open-source.html

  tf-seq2seq 开源项目:https://github.com/google/seq2seq

  tf-seq2seq 项目文档:https://google.github.io/seq2seq/

  tf-seq2seq 教程:https://google.github.io/seq2seq/nmt/

  论文《Neural machine translation by jointly learning to align and translate》:https://arxiv.org/abs/1409.0473

  机器之心文章《深度 | 神奇的神经机器翻译:从发展脉络到未来前景(附论文资源)》

  原文链接:https://machinelearningmastery.com/configure-encoder-decoder-model-neural-machine-translation/

  本文为机器之心编译,转载请联系本公众号获得授权

特别声明:本文为网易自媒体平台“网易号”作者上传并发布,仅代表该作者观点。网易仅提供信息发布平台。

跟贴 跟贴 0 参与 0
© 1997-2018 网易公司版权所有 About NetEase | 公司简介 | 联系方法 | 招聘信息 | 客户服务 | 隐私政策 | 广告服务 | 网站地图 | 意见反馈 | 不良信息举报

机器之心

专业的人工智能媒体

头像

机器之心

专业的人工智能媒体

2964

篇文章

79558

人关注

列表加载中...
请登录后再关注
x

用户登录

网易通行证/邮箱用户可以直接登录:
忘记密码