原标题:EMNLP 2018 |
结合通用和专用NMT的优势,CMU为NMT引入「语境参数生成器」

原文:https://www.tensorflow.org/versions/r1.5/tutorials/seq2seq

方今,谷歌官方在
Github开放了一份神经机器翻译课程,该学科从基本概念达成起来,首先搭建了三个简练的NMT模型,随后更进一步引进注意力机制和多层
LSTM加强系统的性质,最终谷歌(谷歌(Google))根据GNMT提供了更进一步改进的技能和细节,那一个技巧能令该NMT系统达到十分高的精度。机器之心对该学科进行简单的叙述,跟详细和纯粹的情节请查看项目原网站。

姓名:张萌          学号17021211113

选自arXiv

(全文99.9%由google翻译,自学使用)

GitHub 链接:

转自:

作者:Emmanouil Antonios
Platanios等

作者:Thang Luong,Eugene Brevdo,Rui Zhao(Google Research
Blogpost,Github)

机器翻译,即跨语言间的自行翻译,是机器学习社区最活跃的琢磨世界。在机械翻译的无数艺术中,体系到行列(sequence-to-sequence,seq2seq)模型[1,
2]
方今收获巨大成功。由于其可以动用深度神经互联网获取句义,该模型成为谷歌(Google)翻译等半数以上商贸翻译系统实际的正儿八经模型。不过,尽管关于OpenNMT
或 tf-seq2seq 等
seq2seq模子的材质早已分外丰富,但亦可指点人们很快创设高品质翻译系统的文化和技艺仍旧略显不足。

【嵌牛导读】:近来,AAAI 2018
揭橥故事集接收列表,百度机械翻译团队的论文《Multi-channel Encoder for
Neural Machine
Translation》上榜。文章指出了一种多信道编码器(MCE)模型,可校订古板神经机器翻译(NMT)模型单一信道编码的老毛病。该模型在中国和英国翻译上的
BLEU 值提高了当先 肆个百分点,在英法翻译上用单层模型取得了可与深层模型媲美的功用。本文对该散文的显要内容做了介绍。

参与:白悦、刘晓坤

本学科的那几个本子须求TensorFlow Nightly。
为了采取稳定的TensorFlow版本,请考虑其余分支,如tf-1.4。

前几日,我们很欢悦可以宣布新型的TensorFlow
神经机器翻译课程,接济读者周密精通seq2seq模子,并介绍如何从头先河营造有竞争力的翻译模型。该学科尽大概简单地显现该进程,教程首先介绍神经机器翻译的背景知识,并描述创设vanilla系统的有血有肉代码。然后介绍注意力机制 [2018舆论提议新型NMT模型,神经机器翻译。3, 4] 这一支持 NMT
系统处理长句的重大工具。末了,本课程将执教怎么着复制谷歌(谷歌)NMT(GNMT)系统
[5] 的紧要性天性,以实将来三个 GPU 上练习模型。

【嵌牛鼻子】:NMT模型

通用和专用 NMT
模型分别在一般语言对和稀世语言对的翻译中有所优势,但这也反映了独家的逆风局,取决于参数共享的水平。为此,CMU
的研商者在本文中指出了一种在两者之间取得平衡艺术,不要求变更 NMT
原有架构,而是引入新的零部件
CPG,来可控地完结不相同语言对模型之间的参数共享。该器件可无缝结合不一致的NMT,并在原则数据集上取得当前一级。探究者强调,该措施使大家更类似普适的中游语言。

即使应用那么些代码库举办研究,请引用此。

本学科包涵实际的规范测试结果,用户可自行复制。大家的模型提供强大的开源基准,其性格不亚于
GNMT 的结果 [5]。大家在 WMT 2016 的西班牙语转加泰罗尼亚语翻译任务中得到了 BLEU
得分 24.4 的大成。

【嵌牛提问】:新的NMT模型是如何?

神经机器翻译(NMT)无需单独陶冶或调整系统的任何部分就可以直接建模源语言到目标语言的投射。那使得
NMT 快速进步,并在不少常见环境中中标应用 (Wu et al., 二零一五; Crego et
al.,
贰零壹肆)。编码器-解码器抽象使创设将其他语言的源句映射到向量表示,再将向量表示解码到任何目的语言的系统在概念上变得实惠。由此,人们提出了各类法子来扩张那种多语言机器翻译的虚幻
(Luong et al., 二〇一四; Dong et al., 二〇一四; Johnson et al., 2017; Ha et al.,
二零一六; Firat et al., 2014a)。

介绍(Introduction)

序列 – 序列(seq2seq)模型(Sutskever et al.,
2014,
Cho et al.,
2014
)在机器翻译,语音识别和文书摘要等各个职务中拿到了宏伟的功成名就。
本教程为读者提供了seq2seq模子的大公无私了然,并浮现了什么发轫打造3个有竞争力的seq2seq模子。
我们注意于神经机器翻译(NMT)的职务,它是seq2seq模子的率先个测试平台。
包罗的代码是轻量级的,高质量的,生产就绪,并结成最新的研商思路。
大家透过以下措施完毕这么些:

  1. 利用以来的解码器/注意力包装器(decoder / attention
    wrapper)API,TensorFlow 1.2数额迭代器
  2. 构成大家强大的专业知识,建立循环和seq2seq模子
  3. 为确立最好的NMT模型和复发Google’s NMT
    (GNMT)系统提供技能和窍门。

笔者们深信提供人们能够轻松再次出现的benchmarks是可怜关键的。
因而,大家提供了总体的试验结果,并在偏下公开可用的数量集上对模型举办预操练:

  1. 小规模:IWSLT Evaluation
    Campaign提供的拉脱维亚语 –
    丹麦语TED对话语料库(133K个句子对)。
  2. 大规模:WMT Evaluation
    Campaign提供的德英平行语料库(4.5M句子对)。

咱们率先建立部分关于NMT的seq2seq模子的基本知识,解释怎么着树立和教练2个vanilla
NMT模型。 第贰有个别将器重于营造具有注意力机制的竞争性NMT模型。
然后,大家将探讨一些技巧和诀窍,以创设最佳NMT模型(包蕴进程和翻译品质),如TensorFlow最佳实践(批处理,分段),双向LANDNN,波束搜索(beam
search [本条是什么?])以及利用GNMT注意力扩张到多少个GPU。

本学科还包罗其余的原则测试结果(立陶宛(Lithuania)语转西班牙语、菲律宾语转斯洛伐克语)。

【嵌牛正文】:

