神经机器翻译(seq2seq)教程(Neural Machine Translation (seq2seq) Tutorial)

在本文中,CMU
的研讨者在那二种方法之间取得了平衡,建议了一种能够分别为每一个语言学习参数的模型,同时也能在形似语言之间共享新闻。钻探者使用了新的语境相关的参数生成器(CPG),它能够(a)泛化全部这么些方法;(b)缓解上述通用和单独语言编码器-解码器系统的标题。它将语言嵌入作为翻译的语境实行学习,并用它们为全数语言对转移共享翻译模型的参数。由此,它为那几个模型提供了每个语言单独学习参数的力量,同时也在相似语言之间共享音信。参数生成器是通用的,允许以那种格局提升任何现有的
NMT 模型。别的,它拥有以下所期待的风味:

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

操练:4.5M 的样本量,dev=newstest2011,test=newtest二零一六

表 1:大家建议的有基础成对
NMT(PNMT)模型的法子(阴影的一条龙)和用来 IWSLT-15 数据集的 Google多语言 NMT
模型(GML)的相比较。百分比的并列行展现锻炼时行使多少有个别(1%、百分之拾、百分之百)的平行语言材质库;别的的仅看成单语数据。表中显示了
BLEU 和 Meteor 指标的结果。CPG *代表与 CPG
相同的模子,但未选拔自动编码磨炼样本进行练习。每一种境况下的极品分数加粗彰显。

解码器(Decoder)

解码器也须要拜访源音信,二个差不多的章程正是用编码器的末尾一个隐藏状态encoder_state来初始化它。
在图第22中学,大家将源语词“student”的藏身状态传递给解码器端。

# Build RNN celldecoder_cell = tf.nn.rnn_cell.BasicLSTMCell(num_units)# Helperhelper = tf.contrib.seq2seq.TrainingHelper( decoder_emb_inp, decoder_lengths, time_major=True)# Decoderdecoder = tf.contrib.seq2seq.BasicDecoder( decoder_cell, helper, encoder_state, output_layer=projection_layer)# Dynamic decodingoutputs, _ = tf.contrib.seq2seq.dynamic_decode(decoder, ...)logits = outputs.rnn_output

在那里,那么些代码的着力部分是BasicDecoder对象、解码器,其收受decoder_cell(类似于encoder_cell),帮忙器,以及从前的encoder_state作为输入。
通过分离出解码器和支持器,我们得以选用不一样的代码库,例如,能够用GreedyEmbeddingHelper代替TrainingHelper来拓展贪婪的解码。
请参阅helper.py。

说到底,我们平昔不涉嫌projection_layer是一个细密的矩阵,它将顶部隐藏状态转化为维数为V的logit向量。大家在图2的顶部表达了那个进度。

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

模型。第一有的将更进一步详细地表明什么营造带注意力机制的精锐神经机译模型。然后我们会谈论营造更好神经机译模型(翻译速度和质感)恐怕的技能,例如TensorFlow
最好的实践方法(batching, bucketing)、双向循环神经网络和集束搜索等。

  • 杂文地址:
  • 花色地址:

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

大家将利用小范围的 Ted 阐述并行语言材质库(133k
的演习样本)举办陶冶。全体的多少都可从以下链接找到:

通用和专用 NMT
模型分别在形似语言对和层层语言对的翻译中兼有优势,但那也体现了分别的劣势,取决于参数共享的程度。为此,CMU
的研商者在本文中提议了一种在两者之间取得平衡艺术,不供给改变 NMT
原有架构,而是引入新的机件
CPG,来可控地完毕不一致语言对模型之间的参数共享。该器件可无缝结合不相同的
NMT,并在规则数据集上取稳妥前最佳。研讨者强调,该方法使大家更近乎普适的中游语言。

基础知识(Basic)

