语境参数生成器,GNMT开源教程

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

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

新近,谷歌(Google)官方在
Github开放了一份神经机器翻译课程,该科目从基本概念完结初始,首先搭建了2个简易的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)模型[语境参数生成器,GNMT开源教程。1,
2]
近期拿走巨大成功。由于其可以应用深度神经互连网获取句义,该模型成为谷歌(谷歌)翻译等半数以上经贸翻译系统实际的专业模型。不过,即便有关OpenNMT
或 tf-seq2seq 等
seq2seq模型的资料已经非凡丰硕,但亦可率领人们很快打造高质量翻译系统的学问和技能如故略显不足。

【嵌牛导读】:近年来,AAAI 2018
发表故事集接收列表,百度机械翻译团队的舆论《Multi-channel Encoder for
Neural Machine
Translation》上榜。小说提议了一种多信道编码器(MCE)模型,可校对传统神经机器翻译(NMT)模型单一信道编码的瑕疵。该模型在中国和英国翻译上的
BLEU 值进步了当先 6个百分点,在英法翻译上用单层模型取得了可与深层模型比美的成效。本文对该杂文的显要内容做了介绍。

参与:白悦、刘晓坤

本学科的这一个版本必要TensorFlow Nightly。
为了拔取稳定的TensorFlow版本,请考虑其余分支,如tf-1.4。

后天,大家很热情洋溢可以揭破最新的TensorFlow
神经机器翻译课程,扶助读者周到摸底
seq2seq模型,并介绍怎么着从头开端构建有竞争力的翻译模型。该科目尽恐怕简单地显示该进度,教程首先介绍神经机器翻译的背景知识,并描述创设vanilla系统的有血有肉代码。然后介绍注意力机制 [3, 4] 这一拉扯 NMT
系统处理长句的重中之重工具。最终,本课程将执教怎样复制谷歌(Google)NMT(GNMT)系统
[5] 的显要天性,以贯彻在多少个 GPU 上练习模型。

【嵌牛鼻子】:NMT模型

通用和专用 NMT
模型分别在相似语言对和难得语言对的翻译中装有优势,但那也展现了独家的逆风局,取决于参数共享的程度。为此,CMU
的商讨者在本文中提议了一种在两者之间取得平衡艺术,不需求改变 NMT
原有架构,而是引入新的零部件
CPG,来可控地已毕分化语言对模型之间的参数共享。该零件可无缝结合不一样的
NMT,并在口径数据集上取得当前最佳。商讨者强调,该方法使大家更接近普适的中级语言。

若果使用这么些代码库举办探讨,请引用此。

本学科包含具体的口径测试结果,用户可自动复制。大家的模型提供强劲的开源基准,其本性不亚于
GNMT 的结果 [5]。大家在 WMT 2014 的斯洛伐克共和国(The Slovak Republic)语转保加利亚语翻译义务中获取了 BLEU
得分 24.4 的成就。

【嵌牛提问】:新的NMT模型是什么样?

神经机器翻译(NMT)无需单独训练或调整系统的别的部分就可以直接建模源语言到目的语言的映照。那使得
NMT 急速上扬,并在广大周边环境中中标应用 (Wu et al., 二零一四; Crego et
al.,
2014)。编码器-解码器抽象使构建将其余语言的源句映射到向量表示,再将向量表示解码到任何目的语言的连串在概念上变得实惠。由此,人们提议了种种格局来扩充那种多语言机器翻译的用空想来欺骗别人(Luong et al., 二〇一五; Dong et al., 二零一四; Johnson et al., 2017; Ha et al.,
二〇一五; Firat et al., 2015a)。

介绍(Introduction)

序列 – 序列(seq2seq)模型(Sutskever et al.,
2014,
Cho et al.,
2014
)在机器翻译,语音识别和文书摘要等各类义务中获取了宏伟的功成名就。
本教程为读者提供了seq2seq模子的无微不至领悟,并出示了什么样开头打造一个有竞争力的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句子对)。

作者们第1建立部分有关NMT的seq2seq模子的基本知识,解释什么建立和磨练三个vanilla
NMT模型。 第三某些将重视于创设具有注意力机制的竞争性NMT模型。
然后,大家将商量一些技艺和诀窍,以树立最佳NMT模型(包罗进度和翻译质量),如TensorFlow最佳实践(批处理,分段),双向本田CR-VNN,波束搜索(beam
search [本条是甚?])以及利用GNMT注意力增加到多少个GPU。