多语言 NMT
以前的行事可大概分为三种范式。第二个通用 NMT (Johnson et al., 2017; Ha
et al., 贰零壹伍) 对持有语言应用单一模型。通用 NMT
没有别的特定语言的参数化,在翻译截然差异的言语和数量有限的场所下,那种情势过于简单化且万分不利。通过实验求证,Johnson等人的主意(2017)在高样本复杂度情形下质量变差,因而在不难的数据设置中显现糟糕。Ha
等人指出的通用模型(二零一六)必要输入句子的新编码方案,那会造成过大的词汇量从而难以扩展。第两种范式,特定于逐个语言的编码器-解码器
(Luong et al., 二零一六; Firat et al.,
贰零壹伍a),每一种语言使用独立的编码器和平解决码器。那不允许跨语言共享音讯,大概造成过度参数化,且在语言相似的状态下只怕有害。

基础知识(Basic)

除此以外,本学科将绽放全动态的 seq2seq API(随 TensorFlow 1.2 发布),该 API
使 seq2seq 模型的营造进程干净、简单、易读:

根据注意力的神经机器翻译确实成为 NMT
最可行的架构,在许多语言对上跨越了价值观的总计机器翻译(SMT)系统(Sen-nrich
et al.
2017)。基于注意力的模型之所以可以大大超越典型的编码器-解码器模型,在于它可以透过3个针锋相对简便易行的匹配函数动态检索相关联的源语块(类似
SMT
中的对齐)。换言之,基于注意力的模子收益于丰硕的源语句表征及其代表局地结构的灵活性。

在本文中,CMU
的讨论者在那二种办法之间赢得了平衡,指出了一种能够分别为逐个语言学习参数的模子,同时也能在相似语言之间共享音讯。研讨者使用了新的语境相关的参数生成器(CPG),它可以(a)泛化全部那些格局;(b)缓解上述通用和单身语言编码器-解码器系统的标题。它将语言嵌入作为翻译的语境举办学习,并用它们为具备语言对转移共享翻译模型的参数。因而,它为那一个模型提供了每一种语言单独学习参数的力量,同时也在一般语言之间共享音讯。参数生成器是通用的,允许以那种方法加强任何现有的
NMT 模型。其它,它富有以下所企望的特点:

神经机器翻译的背景(Background on Neural Machine Translation)

在过去,传统的依据短语的翻译系统通过将源语句拆分成多个部分然后将其逐句翻译来施行他们的职务。
那造成了翻译产出的不通畅,并不像大亲朋好友类翻译的那样。
我们涉猎整个源句子,领会它的情致,然后发生一个翻译。
神经机器翻译(NMT)模仿的就是那种艺术!

澳门金沙4787.com官网 1

图1.编码器 – 解码器架构 – 用于NMT的形似方法的例子。
编码器将源语句转换为通过解码器传递的“意义”向量以发出翻译。

具体而言,NMT系统率先使用编码器读取源句子来营造“思想”向量,表示句子含义的数字体系;
解码器然后甩卖句子向量以发出翻译,如图1所示。这一般被誉为编码器 –
解码器种类布局。
NMT以那种方法缓解了古板的基于短语的主意中的局地翻译难题:它可以捕捉语言的悠长重视,例如性别协议;
语法结构等; 并通过谷歌(谷歌(Google))神经机器翻译系统(Google Neural Machine
Translation
systems)浮现了更通畅的翻译。

NMT模型按照其方便的系统布局而有所不一样。
对于连串数据,很自然的采取是多数NMT模型所使用的递归神经网络(讴歌MDXNN)。
编码器和平解决码器日常使用奥迪Q3NN。 但是,OdysseyNN模型在以下方面有所不相同:(a)方向性

  • 单向或双向; (b)深度 – 单层或多层; 和(c)类型 –
    寻常是常见LacrosseNN,长时间长期回忆(LSTM)或门控循环单元(GRU)。
    有趣味的读者可以在那篇博文中找到关于HavalNN和LSTM的越来越多消息。

在本教程中,大家以单向的吃水多层本田CR-VNN为例,将LSTM作为三个递归单元。
大家在图2中显示了这么模型的3个例子。在那个例子中,我们树立了2个模型,将源句子”I
am a student”翻译成目标句子”Je suisétudiant”。
在高层次上,NMT模型由三个递归神经互连网组成:编码器中华VNN仅仅消耗输入的源单词而不作任何预测;
另一方面,解码器在前瞻下二个单词的同时处理对象语句。

欲精晓更多音讯,大家向读者介绍本课程所按照的Luong
(2016)。

澳门金沙4787.com官网 2

图2.神经机器翻译 – 二个纵深循环架构的例子,将源句子“I am a
student”翻译成目标句子“Je suistétudiant”。
那里,“<s>”表示解码进度的起来,而“</ s>”表示解码器停止。

采纳 tf.contrib.data 中流行输入的管道对动态调整的输入体系进行预处理。

在第一名的依据注意力的 NMT 系统中,使用双向循环神经互联网(bi奇骏NN)
对源语句进行编码,利用 QashqaiNN
生成向量连串,粗略来说那些向量就是源语句单词的上下文感知嵌入(context-aware
embedding)。那种规划下,编码器学习相对一致的语句组合。近来,编码器中的
福特ExplorerNN 已经被某些不敢后人的门控机制变体所代表,例如 LSTM 和
GRU。对翻译来说,普遍期望解码器采纳极其符合本身语言架构的语句组合块。

  1. 不难易行:类似 Johnson 等人(2017)和 Ha 等人(二零一四)的章程,且与 Luong
    等人(二〇一四 年)和 Firat
    等人(二〇一六a)的艺术相反,它只需稍作修改就足以应用于大多数现有的 NMT
    系统,并且可以无缝地包容注意力层。
  2. 多语言:和事先同1、允许行使同样的单个模型进行多语言翻译。
  3. 半监察:可以动用单语数据。
  4. 可扩充:通过在语言间使用多量但可控的共享来压缩参数的数额,从而减弱大气数码的必要,如
    Johnson等人所述(2017)。它还同意语言的解耦,防止对大气共享词汇需要,如 Ha
    等人所述(二零一六)。
  5. 适应性强:无需完全重复锻练就可以适应新语言。
  6. 当前早先进的章程:比成对 NMT 模型和 Johnson等人的模子具备更好的属性。(2017
    年)。事实上,该方法优于初阶进的质量。

安装教程(Installing the Tutorial)

要设置本课程,您须要在系统上安装TensorFlow。 本教程须要TensorFlow
Nightly。 要设置TensorFlow,请依照那边的安装表明举行操作。
借使设置了TensorFlow,您能够运作以下命令来下载本学科的源代码:

git clone https://github.com/tensorflow/nmt/

动用批量填写和体系长度 bucketing,进步教练进度和演绎速度。