在磨炼取得 encoder_state 的进程中,大家依然以同一方式编码源语句,并且
encoder_state 用于起初化解码器。

  1. 粗略:类似 Johnson 等人(2017)和 Ha 等人(二〇一四)的法子,且与 Luong
    等人(2016 年)和 Firat
    等人(2014a)的办法相反,它只需稍作修改就可以利用于当先四分之二存世的 NMT
    系统,并且能够无缝地包容注意力层。
  2. 多语言:和事先同一,允许利用同样的单个模型进行多语言翻译。
  3. 半监察和控制:可以运用单语数据。
  4. 可扩张:通过在语言间采用大量但可控的共享来压缩参数的多少,从而减弱大气多少的须要,如
    Johnson等人所述(2017)。它还同意语言的解耦,防止对多量共享词汇须求,如 Ha
    等人所述(2015)。
  5. 适应性强:无需完全重复演习就足以适应新语言。
  6. 时下初叶进的艺术:比成对 NMT 模型和 Johnson等人的模型具备更好的性质。(2017
    年)。事实上,该格局优于起始进的习性。

嵌入(Embedding)

出于单词的分类性质,模型必须首先查找源和指标的放权来探寻相应的词表示(word
representations)。
为了使这么些放手层起效果,首先为各个语言选拔二个词汇表。
经常,选取词汇量V,唯有最频仍的V词才被视为唯一。
全部其余单词都转移为"unknown"标记,并赢得一致的内置。
嵌入权重,各种语言一套,平时在教练中学习。

# Embeddingembedding_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)来初阶化嵌入权重。
一般的话,给定大量的陶冶多少,大家能够开端学习那么些嵌入。