本学科还包含其余的标准测试结果(葡萄牙语转荷兰语、希伯来语转塞尔维亚语)。

【嵌牛正文】:

多语言 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)。基于注意力的模子之所以可以大大超越典型的编码器-解码器模型,在于它可以通过三个相对简便易行的匹配函数动态检索相关联的源语块(类似
SMT
中的对齐)。换言之,基于注意力的模子收益于丰富的源语句表征及其代表局地社团的八面后珑。

在本文中,CMU
的探讨者在这二种方法之间赢得了平衡,指出了一种可以分别为每一种语言学习参数的模子,同时也能在形似语言之间共享消息。探讨者使用了新的语境相关的参数生成器(CPG),它可以(a)泛化全部那一个主意;(b)缓解上述通用和单身语言编码器-解码器系统的题材。它将语言嵌入作为翻译的语境进行学习,并用它们为全部语言对转移共享翻译模型的参数。因而,它为这么些模型提供了各个语言单独学习参数的力量,同时也在相似语言之间共享音讯。参数生成器是通用的,允许以那种措施增强任何现有的
NMT 模型。其它,它富有以下所梦想的风味:

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

在过去,古板的依照短语的翻译系统通过将源语句拆分成三个部分然后将其逐句翻译来施行他们的义务。
那致使了翻译产出的不流利,并不像我们人类翻译的那么。
大家涉猎整个源句子,了解它的意味,然后爆发贰个翻译。
神经机器翻译(NMT)模仿的就是那种方法!

威尼斯手机娱乐官网 1

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

具体而言,NMT系统第③应用编码器读取源句子来创设“思想”向量,表示句子含义的数字序列;
解码器然后处理句子向量以发生翻译,如图1所示。那寻常被号称编码器 –
解码器种类布局。
NMT以那种方法化解了观念的依照短语的法子中的局地翻译难题:它能够捕捉语言的长期依靠,例如性别协议;
语法结构等; 并由此谷歌(谷歌)神经机器翻译系统(Google Neural Machine
Translation
systems)展现了更通畅的翻译。

NMT模型依据其分外的系统布局而有所分歧。
对于种类数据,很自然的抉择是一大半NMT模型所利用的递归神经网络(MuranoNN)。
编码器和平消除码器寻常拔取CRUISERNN。 可是,凯雷德NN模型在以下地方有所不一样:(a)方向性

  • 单向或双向; (b)深度 – 单层或多层; 和(c)类型 –
    寻常是平常SportageNN,长时间长时间回想(LSTM)或门控循环单元(GRU)。
    有趣味的读者可以在那篇博文中找到关于福特ExplorerNN和LSTM的更加多消息。

在本教程中,我们以单向的吃水多层LX570NN为例,将LSTM作为2个递归单元。
大家在图2中突显了那般模型的一个例子。在那几个事例中,大家树立了一个模子,将源句子”I
am a student”翻译成目的句子”Je suisétudiant”。
在高层次上,NMT模型由七个递归神经网络组成:编码器库罗德NN仅仅消耗输入的源单词而不作任何预测;
另一方面,解码器在揣度下1个单词的同时处理对象语句。

欲精晓越多消息,大家向读者介绍本课程所依据的Luong
(2016)。

威尼斯手机娱乐官网 2

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

采用 tf.contrib.data 中新型输入的管道对动态调整的输入连串进行预处理。

在头名的依照注意力的 NMT 系统中,使用双向循环神经互连网(bi酷威NN)
对源语句举行编码,利用 大切诺基NN
生成向量连串,粗略来说这几个向量就是源语句单词的上下文感知嵌入(context-aware
embedding)。那种规划下,编码器学习相对一致的句子组合。近期,编码器中的
瑞鹰NN 已经被部分进取的门控机制变体所替代,例如 LSTM 和
GRU。对翻译来说,普遍期待解码器采纳极其符合本身语言架构的语句组合块。

  1. 简易:类似 Johnson 等人(2017)和 Ha 等人(二〇一六)的法子,且与 Luong
    等人(二零一四 年)和 Firat
    等人(二零一六a)的办法相反,它只需稍作修改就可以动用于半数以上存世的 NMT
    系统,并且可以无缝地包容注意力层。
  2. 多语言:和此前一样,允许利用相同的单个模型进行多语言翻译。
  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),采纳差别层次组合的编码组件。更具体而言,除了编码