在此须求下,百度探究员指出了一种多信道编码模型(MCE),采纳差别层次组合的编码组件。更具体而言,除了编码
昂科雷NN 的隐态,MCE 为不带组合的原始编码采用了原始词嵌入,并在 NTM
中以近乎于含有不一样频率的视觉信道的法子为更扑朔迷离的咬合专门设计了外部存储器。全体八个编码策略在由参数控制的解码进程中被正好混合,并可以以端到端的格局被学习。更切实说,百度布署了1个方可自动调节不相同编码信道权重的门控机制。

我首先介绍二个可用来定义和讲述大多数存世 NMT
系统模块化框架,然后,在第 3
节中,将依据该框架介绍本商量的要害贡献,即语境参数生成器(CPG)。小编还论证了该措施使我们更就像普适的中游语言。

训练 – 怎么样建立大家的首先个NMT系统(Training – How to build our first NMT system)

第三,大家将深远探究用现实的代码片断创设NMT模型的主干,大家将通过它更详细地解释图2。
大家将数据准备和完全的代码推迟到后来。
那有的是指文件model.py

在底层,编码器和解码器PAJERONNs接收以下输入:首先是源句子,然后是提醒从编码转换来解码方式的界线标记”<s>”
,和对象语句。
对于操练,大家会给系统提供以下张量,那一个张量在岁月上是非同一般格式,包罗文字索引:

  • encoder_inputs [max_encoder_time,batch_size]:源输入单词。
  • decoder_inputs [max_decoder_time,batch_size]:目的输入单词。
  • decoder_outputs
    [max_decoder_time,batch_size]:目的输出单词,那一个是decoder_input向左移动一个时光步,右侧添加贰个句尾甘休标记。
    此处为了提升效用,我们一齐练习多少个句子(batch_size)。
    测试稍有不同,所以大家稍后再议论。

应用通用结构和陶冶时间表磨炼 seq2seq
模型,包罗各样注意力机制和稳定抽样。

在此杂文中,作者们也调查了 MCE 在分歧的翻译职务上的突显。首先,在 NIST
中翻英任务上测试了该模型,比较于强大的 DL4MT 系统平均进步了 6.52 的 BLEU
得分。别的,在 WMT 二〇一四 英翻法职分上,单个浅层模型得到了 38.8 的 BLEU
得分,可比美于顶尖模型。

论文:Contextual Parameter Generation
for Universal Neural Machine Translation

嵌入(Embedding)

鉴于单词的归类性质,模型必须首先查找源和对象的嵌入来寻觅相应的词表示(word
representations)。
为了使那个松手层起效用,首先为逐个语言接纳1个词汇表。
日常,选拔词汇量V,只有最频仍的V词才被视为唯一。
全数其余单词都更换为”unknown”标记,并获取一致的内置。
嵌入权重,各个语言一套,平常在训练中上学。

# Embedding
embedding_encoder = variable_scope.get_variable(
    "embedding_encoder", [src_vocab_size, embedding_size], ...)
# Look up embedding:
#   encoder_inputs: [max_time, batch_size]
#   encoder_emb_inp: [max_time, batch_size, embedding_size]
encoder_emb_inp = embedding_ops.embedding_lookup(
    embedding_encoder, encoder_inputs)

如出一辙,大家可以创设embedding_decoder和decoder_emb_inp。
请注意,可以挑选接纳预练习词表示(例如word2vec或Glove
vectors)来起先化嵌入权重。
一般的话,给定多量的教练多少,大家得以开首学习这一个嵌入。

使用 in-graph 集束搜索在 seq2seq 模子中进行推导。

论文:Multi-channel Encoder for Neural Machine Translation

澳门金沙4787.com官网 3

编码器(Encoder)

借使检索出来,嵌入字就当做输入被输入到主网络中,主网络由多个多层本田CR-VNN组成

  • 2个源语言的编码器和三个目的语言的解码器。
    那五个TucsonNN原则上可以分享相同的权重;
    可是,在实践中,大家平常接纳两个不等的凯雷德NN参数(这一个模型在拟合大型陶冶多少集时效果更好)。
    编码器昂科雷NN使用零矢量作为其开端状态,并且如下打造:

    # Build RNN cell
    encoder_cell = tf.nn.rnn_cell.BasicLSTMCell(num_units)

    # Run Dynamic RNN
    # encoder_outputs: [max_time, batch_size, num_units]
    # encoder_state: [batch_size, num_units]
    encoder_outputs, encoder_state = tf.nn.dynamic_rnn(

      encoder_cell, encoder_emb_inp,
      sequence_length=source_sequence_length, time_major=True)
    

请小心,为幸免浪费计算,句子具有差别的长短,我们因此source_sequence_length告诉dynamic_rnn确切的源句子长度。
由于大家的输入是时序主要的,大家设置time_major = True。
在此处,大家只建立2个单层的LSTM,encoder_cell。
大家将介绍怎样构建多层LSTM,添加dropout,并在背后的章节中行使attention。

优化 seq2seq 模型,以实今后多 GPU 设置中的模型锻练。

澳门金沙4787.com官网 4

  • 杂文地址:
  • 品类地址:

解码器(Decoder)

解码器也亟需拜访源新闻,二个简短的法子就是用编码器的末段三个隐藏状态encoder_state来起首化它。
在图2中,大家将源语词“student”的隐没状态传递给解码器端。

# Build RNN cell
decoder_cell = tf.nn.rnn_cell.BasicLSTMCell(num_units)

# Helper
helper = tf.contrib.seq2seq.TrainingHelper(
    decoder_emb_inp, decoder_lengths, time_major=True)
# Decoder
decoder = tf.contrib.seq2seq.BasicDecoder(
    decoder_cell, helper, encoder_state,
    output_layer=projection_layer)
# Dynamic decoding
outputs, _ = tf.contrib.seq2seq.dynamic_decode(decoder, ...)
logits = outputs.rnn_output

在此处,这几个代码的中央部分是BasicDecoder对象、解码器,其接收decoder_cell(类似于encoder_cell),帮忙器,以及以前的encoder_state作为输入。
通过分离出解码器和帮忙器,大家可以引用不一样的代码库,例如,可以用GreedyEmbeddingHelper代替TrainingHelper来开展贪婪的解码。
请参阅helper.py。

最后,我们并未涉及projection_layer是3个密布的矩阵,它将顶部隐藏状态转化为维数为V的logit向量。大家在图2的顶部表达了那些进程。

projection_layer = layers_core.Dense(
    tgt_vocab_size, use_bias=False)

下文我们将简要地介绍该 Github 教程项目。

舆论链接:

摘要:大家对现有神经机器翻译(NMT)模型进行了简约校正,允许行使单个通用模型完毕各种语言之间的翻译,同时同意语言特定的参数化,并且还能用于域适应。大家的措施不需求变更专业
NMT
系统的模型架构,而是引入了新的组件,即语境参数生成器(CPG),能够扭转系统的参数(例如,神经互联网中的权重)。该参数生成器接受源语言嵌入和目的语言嵌入作为输入,并各自为编码器和解码器生成参数。模型的其他部分保持不变,并在全数语言中共享。大家呈现了那种简易的匡正怎么着使系统利用单语数据举行操练并贯彻
zero-shot 翻译。咱们进一步注明,它可以跨越 IWSLT-15 和 IWSLT-17
数据集的此时此刻最佳性能,并且求学的言语嵌入可以察觉语言之间的幽默关系。