上述公式申明注意力机制有很各个变体。那些变体注重于评分函数(scoring
function)和注意力函数(attention function)的花样,也借助于前一情状ht-1,而不依赖于初始建议的评分函数 ht(Bahdanau et
al.,二零一四)。实际上大家发现的只有部分选项上的注意事项。一,注意力的中坚格局,例如,目的和源之间的平昔关系须求被突显。二,把注意力向量输入给下最近间步骤,以把后边的注意力决策告知给互联网(Luong

多语言 NMT
此前的办事可大概分为三种范式。第3个通用 NMT (Johnson et al., 2017; Ha
et al., 二〇一五) 对拥有语言应用单一模型。通用 NMT
没有其余特定语言的参数化,在翻译截然不一致的言语和数码有限的场所下,那种形式过于简单化且卓殊不利。通超过实际验求证,Johnson等人的艺术(2017)在高样本复杂度情状下品质变差,因而在个别的数据设置中显现不好。Ha
等人建议的通用模型(二零一五)必要输入句子的新编码方案,那会造成过大的词汇量从而难以扩充。第三种范式,特定于各类语言的编码器-解码器
(Luong et al., 2016; Firat et al.,
二〇一五a),各样语言使用独立的编码器和平消除码器。那不允许跨语言共享消息,大概导致过度参数化,且在语言相似的意况下可能损害。

本学科的那几个版本供给TensorFlow Nightly。
为了选择稳定的TensorFlow版本,请考虑别的分支,如tf-1.4。

周边数据集:意大利语-乌克兰(Ukraine)语平行语言质感库(4.5M 个句子对),该多少集由 WMT
伊娃luation Campaign 提供。

作者:Emmanouil Antonios
Platanios等

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

# 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)

402com永利1站 1

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

第1,大家将深远商讨用实际的代码片断创设NMT模型的骨干,大家将因而它更详细地解释图2。
大家将数据准备和完全的代码推迟到后来。
那有的是指文件model.py

在底层,编码器和平化解码器奥迪Q7NNs接收以下输入:首先是源句子,然后是提醒从编码转换来解码格局的境界标记"<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)。
    测试稍有例外,所以大家稍后再谈谈。

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

表 2:我们建议的有根基成对
NMT(PNMT)模型的方法(阴影的一行)和用于 IWSLT-17 数据集的 谷歌多语言 NMT 模型(GML)的可比。因为 Meteor 不帮忙 It、Nl 和
Ro,所以仅突显了 BLEU 衡量规范的结果,CPG8 表示使用 8 个语言嵌入来表示
CPG。「C4」下标表示用于受控参数共享的 CPG 的起码版本(参见第 3.1
节),使用阶段 4 等。各样情形下的特等得分加粗展现。

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

在过去,古板的基于短语的翻译系统经过将源语句拆分成三个部分然后将其逐句翻译来实行他们的天职。
那致使了翻译产出的不流利,并不像大家人类翻译的那么。
大家涉猎整个源句子,驾驭它的意味,然后产生1个翻译。
神经机译(NMT)模仿的就是那种方法!

402com永利1站 2

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

具体而言,NMT系统率先使用编码器读取源句子来构建“思想”向量,表示句子含义的数字连串;
解码器然后甩卖句子向量以产生翻译,如图1所示。那平时被称作编码器 -
解码器连串布局。
NMT以那种措施解决了古板的基于短语的不二法门中的局地翻译难点:它能够捕捉语言的久远依靠,例如性别协议;
语法结构等; 并由此谷歌(谷歌(Google))神经机器翻译系统(Google Neural Machine
Translation
systems)体现了更通畅的翻译。

NMT模型依照其非常的系统布局而有所分化。
对于连串数据,很自然的选料是当先5/10NMT模型所利用的递归神经网络(TucsonNN)。
编码器和平解决码器经常采取奥德赛NN。 但是,卡宴NN模型在偏下地方有所分化:(a)方向性

  • 单向或双向; (b)深度 - 单层或多层; 和(c)类型 -
    平时是日常SportageNN,长期短时间记念(LSTM)或门控循环单元(GRU)。
    有趣味的读者能够在这篇博文中找到有关途达NN和LSTM的更多信息。

在本教程中,大家以单向的深浅多层ENCORENN为例,将LSTM作为贰个递归单元。
大家在图第22中学显示了那样模型的1个例子。在那几个例子中,大家树立了三个模型,将源句子"I
am a student"翻译成指标句子"Je suisétudiant"。
在高层次上,NMT模型由七个递归神经互连网组成:编码器XC60NN仅仅消耗输入的源单词而不作任何预测;
另一方面,解码器在测度下一个单词的同时处理对象语句。

欲精通更多音讯,大家向读者介绍本学科所依照的Luong
(2016)。

402com永利1站 3

图2.神经机译 - 八个深度循环架构的例证,将源句子“I am a
student”翻译成指标句子“Je suistétudiant”。
那里,“<s>”表示解码进度的上马,而“</ s>”表示解码器结束。

图 3. Greedy 解码——多个实例:已磨炼的 NMT 模型如何运用 greedy
搜索为源语句 Je suis étudiant 生成翻译。

神经机译(NMT)无需单独陶冶或调整系统的别的部分就能够直接建立模型源语言到目的语言的映照。那使得
NMT 神速上扬,并在重重普遍环境中中标应用 (Wu et al., 二〇一五; Crego et
al.,
二零一四)。编码器-解码器抽象使营造将别的语言的源句映射到向量表示,再将向量表示解码到别的目的语言的系统在概念上变得实惠。由此,人们建议了各类措施来扩大那种多语言机译的架空
(Luong et al., 二〇一六; Dong et al., 贰零壹陆; Johnson et al., 2017; Ha et al.,
二〇一五; Firat et al., 二零一六a)。

介绍(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提供的土耳其(Turkey)语 -
    英语TED对话语料库(133K个句子对)。
  2. 大规模:WMT Evaluation
    Campaign提供的德英平行语言材料库(4.5M句子对)。

大家首先建立部分有关NMT的seq2seq模子的基本知识,解释什么建立和演练二个vanilla
NMT模型。 第2有的将重视于创设具有注意力机制的竞争性NMT模型。
然后,大家将钻探一些技能和诀窍,以创设最佳NMT模型(包罗进程和翻译品质),如TensorFlow最佳实践(批处理,分段),双向福特ExplorerNN,波束搜索(beam
search [本条是什么?])以及采纳GNMT注意力扩展到四个GPU。

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

论文:Contextual Parameter Generation
for Universal Neural Machine Translation

设置教程(Installing the Tutorial)

要安装本学科,您供给在系统上设置TensorFlow。 本教程需求TensorFlow
Nightly。 要安装TensorFlow,请依照那边的设置表达进行操作。
假设设置了TensorFlow,您能够运作以下命令来下载本课程的源代码:

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

402com永利1站 4

选自arXiv

假诺选择那一个代码库实行讨论,请引用此。

tf-seq2seq [TensorFlow]

摘要:咱俩对现有神经机译(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的更小的上学速率。

参与:白悦、刘晓坤

编码器(Encoder)

若是检索出来,嵌入字就作为输入被输入到主网络中,主网络由八个多层奥迪Q7NN组成

  • 1个源语言的编码器和贰个指标语言的解码器。
    那三个哈弗NN原则上得以大快朵颐相同的权重;
    不过,在实践中,咱们平日利用八个例外的途睿欧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。
在那边,我们只建立三个单层的LSTM,encoder_cell。
咱们将介绍怎样营造多层LSTM,添加dropout,并在后边的章节中运用attention。

新近,谷歌(Google)官方在
Github开放了一份神经机译课程,该学科从基本概念达成起来,首先搭建了三个简便的NMT模型,随后更进一步引进注意力机制和多层
LSTM加强系统的习性,最终谷歌(Google)依照GNMT提供了更进一步革新的技艺和细节,那么些技巧能令该NMT系统达到最好高的精度。机器之心对该学科进行简易的讲述,跟详细和高精度的始末请查看项目原网站。

402com永利1站 5

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

于今大家早就定义了NMT模型的正向传播。 计算反向传播只是几行代码的问题:

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

教练福特ExplorerNNs的最首要步骤之一是梯度裁剪。 在此处,大家在大局范围内开始展览裁剪。
最大值max_gradient_norm常常设置为5或1的值。最后一步是选选择优秀者化器。
Adam优化器是一个常用的选项。 大家也选用贰个学习率。
learning_rate的值一般能够在0.0001到0.001里边; 随着陶冶的进行能够缩小。

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

在我们协调的试行中,大家运用正规SGD(tf.train.GradientDescentOptimizer),其深造速率稳步降低,那样能够得到更好的特性。
参见
benchmarks。

未完待续

磨炼以后,大家得以应用含有新 model_dir 的一样推理指令进行推理:

402com永利1站 6

注意力机制中有怎么着有关注意事项呢?

402com永利1站,图 1:在大家的模块化框架下的 NMT
系统概述。大家的最首要进献在于参数生成器模块(即,耦合或解耦——具有普鲁士蓝字体的各类框是独立的选项)。注意,g
表示参数生成器互联网。在大家的实验中,我们着想该互连网的线性方式。但是,大家的孝敬并不取决于其余模块的抉择;大家仍是能够将享有不一致架构的参数生成器和分歧类别的词汇表用于编码器和平化解码器。

num_units](因为我们应用 dynamic_rnn with
time_major设定)。在注意机制上,大家必要确认保证通过的「memory」是批次为主的,所以需求沟通attention_states。大家透过source_sequence_length
保障注意机制的权重有合适的规范化(只在
non-padding的岗位)。定义完注意机制之后,大家应用 AttentionWrapper
来包裹解码单元。

小编首先介绍1个可用来定义和讲述大部分现有 NMT
系统模块化框架,然后,在第 3
节中,将依据该框架介绍本商量的重中之重进献,即语境参数生成器(CPG)。小编还论证了该措施使大家更类似普适的中档语言。

是因为 attention wrapper,就不再要求扩张咱们包罗 attention 的 vanilla
seq2seq 代码。那有的文本为 attention_model.py。

402com永利1站 7

在互连网的平底,编码器和平化解码器 翼虎NN
接收到以下输入:首先是原句子,然后是从编码到解码形式的过渡边界标记「」,最后是目的语句。对于教练以来,我们将为系统提供以下张量,它们是以时日为主(time-major)的格式,并包含了单词索引:

主要编辑:

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

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

在装置 TensorFlow 之后,我们需求周转以下命令安装本学科的源代码:

正文为机械之心编写翻译,转发请联系本公众号获得授权。重回乐乎,查看更多

演绎——怎样转变翻译

此间,函数score 用于将对象隐蔽状态 ht 和每四个源状态
hs进行相比较,结果会被规范成生成式注意力权重(1个源地点的遍布)。其实有很各类有关评分函数(scoring
function)的选择;相比流行的评分函数包罗公式(4)中付出的乘法与加法形式。一旦被计算,注意力向量
at 就会用来推导 softmax logit 和损失。那与 vanilla seq2seq
模型顶层的对象隐蔽态相似。函数 f 也得以选取此外格局。

# 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)

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

请牢记在vanilla连串到行列模型中,当初叶编码处理时,大家把最后的源状态从编码器传递到解码器。那对短、中长度的语句效果很好;对于长句子,单一固定大小的隐状态成为了消息瓶颈。注意力机制没有吐弃源陆风X8NN中计算的保有隐状态,而是建议了允许解码器窥探它们的点子(把它们当做是源消息的动态储存)。如此,注意力机制升级了长句的翻译品质。今后,注意力机制实至名归,已成功选拔于别的许多职分(比如语音识别)。

演绎与教练的不一样在于步骤
3。推理不一连馈送作为输入的正确目的词,而是采纳被模型预测的单词。下边是达成greedy 解码的代码。它与教练解码器格外相像。

LSTM、encoder_cell。我们前面会详细描述怎么着创设多层 LSTM、添加 dropout
并行使注意力机制。

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

基础

major)的,大家要求设定 time_major=True。以往大家临时只须要创设单层

4 所示)。