RubiconNN 的隐态,MCE 为不带组合的原始编码采纳了原始词嵌入,并在 NTM
中以接近于含有差距频率的视觉信道的办法为更扑朔迷离的组成专门布署了表面存储器。全体三个编码策略在由参数控制的解码进度中被恰当混合,并可以以端到端的格局被学习。更切实说,百度设计了1个得以自动调节不一致编码信道权重的门控机制。

我首先介绍二个可用于定义和讲述大部分存世 NMT
系统模块化框架,然后,在第 3
节中,将根据该框架介绍本商讨的关键贡献,即语境参数生成器(CPG)。小编还论证了该办法使大家更接近普适的中级语言。

教练 – 怎样建立大家的第①个NMT系统(Training – How to build our first NMT system)

先是,我们将深切研究用现实的代码片断打造NMT模型的骨干,大家将经过它更详细地表明图2。
大家将数据准备和一体化的代码推迟距今。
那有个别是指文件model.py

在底层,编码器和解码器QX56NNs接收以下输入:首先是源句子,然后是指示从编码转换来解码格局的疆界标记”<s>”
,和对象语句。
对于教练,大家会给系统提供以下张量,那几个张量在时刻上是必不可缺格式,包罗文字索引:

  • encoder_inputs [max_encoder_time,batch_size]:源输入单词。
  • decoder_inputs [max_decoder_time,batch_size]:目的输入单词。
  • decoder_outputs
    [max_decoder_time,batch_size]:目的输出单词,这个是decoder_input向左移动二个年华步,左边添加1个句尾甘休标记。
    那里为了升高功用,大家一并练习多少个句子(batch_size)。
    测试稍有例外,所以大家稍后再议论。

采纳通用结构和陶冶时间表锻练 seq2seq
模子,包涵各个注意力机制和固化抽样。

在此杂谈中,小编们也调查了 MCE 在不一致的翻译职责上的表现。首先,在 NIST
中翻英任务上测试了该模型,相比较于强大的 DL4MT 系统平均进步了 6.52 的 BLEU
得分。其余,在 WMT 二零一六 英翻法职分上,单个浅层模型拿到了 38.8 的 BLEU
得分,可比美于超级模型。

论文:Contextual Parameter Generation
for Universal Neural Machine Translation

嵌入(Embedding)

出于单词的归类性质,模型必须首先查找源和对象的放权来搜寻相应的词表示(word
representations)。
为了使这一个松手层起功效,首先为每个语言选取3个词汇表。
经常,采取词汇量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

威尼斯手机娱乐官网 3

编码器(Encoder)

万一检索出来,嵌入字就作为输入被输入到主互联网中,主互连网由七个多层奥迪Q5NN组成

  • 三个源语言的编码器和三个目标语言的解码器。
    这七个TucsonNN原则上能够享受相同的权重;
    但是,在实践中,大家平时选择七个不等的TiggoNN参数(那些模型在拟合大型练习多少集时效果更好)。
    编码器EvoqueNN使用零矢量作为其开始状态,并且如下打造:

    # 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。
在此地,我们只建立贰个单层的LSTM,encoder_cell。
大家将介绍怎么样打造多层LSTM,添加dropout,并在背后的章节中利用attention。

优化 seq2seq 模子,以贯彻在多 GPU 设置中的模型磨炼。

威尼斯手机娱乐官网 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 调用的块。尽管选取门控机制编码
EnclaveNN,但那种编码器的规划在源语句上发生了相对一致的构成。另一方面,大家平常希望解码器可以在不相同层次上行使若干个源语句来匹配其本身语言结构:比如,大家恐怕想行使原始格局的实业名,同时采纳壹个习语(idiom)作为3个宏观的三结合单元。受此须要启发,我们提议了多信道编码器(Multi-channel
Encoder/MCE),它增强了分化层面组合的编码组件。更实际的是,除却编码 ENVISIONNN
的隐蔽状态,1)MCE
为不带组合的原始编码选用了原始词嵌入;2)神经图灵机(NTM)专门部署的外表存储器用于特别错综复杂的三结合,而颇具三种编码策略在解码时被恰当地混合。汉英翻译的论据研商声明,大家的模型在强硬的开源
NMT 系统 DL4MT1 上贯彻了 6.52 个 BLEU 百分点的晋级。在 WMT14
英西班牙语翻译务中,大家的纯净浅层系统达到了 38.8 的 BLEU
值,与目前最优的深浅模型非常。

威尼斯手机娱乐官网 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)