损失(Loss)

依据下边的logits,大家前几日备选计算我们的操练损失:

crossent = tf.nn.sparse_softmax_cross_entropy_with_logits(
    labels=decoder_outputs, logits=logits)
train_loss = (tf.reduce_sum(crossent * target_weights) /
    batch_size)

这里,target_weights是与decoder_outputs相同大小的0-1矩阵。
它将目的种类长度之外的值填充0。

珍重表明:值得提议的是,大家用batch_size来划分损失,所以我们的超参数对batch_size是“不变的”。
有个外人用(batch_size *
num_time_steps)来划分损失,裁减了短句的不当。
更微妙的是,我们的超参数(应用于前一种方法)不可以用来后一种办法。
例如,即使三种办法都利用SGD来上学1.0,则后一种艺术有效地采取1 /
num_time_steps的更小的上学速率。

引言

摘要:基于注意力的编码器-解码器是十二分实惠的神经机器翻译(NMT)架构,它平常器重于循环神经网络(翼虎NN)在解码进程中营造由
attentive reader 调用的块。尽管采用门控机制编码
君越NN,但那种编码器的设计在源语句上暴发了相对均等的三结合。另一方面,我们常常希望解码器可以在不相同层次上选用若干个源语句来匹配其本身语言结构:比如,大家或者想行使原始方式的实体名,同时选拔3个习语(idiom)作为七个两全的结缘单元。受此要求启发,我们指出了多信道编码器(Multi-channel
Encoder/MCE),它增强了不一致层面组合的编码组件。更实际的是,除却编码 PAJERONN
的隐身状态,1)MCE
为不带组合的原始编码采取了原始词嵌入;2)神经图灵机(NTM)专门计划的表面存储器用于越发复杂的结合,而全体三种编码策略在解码时被恰当地混合。汉英翻译的实证探究评释,我们的模型在强大的开源
NMT 系统 DL4MT1 上贯彻了 6.52 个 BLEU 百分点的升级换代。在 WMT14
英保加哈利法克斯语翻译务中,大家的十足浅层系统达到了 38.8 的 BLEU
值,与当下最优的深度模型极度。

澳门金沙4787.com官网 5

梯度总括和优化(Gradient computation & optimization)

前天我们曾经定义了NMT模型的正向传播。 计算反向传播只是几行代码的难题:

# Calculate and clip gradients
params = tf.trainable_variables()
gradients = tf.gradients(train_loss, params)
clipped_gradients, _ = tf.clip_by_global_norm(
    gradients, max_gradient_norm)

教练奥迪Q3NNs的最首要步骤之一是梯度裁剪。 在那里,大家在大局范围内开展裁剪。
最大值max_gradient_norm平日设置为5或1的值。最后一步是选项优化器。
Adam优化器是二个常用的挑选。 我们也接纳壹个学习率。
learning_rate的值一般可以在0.0001到0.001时期; 随着练习的进展可以减去。

# Optimization
optimizer = tf.train.AdamOptimizer(learning_rate)
update_step = optimizer.apply_gradients(
    zip(clipped_gradients, params))

在大家友好的试验中,大家采取正规SGD(tf.train.GradientDescentOptimizer),其深造速率逐步降低,那样能够收获更好的天性。
参见
benchmarks。

未完待续

队列到行列(seq2seq)模型(Sutskeveret al., 二零一四, Cho et
al.,二〇一六)在机器翻译、语音识别和文书摘要等职务上赢得了了不起的功成名就。本学科致力于支持读者周详驾驭seq2seq模子,并且出示了什么从头开首创设二个精锐的 seq2seq
模型。大家该教程会着重神经机器翻(NMT)职务,神经机器翻译是
seq2seq模型很好的试验台,并且已经赢得了广大的中标。大家采纳的代码是最最轻量、高品质、可投入生产并且结合了最新探讨思路的兑现。大家透过以下措施完结这一对象:

澳门金沙4787.com官网 6

图 1:在大家的模块化框架下的 NMT
系统概述。大家的重大进献在于参数生成器模块(即,耦合或解耦——具有灰色字体的每种框是单独的取舍)。注意,g
表示参数生成器网络。在大家的试行中,大家考虑该互连网的线性方式。不过,大家的孝敬并不在于其余模块的挑选;我们还能够将富有分裂架构的参数生成器和差距门类的词汇表用于编码器和解码器。

动用新型的解码器/attention wrapper API、TensorFlow 1.2 数据迭代器。

澳门金沙4787.com官网 7

澳门金沙4787.com官网 8

结缘了笔者们在创设循环型和 seq2seq 型模型的专业知识。

图 1:左图是价值观的基于注意力的 NMT
模型,包括编码器、解码器和3个注意力机制。左边是大家的崭新 NMT
模型,带有五个信道编码器,包蕴来自双向 RNN 的隐形状态、NTM
中的外部存储和直接源于输入连串的放置,并设计了一种门控注释(gated
annotation)自动学习不一致解码组件的权重。

表 1:我们指出的有功底成对
NMT(PNMT)模型的艺术(阴影的一行)和用于 IWSLT-15 数据集的 谷歌(Google)多语言 NMT
模型(GML)的可比。百分比的并列行呈现操练时使用多少有些(1%、十分一、百分之百)的平行语料库;其余的仅看成单语数据。表中突显了
BLEU 和 Meteor 目标的结果。CPG *意味着与 CPG
相同的模子,但未使用自动编码训练样本举行训练。各种情状下的最佳分数加粗突显。

提供了可创设最好 NMT 模型的技巧,同时还复制了谷歌(谷歌(Google))的 NMT(GNMT)系统。

澳门金沙4787.com官网 9

澳门金沙4787.com官网 10

我们信任提供全体人都很简单复制的基准是那多少个关键的。由此,大家依据以下公开的数据集提供了上上下下的考查结果和预练习模型:

图 2:编码器中 NTM 的图示,每一年华步上 OdysseyNN 在 NTM 中的读和写。

表 2:大家指出的有底蕴成对
NMT(PNMT)模型的措施(阴影的一行)和用于 IWSLT-17 数据集的 Google多语言 NMT 模型(GML)的可比。因为 Meteor 不辅助 It、Nl 和
Ro,所以仅突显了 BLEU 度量标准的结果,CPG8 表示使用 8 个语言嵌入来表示
CPG。「C4」下标表示用于受控参数共享的 CPG 的低档版本(参见第 3.1
节),使用阶段 4 等。每一种情形下的极品得分加粗显示。