我们在本文中动用了 GreedyEmbeddingHelper 而不是
TrainingHelper。由于不能提前掌握对象语句的长短,大家利用
maximum_iterations 限制翻译的长短。三个启发是解码最多两倍的源语句长度。

用以营造 seq2seq 模子的工具很多:

# 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

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

图 4. 注意力可视化——源语句与对象语句之间对齐的实例。图片源于 2014 年
Bahdanau 等人的随想。

如上命令行演习2个

  1. 近日目的隐蔽状态和全数源状态(source
    state)实行比较,以导出权重(weight),见图 4。

  2. 依照注意力权重,大家计算了三个背景向量(context
    vector),作为源状态的平均权值。

  3. 将背景向量与眼下指标隐蔽态进行整合以扭转最终的注意力向量。

402com永利1站 8

Nemantus [Theano]

若想参考越来越多新闻,请查看
Luong(二〇一五)(

为了使注意力发挥功效,我们必要用到luong、scaled_luong、bahdanau 或
normed_bahdanau在那之中的叁个看作练习时期注意力标志(attentionflag)的值。该标志钦点了小编们即将利用的注意力机制。除此之外,我们要求为注意力模型创造1个新目录,由此无需另行使用在此以前磨练的主干
NMT模型。

4.损失

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

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

decoder_cell = tf.contrib.seq2seq.AttentionWrapper(

                   decoder_cell, attention_mechanism,

                   attention_layer_size=num_units)

402com永利1站 9

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

max_gradient_norm 经常设置为 5 或
1。最终一步是选项优化器。Adam优化器是最广泛的取舍。大家还要选拔二个学习率,learning_rate
的值一般在 0.0001 和 0.001之间,且可安装为随着陶冶进度日益压缩。

最近是时候定义大家的 NMT
模型的前向传来了。总计反向传播只要求写几行代码:

笔者们一致能够营造 embedding_decoder 和
decoder_emb_inp。注意大家能够挑选预练习的词表征如 word2vec 或 Glove
vectors
开首化嵌入权重。平日给定多量的磨炼多少,大家能开头学习那么些嵌入权重。

3.解码器

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

402com永利1站 10

为了更高的频率,大家三回用八个句子(batch_size)举行磨炼。测试略有不相同,大家会在背后讨论。

本学科包含实际的尺度测试结果,用户可机关复制。大家的模子提供有力的开源基准,其属性不亚于
GNMT 的结果 [5]。大家在 WMT 二零一四 的葡萄牙共和国语转乌克兰语翻译职务中收获了 BLEU
得分 24.4 的实际业绩。

提交以上的 logits,可总结锻练损失:

终极,我们尚无涉及过的 projection_layer
是三个密集矩阵,将顶部的隐藏态转变为维度 V 的逻辑向量。大家在图 2
的上部展现了此进度。

我们信任提供全部人都很不难复制的规范是丰硕关键的。因而,大家依据以下公开的数据集提供了全方位的考试结果和预锻练模型:

基准

相关文章

Comment ()
评论是一种美德,说点什么吧,否则我会恨你的。。。