操练酷路泽NNs的重中之重步骤之一是梯度裁剪。 在此处,我们在全局范围内开展裁剪。
最大值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模型很好的试验台,并且一度得到了广泛的功成名就。大家利用的代码是无比轻量、高质量、可投入生产并且结合了最新琢磨思路的兑现。大家透过以下措施完毕这一目的:

威尼斯手机娱乐官网 6

图 1:在我们的模块化框架下的 NMT
系统概述。大家的紧要进献在于参数生成器模块(即,耦合或解耦——具有霁青字体的每一个框是单身的取舍)。注意,g
表示参数生成器互连网。在我们的实验中,大家着想该互连网的线性子局。可是,大家的孝敬并不在于其他模块的挑选;大家还能够将富有差别架构的参数生成器和不相同档次的词汇表用于编码器和平化解码器。

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

威尼斯手机娱乐官网 7

威尼斯手机娱乐官网 8

结缘了小编们在营造循环型和 seq2seq 型模型的专业知识。

图 1:左图是古板的基于注意力的 NMT
模型,包涵编码器、解码器和1个注意力机制。右侧是大家的崭新 NMT
模型,带有多少个信道编码器,包蕴来自双向 卡宴NN 的隐没状态、NTM
中的外部存储和向来来源于输入连串的放到,并统筹了一种门控注释(gated
annotation)自动学习差距解码组件的权重。

表 1:大家指出的有功底成对
NMT(PNMT)模型的章程(阴影的一行)和用来 IWSLT-15 数据集的 Google多语言 NMT
模型(GML)的比较。百分比的并列行显示操练时利用多少某个(1%、百分之十、百分之百)的平行语料库;其他的仅看成单语数据。表中呈现了
BLEU 和 Meteor 目的的结果。CPG *意味着与 CPG
相同的模型,但未使用自动编码操练样本举办训练。每一个情形下的特等分数加粗突显。

提供了可营造最好 NMT 模型的技能,同时还复制了谷歌(谷歌)的 NMT(GNMT)系统。

威尼斯手机娱乐官网 9

威尼斯手机娱乐官网 10

俺们相信提供全体人都很简单复制的基准是尤其紧要的。因而,大家依照以下公开的数据集提供了方方面面的考查结果和预陶冶模型:

图 2:编码器中 NTM 的图示,每一光阴步上 QashqaiNN 在 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 提供。

威尼斯手机娱乐官网 11

本文为机械之心编译,转发请联系本公众号拿到授权。回到网易,查看更加多

广阔数据集:德语-法语平行语料库(4.5M 个句子对),该数额集由 WMT
伊娃luation 坎普aign 提供。

表 1:不一致系列在中翻英职责上的变现。相比较于强大的开源系统
DL4MT,大家的模子有庞大的改进。大家也列出了与近来开源的七个工具包
T2T、ConvS2S 的自查自纠。要明白,T2T 和 ConvS2S 都以多层的吃水模型。

权利编辑:

我们第3必要通晓用于NMT 任务的 seq2seq
模型的基本知识,并要求精通什么营造和教练1个 vanilla NMT

威尼斯手机娱乐官网 12

模型。第三局地将更进一步详细地诠释怎么样营造带注意力机制的强劲神经机器翻译模型。然后我们会商量创设更好神经机器翻译模型(翻译速度和品质)大概的技艺,例如TensorFlow
最好的履行方法(batching, bucketing)、双向循环神经互连网和集束搜索等。

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

基础

威尼斯手机娱乐官网 13

至于神经机器翻译

图 3:不同语句长度下的性质。

以词组为底蕴的思想意识翻译系统将源语言句子拆分成多少个词块,然后举行词对词的翻译。这使得翻译输出结果流畅性大让利扣,远远不如人类译文。大家会通读全部源语言句子、掌握句子含义,然后输出翻译结果。神经机器翻译(NMT)竟然可以依样画葫芦人类的翻译进度!

百度机械翻译简介:百度机器翻译团队继 二〇一五 年推出全球首个 NMT
线上翻译服务之后,通过持续不断的技术创新,在 NMT
模型研讨和成品商业化使用上屡创优质。在当年的百度世界大会上成功显示了机关同声传译系统,语音识别和机械翻译技术无缝过渡,翻译结果流畅自然。同时,百度也在二零一九年生产了一键式多语种
WIFI 翻译机,产品自带 80 三个国家的 4G
网络、语种自动识别,提供多语种高质量语音翻译。