小框框数据集:TED 演说的希伯来语-德语平行语料库(133K
个句子对),该数量集由 IWSLT 伊娃luation Campaign 提供。

澳门金沙4787.com官网 11

正文为机械之心编译,转发请联系本公众号得到授权。回来和讯,查看愈多

大规模数据集:俄语-印度语印尼语平行语料库(4.5M 个句子对),该数额集由 WMT
伊娃luation Campaign 提供。

表 1:不一致系统在中翻英任务上的表现。比较于强大的开源系统
DL4MT,大家的模型有巨大的立异。大家也列出了与近年来开源的三个工具包
T2T、ConvS2S 的对待。要理解,T2T 和 ConvS2S 都以多层的纵深模型。

权利编辑:

我们首先须要通晓用于NMT 任务的 seq2seq
模子的基本知识,并索要知道什么创设和磨炼三个 vanilla NMT

澳门金沙4787.com官网 12

模型。第壹,局地将更进一步详细地诠释如何创设带注意力机制的无敌神经机器翻译模型。然后大家会谈谈打造更好神经机器翻译模型(翻译速度和质量)大概的技巧,例如TensorFlow
最好的施行措施(batching, bucketing)、双向循环神经网络和集束搜索等。

表 2:英翻法职分:BLEU 得分。其中 昂科威NN 表示基础的循环神经互联网模型,MCE
模型结合了从 帕杰罗NN 的内置、隐藏状态以及 NTM
中的外部存储两种编码组件。注意,大家的模型不实行PosUNK,且使用小型词汇量。

基础

澳门金沙4787.com官网 13

有关神经机器翻译

图 3:不一致语句长度下的天性。

以词组为根基的观念翻译系统将源语言句子拆分成两个词块,然后开展词对词的翻译。那使得翻译输出结果流畅性大打折扣,远远不如人类译文。大家会通读全体源语言句子、精通句子含义,然后输出翻译结果。神经机器翻译(NMT)竟然可以优孟衣冠人类的翻译进程!

百度机器翻译简介:百度机械翻译团队继 2016 年推出满世界第三个 NMT
线上翻译服务之后,通过不停不断的技术革新,在 NMT
模型讨论和制品商业化运用上屡创美好。在今年的百度世界大会上打响浮现了自行同声传译系统,语音识别和机具翻译技术无缝过渡,翻译结果流畅自然。同时,百度也在当年出产了一键式多语种
WIFI 翻译机,产品自带 80 八个国家的 4G
互连网、语种自动识别,提供多语种高质量语音翻译。

澳门金沙4787.com官网 14

澳门金沙4787.com官网 15

图 1.
编码器-解码器结构——神经机器翻译的通用方法实例。编码器将源语言句子转换来「意义」向量,然后通过解码器输出翻译结果。

具体来说,神经机器翻译系统率先应用编码器读取源语言句子,构建1个「思想」向量,即表示句义的一串数字;然后使用解码器处理该容器,并出口翻译结果,如图1所示。那就是大家不足为奇所说的编码器-解码器结构。神经机器翻译用这种方法消除以词组为根基的观念翻译系统蒙受的翻译难题:神经机器翻译可以捕捉语言中的长距离依赖结构,如词性一致、句法结构等,然后输出流利度更高的翻译结果,正如谷歌(Google)神经机器翻译系统现已形成的那样。

NMT模型在切实可行的构造中会发生变化。对于种类数据而言,最好的选项是循环神经网络(TucsonNN),那也被大多数NMT模型拔取。经常处境下,编码器和解码器都可使用循环神经互联网。不过,循环神经网络模型在下列意况下发生变化:(a)方向性(directionality),单向或双向;(b)深度,单层或多层;(c)类型,常常是vanilla
中华VNN、长长期回想(Long Short-term Memory,LSTM),或门控循环单元(gated
recurrentunit,GRU)。

感兴趣的读者可打开该网址(
讴歌MDXNN 和 LSTM 的更加多新闻。

本学科中,大家将以单向的吃水多层途乐NN(deep multi-layer 君越NN)为例,它利用
LSTM 作为循环单元。模型实例如图
2所示。大家在该实例中创设了二个模子,将源语言句子「I am a
student」翻译成目的语言「Je suis étudiant」。该
NMT模型包括多少个循环神经互连网:编码器
HighlanderNN,在不预测的情状下将输入的源语言单词进行编码;解码器,在展望下二个单词的准绳下处理目的句子。

若想参考越来越多新闻,请查看
Luong(2015)(

澳门金沙4787.com官网 16

图 2. 神经机器翻译——2个纵深循环结构实例:将源语言句子「I am a
student」翻译成目标语言句子「Je suis
étudiant」。此处,「」代表解码进程初叶,「」代表解码进度截至。

设置该课程

为了设置该科目,大家须求先安装 TensorFlow。本课程须要最新的 TensorFlow
教程(近来为 1.2.1 版本)。为了设置
TensorFlow,请依据以下安装指引:

在装置 TensorFlow 之后,我们须求周转以下命令安装本课程的源代码:

git clone

教练-怎么着创设咱们首先个 NMT 系统

咱俩先是须求了解营造三个 NMT 模型具体代码的基本,大家会在图 2
中更详尽地讲学。大家前边会介绍数据准备和总体的代码,这一片段是指
model.py 文件。

在互联网的平底,编码器和解码器 大切诺基NN
接收到以下输入:首先是原句子,然后是从编码到解码格局的交接边界标记「」,最终是目的语句。对于训练的话,大家将为系统提供以下张量,它们是以时日为主(time-major)的格式,并蕴涵了单词索引:

encoder_inputs [max_encoder_time, batch_size]:源输入词。

decoder_inputs [max_decoder_time, batch_size]:目的输入词。

decoder_outputs [max_decoder_time, batch_size]:目的输出词,这么些是
decoder_inputs 按一个小时步向左移动,并且在左侧有句子甘休符。

为了更高的频率,大家几回用多少个句子(batch_size)举行操练。测试略有差异,大家会在末端商量。

1.嵌入

给定单词的归类属性,模型首先必须查找词来源和对象嵌入以寻找相应的词表征。为了令该嵌入层可以运营,大家先是需求为每种语言选定三个词汇表。常常,选定词汇表大小V,那么频率最高的
V个词将视为唯一的。而颇具其余的词将转移并打上「unknown」标志,因而全部的词将有相同的停放。我们平常在教练时期嵌入权重,并且每一种语言都有一套。

# Embedding

embedding_encoder = variable_scope.get_variable(

                  “embedding_encoder”, [src_vocab_size,
embedding_size], …)# Look up embedding:#   encoder_inputs:
[max_time, batch_size]#   encoder_emp_inp: [max_time,
batch_size, embedding_size]

encoder_emb_inp = embedding_ops.embedding_lookup(

                  embedding_encoder, encoder_inputs)

咱们同样可以创设 embedding_decoder 和
decoder_emb_inp。注意我们得以选用预练习的词表征如 word2vec 或 Glove
vectors
起始化嵌入权重。日常给定大量的教练多少,大家能初阶学习那一个嵌入权重。

2.编码器

一经得以寻找到,词嵌入就能同日而语输入馈送到主神经网络中。该网络有三个多层循环神经互连网结合,2个是原语言的编码器,另2个是目的语言的解码器。那七个安德拉NN
原则上可以共享相同的权重,不过在实践中,大家日常使用两组不一致的循环神经网络参数(那个模型在拟合大型陶冶多少集上做得更好)。解码器途乐NN
使用零向量作为它的启幕状态,并且可以利用如下代码创设:

# Build RNN cell

encoder_cell = tf.nn.rnn_cell.BasicLSTMCell(num_units)

# Run Dynamic RNN#   encoder_outpus: [max_time, batch_size,
num_units]#   encoder_state: [batch_size, num_units]

encoder_outputs, encoder_state = tf.nn.dynamic_rnn(

                   encoder_cell, encoder_emb_inp,

                   sequence_length=source_seqence_length,
time_major=True)

专注语句有两样的长短以幸免浪费统计力,由此大家会因而

source_seqence_length 告诉 dynamic_rnn
精确的句子长短。因为大家的输入是以时日为主(time

major)的,我们须要设定 time_major=True。未来大家一时半刻只须要创设单层

LSTM、encoder_cell。大家后边会详细描述如何营造多层 LSTM、添加 dropout
并利用注意力机制。

3.解码器

decoder 也亟需拜访源音讯,一种简单的办法是用编码器最后的隐藏态
encoder_state 对其进展先导化。在图 2
中,大家将源词「student」中的隐藏态传递到驾驭码器。

# Build RNN cell

decoder_cell = tf.nn.rnn_cell.BasicLSTMCell(num_units)

# Helper

helper = tf.contrib.seq2seq.TrainingHelper(

decoder_emb_inp, decoder_lengths, time_major=True)# Decoder

decoder = tf.contrib.seq2seq.BasicDecoder(

                      decoder_cell, helper, encoder_state,

                     output_layer=projection_layer)# Dynamic
decoding

outputs, _ = tf.contrib.seq2seq.dynamic_decode(decoder, …)

logits = outputs.rnn_output

此处代码的为主是 BasicDecoder、获取 decoder_cell(类似于 encoder_cell)
的 decoder、helper 以及在此以前作为输入的 encoder_state。

经过分离 decoders 和 helpers,我们能重复使用不相同的代码库,例如
TrainingHelper 可由 GreedyEmbeddingHelper 进行轮换,来做贪婪解码。

末段,大家从没涉及过的 projection_layer
是八个凝聚矩阵,将顶部的隐藏态转变为维度 V 的逻辑向量。我们在图 2
的上部浮现了此进度。

projection_layer = layers_core.Dense(

                        tgt_vocab_size, use_bias=False)

4.损失

提交以上的 logits,可总括练习损失:

crossent = tf.nn.sparse_softmax_cross_entropy_with_logits(
labels=decoder_outputs, logits=logits)

train_loss = (tf.reduce_sum(crossent * target_weights) /
batch_size)

上述代码中,target_weights 是二个与 decoder_outputs 大小相同的 0-1
矩阵。该矩阵将目的体系长度以外的其他职位填写为标量值 0。

笔者们需要指出来的是,陶冶损失可以由

batch_size 分割,因而我们的超参数 batch_size
是「不变量」。也几人将操练损失依据 batch_size
*num_time_steps分割,那样可以减去短句所造成的误差。更抢眼的,大家的超参数(应用于前方的点子)不恐怕用来末端的点子。例如,假诺二种方法都以用学习率为
1.0的轻易梯度下跌,后边的法门将更使得地动用二个较小的学习率,即 1 /
num_time_steps。

5.梯度测算和优化

如今是时候定义大家的 NMT
模型的前向传播了。计算反向传播只必要写几行代码:

# Calculate and clip gradients

parameters = tf.trainable_variables()

gradients = tf.gradients(train_loss, params)

clipped_gradients, _ = tf.clip_by_global_norm(

                   gradients, max_gradient_norm)

训练

安德拉NN 的贰个紧要步骤是梯度截断(gradient
clipping)。那里,大家应用全局范数举办截断操作。最大值

max_gradient_norm 日常设置为 5 或
1。最后一步是拔取优化器。Adam优化器是最普遍的接纳。大家还要采取1个学习率,learning_rate
的值一般在 0.0001 和 0.001之间,且可设置为随着练习进程日益滑坡。

# Optimization

optimizer = tf.train.AdamOptimizer(learning_rate)

update_step = optimizer.apply_gradients( zip(clipped_gradients,
params))

在我们的尝试中,大家接纳正式的妄动梯度降低(tf.train.GradientDescentOptimizer),并使用了递减的学习率方案,因而也就有更好的属性。

始于操练 NMT 模型

让我们起首练习第三个 NMT 模型,将加泰罗尼亚语翻译为塞尔维亚共和国(Republic of Serbia)语。代码的入口是**
**nmt.py。

我们将动用小圈圈的 特德 演说并行语料库(133k
的陶冶样本)进行陶冶。全数的数据都可从以下链接找到:

笔者们将利用 tst贰零壹贰 作为支出数据集,tst 二〇一一作为测试数据集。运维以下命令行下载数据锻炼 NMT 模型:

nmt/scripts/download_iwslt15.sh /tmp/nmt_data

运转以下命令行开头练习:

mkdir /tmp/nmt_model

python -m nmt.nmt \

–src=vi –tgt=en \

–vocab_prefix=/tmp/nmt_data/vocab  \

–train_prefix=/tmp/nmt_data/train \

–dev_prefix=/tmp/nmt_data/tst2012  \

–test_prefix=/tmp/nmt_data/tst2013 \

–out_dir=/tmp/nmt_model \

–num_train_steps=12000 \

–steps_per_stats=100 \

–num_layers=2 \

–num_units=128 \

–dropout=0.2 \

–metrics=bleu

以上命令行操练三个

2 层的 LSTM seq2seq 模子,带有 128-dim 的躲藏单元和 12 个 epochs
的放权。大家运用 0.2(可能率为

0.8)的 dropout
值。如若没误差,在大家练习中趁机降低混淆度,大家应当能来看类似于以下的
logs。

# First evaluation, global step 0

eval dev: perplexity 17193.66

eval test: perplexity 17193.27

# Start epoch 0, step 0, lr 1, Tue Apr 25 23:17:41 2017