威尼斯手机娱乐官网 14

威尼斯手机娱乐官网 15

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

具体来说,神经机器翻译系统率先使用编码器读取源语言句子,打造3个「思想」向量,即表示句义的一串数字;然后利用解码器处理该容器,并出口翻译结果,如图1所示。那就是大家日常所说的编码器-解码器结构。神经机器翻译用那种方法化解以词组为底蕴的观念翻译系统遇到的翻译难点:神经机器翻译可以捕捉语言中的长距离尊敬结构,如词性一致、句法结构等,然后输出流利度更高的翻译结果,正如谷歌(Google)神经机器翻译系统现已完结的那样。

NMT模型在切实的协会中会暴发变化。对于连串数据而言,最好的采纳是循环神经网络(PRADONN),那也被多数
NMT模型采取。经常状态下,编码器息争码器都可拔取循环神经网络。可是,循环神经互连网模型在下列情状下爆发变化:(a)方向性(directionality),单向或双向;(b)深度,单层或多层;(c)类型,平时是vanilla
凯雷德NN、长长期回想(Long Short-term Memory,LSTM),或门控循环单元(gated
recurrentunit,GRU)。

感兴趣的读者可打开该网址(
RubiconNN 和 LSTM 的更加多消息。

本学科中,大家将以单向的吃水多层TiguanNN(deep multi-layer SportageNN)为例,它拔取LSTM 作为循环单元。模型实例如图
2所示。大家在该实例中创设了一个模型,将源语言句子「I am a
student」翻译成目的语言「Je suis étudiant」。该
NMT模型蕴含七个循环神经网络:编码器
EnclaveNN,在不预测的图景下将输入的源语言单词实行编码;解码器,在预计下一个单词的标准化下拍卖对象句子。

若想参考更加多音信,请查看
Luong(2014)(

威尼斯手机娱乐官网 16

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

设置该科目

为了设置该科目,大家必要先安装 TensorFlow。本课程必要最新的 TensorFlow
教程(近年来为 1.2.1 版本)。为了设置
TensorFlow,请依照以下安装带领:

在设置 TensorFlow 之后,大家必要周转以下命令安装本课程的源代码:

git clone

教练-如何营造我们首先个 NMT 系统

咱俩先是必要了然创设1个 NMT 模型具体代码的基本,我们会在图 2
中更详尽地执教。大家前面会介绍数据准备和整个的代码,这一有些是指
model.py 文件。

在互联网的平底,编码器和解码器 KugaNN
接收到以下输入:首先是原句子,然后是从编码到解码方式的连接边界标记「」,最终是目的语句。对于教练的话,大家将为系统提供以下张量,它们是以时日为主(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.嵌入

给定单词的归类属性,模型首先必须查找词来源和对象嵌入以搜寻相应的词表征。为了令该嵌入层可以运营,大家先是须求为各个语言选定2个词汇表。平常,选定词汇表大小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.编码器

比方得以查找到,词嵌入就能看做输入馈送到主神经互连网中。该网络有七个多层循环神经网络构成,1个是原语言的编码器,另三个是目的语言的解码器。那三个CRUISERNN
原则上可以共享相同的权重,但是在实践中,大家平日选用两组差其他循环神经互连网参数(那些模型在拟合大型陶冶多少集上做得更好)。解码器途胜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 是3个与 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 的1个根本步骤是梯度截断(gradient
clipping)。那里,大家选用全局范数进行截断操作。最大值

max_gradient_norm 平日设置为 5 或
1。最后一步是采用优化器。Adam优化器是最普遍的挑三拣四。大家还要选取3个学习率,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 模型,将泰语翻译为罗马尼亚语。代码的入口是**
**nmt.py。

我们将运用小范围的 Ted 演说并行语料库(133k
的练习样本)实行磨练。全体的数据都可从以下链接找到:

咱俩将接纳 tst2013 作为支付数据集,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/

通过以下简单的变迁,就能逆向完结土耳其(Turkey)语到罗马尼亚语的翻译。

–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)。

威尼斯手机娱乐官网 17

威尼斯手机娱乐官网 18

图 3. Greedy 解码——1个实例:已训练的 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 限制翻译的尺寸。二个启迪是解码最多两倍的源语句长度。

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

笔者们早已练习了一个模子,以后得以创立三个演绎文件并翻译一些话语:

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 等人在 二〇一六 年第三回提议(
Luong等人和其余人完善了它,其核情绪想是当大家翻译时通过「注意」相关的源内容,建立间接的短连接。注意力机制的2个很好副产品是源语句和目的语句之间的2个不难可视化的对齐矩阵(如图

4 所示)。

威尼斯手机娱乐官网 19

威尼斯手机娱乐官网 20

图 4. 注意力可视化——源语句与目的语句之间对齐的实例。图片来源 2016 年
Bahdanau 等人的舆论。

请记住在vanilla连串到行列模型中,当开头编码处理时,大家把最终的源状态从编码器传递到解码器。这对短、中长度的说话效果很好;对于长句子,单一固定大小的隐状态成为了音信瓶颈。注意力机制没有放任源景逸SUVNN中统计的兼具隐状态,而是提出了允许解码器窥探它们的章程(把它们作为是源消息的动态储存)。如此,注意力机制升级了长句的翻译品质。今后,注意力机制实至名归,已成功运用于任何许多义务(比如语音识别)。

注意力机制背景

咱俩后天描述一下注意力机制的实例(Luonget al.,
二零一四),它已经被使用到几个最风靡的系统当中了,蕴含开源工具,比如OpenNMT(
TF seq2seq API。我们还将会提供注意力机制相关变体的情节。

威尼斯手机娱乐官网 21

图 5. 注意力机制——基于注意力的 NMT 系统(Luong et al., 2015中有切实描述)。

我们主要详解注意力计算进度中的第2步。为了进一步清楚,我们从未浮现图(2)中的嵌入层和投影层。

如图 5 所示,注意力总结暴发在解码步骤中的每一步。它涵盖下列步骤:

  1. 当前目的隐蔽状态和全部源状态(source
    state)举行相比,以导出权重(weight),见图 4。

  2. 依据注意力权重,大家总括了3个背景向量(context
    vector),作为源状态的平分权值。

  3. 将背景向量与日前目标隐蔽态进行组合以变更最终的注意力向量。

威尼斯手机娱乐官网 22

4.
此注意力向量将用作下近年来序步骤的输入。前八个步骤能够由下列公式计算:

威尼斯手机娱乐官网 23

威尼斯手机娱乐官网 24

那边,函数score 用于将目的隐蔽状态 ht 和每1个源状态
hs进行相比较,结果会被规范成生成式注意力权重(一个源地方的遍布)。其实有很三种关于评分函数(scoring
function)的选料;相比较盛行的评分函数包涵公式(4)中提交的乘法与加法方式。一旦被总括,注意力向量
at 就会用于推导 softmax logit 和损失。那与 vanilla seq2seq
模子顶层的对象隐蔽态相似。函数 f 也得以运用别的方式。

威尼斯手机娱乐官网 25

注意力机制的多样兑现情势可由以下链接拿到:

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

上述公式表明注意力机制有很二种变体。那一个变体倚重于评分函数(scoring
function)和注意力函数(attention function)的款式,也借助于前一情景
ht-1,而不依靠于起初提出的评分函数 ht(Bahdanau et
al.,二〇一六)。实际上大家发现的唯有一部分选拔上的注意事项。一,注意力的为主格局,例如,目的和源之间的一直关系要求被显示。二,把注意力向量输入给下暂且间步骤,以把前面的注意力决策告知给互连网(Luong

et al., 二〇一五)。最后,评分函数的挑选平时可以引致区其他性质表现。

Attention Wrapper API

在我们的Attention Wrapper API 的贯彻中,借鉴了 韦斯顿 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_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其中的三个作为教练时期注意力标志(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

威尼斯手机娱乐官网 26

磨炼进程:在AMD K40m 上是 0.37s 的日子步、15.3k 的 wps,在 Titan X
上是 0.17 s 的时光步,32.2k 的 wps。

WMT 德语-英语

教练:4.5M 的样本量,dev=newstest2012,test=newtest2014

威尼斯手机娱乐官网 27

教练进度:在英特尔 K40m 上是 2.1s 的日子步,3.4k 的 wps,在英特尔 Titan
X 上是 0.7s 的光阴步,8.7k 的 wps。

为了查看 GNMT 注意的加快度,大家只在 K40m 上做了原则测试:

威尼斯手机娱乐官网 28

WMT 英语-德语 全对比

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

威尼斯手机娱乐官网 29

其余能源

若想深刻精晓神经机器翻译和连串-系列模型,我们格外推荐以下能源:

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
(.

机器之心原文参考:

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图