sample train data:

src_reverse: Điều đó , dĩ nhiên , là câu chuyện trích ra từ học
thuyết của Karl Marx .

ref: That , of course , was the distilled from the theories of Karl
Marx .

epoch 0 step 100 lr 1 step-time 0.89s wps 5.78K ppl 1568.62 bleu 0.00

epoch 0 step 200 lr 1 step-time 0.94s wps 5.91K ppl 524.11 bleu 0.00

epoch 0 step 300 lr 1 step-time 0.96s wps 5.80K ppl 340.05 bleu 0.00

epoch 0 step 400 lr 1 step-time 1.02s wps 6.06K ppl 277.61 bleu 0.00

epoch 0 step 500 lr 1 step-time 0.95s wps 5.89K ppl 205.85 bleu 0.00

更加多细节,请查看:train.py。

我们得以利用 Tensorboard 在练习进度中查阅模型的下结论:

tensorboard –port 22222 –logdir /tmp/nmt_model/

经过以下不难的变迁,就能逆向完结克罗地亚语到阿拉伯语的翻译。

–src=en –tgt=vi

演绎——怎么样变化翻译

当你磨炼你的NMT模型时(并且只要您曾经训练了模型),可以在加以从前不可知的源语句的状态下得到翻译。这一历程被称作推理。陶冶与推理之间有二个分明的区分(测试):在演绎时,我们只访问源语句,即encoder_inputs。解码的艺术有不少种,包括greedy 解码、采样解码和束搜索解码(beam-search)。上面大家探讨一下greedy
解码策略。

其想尽简单,大家将在图 3 中作表明:

在教练取得 encoder_state 的历程中,我们照样以平等方法编码源语句,并且
encoder_state 用于初叶化解码器。

比方解码器接收到起头符 (在我们的代码中指
tgt_sos_id),就起来解码处理(翻译)。

最大的单词,其 id 与最大的 logit 值相关联,正如被爆发的词(那是 greedy
行为)。例如在图 3 中,单词 moi
在率先个解码步中持有最高的翻译几率。接着我们把这一单词作为输入馈送至下二个时间步。

这一进程会不停到那句话的停下符「</
s>」,然后输出(在我们的代码中是 tgt_eos_id)。

澳门金沙4787.com官网 17

澳门金沙4787.com官网 18

图 3. Greedy 解码——2个实例:已磨炼的 NMT 模型怎样选择 greedy
搜索为源语句 Je suis étudiant 生成翻译。

演绎与教练的界别在于步骤
3。推理不总是馈送作为输入的不利目的词,而是使用被模型预测的单词。下边是实现greedy 解码的代码。它与操练解码器卓殊相似。

# Helper

helper = tf.contrib.seq2seq.GreedyEmbeddingHelper(

embedding_decoder,

tf.fill([batch_size], tgt_sos_id), tgt_eos_id)

# Decoder

decoder = tf.contrib.seq2seq.BasicDecoder(

                decoder_cell, helper, encoder_state,

                output_layer=projection_layer)# Dynamic decoding

outputs, _ = tf.contrib.seq2seq.dynamic_decode(

                decoder, maximum_iterations=maximum_iterations)

translations = outputs.sample_id

我们在本文中利用了 GreedyEmbeddingHelper 而不是
TrainingHelper。由于不大概提前领悟对象语句的尺寸,大家应用
maximum_iterations 限制翻译的尺寸。3个启迪是解码最多两倍的源语句长度。

maximum_iterations = tf.round(tf.reduce_max(source_sequence_length)
* 2)

大家曾经磨练了二个模型,今后可以创建3个演绎文件并翻译一些讲话:

cat > /tmp/my_infer_file.vi# (copy and paste some sentences from
/tmp/nmt_data/tst2013.vi)

python -m nmt.nmt \

–model_dir=/tmp/nmt_model \

–inference_input_file=/tmp/my_infer_file.vi \

–inference_output_file=/tmp/nmt_model/output_infer

cat /tmp/nmt_model/output_infer # To view the inference as output

专注上述指令也可在模型被陶冶时运营,只要存在壹个教练检查点。详见
inference.py。

中级

在教练了有的最基本的系列到行列模型之后,大家将来愈来愈。为了制作当前最优的神经机器翻译系统,大家需求越多的门径:注意力机制。该机制由

Bahdanau 等人在 2016 年首次提议(
Luong等人和其余人完善了它,其核心思想是当我们翻译时通过「注意」相关的源内容,建立直接的短连接。注意力机制的一个很好副产品是源语句和对象语句之间的3个容易可视化的对齐矩阵(如图

4 所示)。

澳门金沙4787.com官网 19

澳门金沙4787.com官网 20

图 4. 注意力可视化——源语句与目标语句之间对齐的实例。图片来源于 2014 年
Bahdanau 等人的杂谈。

请牢记在vanilla种类到行列模型中,当开首编码处理时,大家把最后的源状态从编码器传递到解码器。那对短、中长度的口舌效果很好;对于长句子,单一固定大小的隐状态成为了音信瓶颈。注意力机制没有舍弃源CR-VNN中计算的持有隐状态,而是提出了同意解码器窥探它们的主意(把它们当做是源音讯的动态储存)。如此,注意力机制升级了长句的翻译品质。现在,注意力机制实至名归,已成功采纳于任何过多职分(比如语音识别)。

注意力机制背景

我们今日描述一下注意力机制的实例(Luonget al.,
二〇一六),它早已被利用到几个最新颖的种类当中了,包蕴开源工具,比如OpenNMT(
TF seq2seq API。我们还将会提供注意力机制相关变体的情节。

澳门金沙4787.com官网 21

图 5. 注意力机制——基于注意力的 NMT 系统(Luong et al., 二零一六中有现实描述)。

咱俩任重先生而道远详解注意力总结进程中的第2、步。为了进一步清楚,我们没有显得图(2)中的嵌入层和投影层。

如图 5 所示,注意力统计发生在解码步骤中的每一步。它包涵下列步骤:

  1. 当下目的隐蔽状态和全体源状态(source
    state)进行比较,以导出权重(weight),见图 4。

  2. 按照注意力权重,我们计算了二个背景向量(context
    vector),作为源状态的平分权值。

  3. 将背景向量与近来目的隐蔽态举行组合以转变最后的注意力向量。

澳门金沙4787.com官网 22

4.
此注意力向量将作为下一时半刻序步骤的输入。前多少个步骤可以由下列公式总计:

澳门金沙4787.com官网 23

澳门金沙4787.com官网 24

那边,函数score 用于将目标隐蔽状态 ht 和每三个源状态
hs举办比较,结果会被规范成生成式注意力权重(3个源位置的分布)。其实有很多种关于评分函数(scoring
function)的挑选;比较盛行的评分函数包涵公式(4)中提交的乘法与加法形式。一旦被统计,注意力向量
at 就会用于推导 softmax logit 和损失。那与 vanilla seq2seq
模子顶层的目的隐蔽态相似。函数 f 也足以使用其余格局。

澳门金沙4787.com官网 25

注意力机制的有余完结格局可由以下链接得到:

注意力机制中有何有关切意事项呢?

上述公式评释注意力机制有很各个变体。这几个变体器重于评分函数(scoring
function)和注意力函数(attention function)的形式,也依靠于前一状态
ht-1,而不倚重于伊始指出的评分函数 ht(Bahdanau et
al.,二零一六)。实际上大家发现的只有一对抉择上的注意事项。1、注意力的基本方式,例如,目标和源之间的直接关联须求被彰显。2、把注意力向量输入给下权且间步骤,以把在此以前的注意力决策告知给网络(Luong

et al., 2016)。最终,评分函数的挑三拣吕梁时可以导致分裂的属性表现。

Attention Wrapper API

在我们的Attention Wrapper API 的兑现中,借鉴了 韦斯特on et al., 二〇一四 在
onmemory network工作中的术语。相比较于全体可读、可写的回忆,此教程中的
attention
机制仅是可读的记得。尤其是对隐藏态(只怕隐藏态的变体,例如$$W\overline{h}_s$$
in Luong’s scoring style or $$W_2\overline{h}_s$$
)的设定,被认为是「回忆」。在各种时刻步下,大家接纳现有的靶子隐藏态作为「query」决定读取哪部分记得。经常状态下,query需求与单个回忆条相对应的
keys举行自查自纠。在地点对小心机制的以身作则中,大家偶尔使用一套源隐藏态(只怕其变体,例如$$W_1h_t$$)作为「key」。你们可以从那种纪念互联网术语中拿走灵感,找到其他格局的attention。

出于 attention wrapper,就不再要求增加大家包罗 attention 的 vanilla
seq2seq 代码。那部分文本为 attention_model.py。

先是,咱们要求定义一种注意机制,例如使用 Luong et al., 二〇一六 的钻研。

# attention_states: [batch_size, max_time, num_units]

attention_states = tf.transpose(encoder_outputs, [1, 0, 2])

# Create an attention mechanism

attention_澳门金沙4787.com官网,mechanism = tf.contrib.seq2seq.LuongAttention(

num_units, attention_states,

memory_sequence_length=source_sequence_length)

在后面的Encoder 部分,encoder_outputs 是一套顶层的藏身态源,格局为
[max_time, batch_size,

num_units](因为大家利用 dynamic_rnn with
time_major设定)。在专注机制上,大家须要确保通过的「memory」是批次为主的,所以须求交换attention_states。大家透过source_sequence_length
有限支撑注意机制的权重有方便的规范化(只在
non-padding的岗位)。定义完注意机制之后,大家应用 AttentionWrapper
来包裹解码单元。

decoder_cell = tf.contrib.seq2seq.AttentionWrapper(

                   decoder_cell, attention_mechanism,

                   attention_layer_size=num_units)

余下的代码基本和编码器一转样
(

左侧—打造1个依照注意力的 NMT 模型

为了使注意力发挥功用,我们必要用到luong、scaled_luong、bahdanau 或
normed_bahdanau其中的1个当作磨炼时期注意力标志(attentionflag)的值。该标志指定了我们即将选择的注意力机制。除此之外,大家须求为注意力模型创制一个新目录,由此无需另行行使从前磨炼的基本
NMT模型。

运行以下指令开首陶冶:

mkdir /tmp/nmt_attention_model

python -m nmt.nmt \

–attention=scaled_luong \

–src=vi –tgt=en \

–vocab_prefix=/tmp/nmt_data/vocab  \

–train_prefix=/tmp/nmt_data/train \

–dev_prefix=/tmp/nmt_data/tst2012  \

–test_prefix=/tmp/nmt_data/tst2013 \

–out_dir=/tmp/nmt_attention_model \

–num_train_steps=12000 \

–steps_per_stats=100 \

–num_layers=2 \

–num_units=128 \

–dropout=0.2 \

–metrics=bleu

练习将来,大家可以利用含有新 model_dir 的一模一样推理指令展开推导:

python -m nmt.nmt \

–model_dir=/tmp/nmt_attention_model \

–inference_input_file=/tmp/my_infer_file.vi \

–inference_output_file=/tmp/nmt_attention_model/output_infer

基准

IWSLT 英语-越南语

训练:133k 的样本,dev=tst2012,test=tst2013

澳门金沙4787.com官网 26

练习进程:在英特尔 K40m 上是 0.37s 的时刻步、15.3k 的 wps,在 Titan X
上是 0.17 s 的日子步,32.2k 的 wps。

WMT 德语-英语

磨炼:4.5M 的样本量,dev=newstest二零一三,test=newtest二零一四

澳门金沙4787.com官网 27

陶冶进程:在英特尔 K40m 上是 2.1s 的时间步,3.4k 的 wps,在英特尔 Titan
X 上是 0.7s 的时日步,8.7k 的 wps。

为了查看 GNMT 注意的增速度,大家只在 K40m 上做了条件测试:

澳门金沙4787.com官网 28

WMT 英语-德语 全对比

其次行是我们 GNMT 注意模型:模型 1(4 层),模型 2(8 层)。

澳门金沙4787.com官网 29

其余财富

若想深远摸底神经机器翻译和种类-系列模型,大家12分推荐以下能源:

Neural Machine Translation and Sequence-to-sequence Models: A
Tutorial:

Neural Machine Translation – Tutorial ACL
2016:

Thang Luong’s Thesis on Neural Machine
Translation:

用以打造 seq2seq 模型的工具很多:

Stanford NMT [Matlab]

tf-seq2seq [TensorFlow]

Nemantus [Theano]

OpenNMT [Torch]

参照情节

[1]Sequence to sequence learning with neural
networks(
Sutskever, Oriol Vinyals, and Quoc V. Le. NIPS, 2014.

[2]Learning phrase representations using RNN encoder-decoder
forstatistical machine
translation(), Kyunghyun
Cho, Bart Van Merrienboer, Caglar Gulcehre, Dzmitry Bahdanau, Fethi
Bougares,Holger Schwenk, and Yoshua Bengio. EMNLP 2014.

[3] Neural machine translation by jointly learning to align and
translate(), Dzmitry Bahdanau,
Kyunghyun Cho,and Yoshua Bengio. ICLR, 2015.

[4] Effective approaches to attention-based neural machine
translation(), Minh-Thang Luong,
Hieu Pham, and Christopher D Manning. EMNLP, 2015.

[5] Google‘s Neural Machine Translation System: Bridging the Gap
between Human and Machine Translation
(.

机械之心原文参考:

相关文章