赞
踩
本章主要介绍两部分内容:
1、神经网络机器翻译技术的原理;
2、利用Tensorflow NMT 实现“机器翻译”;
在传统的 N VS N RNN中,其input和output等长,他的这种特性限值了他在“机器翻译”领域的应用,因为,在机器翻译中,“原文”和“译文”往往是不等长的。
Encoder - Decoder 模型有效解决了 “N VS N RNN”的缺陷,其核心思想是:将input转为一个context(c)(c实际是一个hidden value),然后在将context转为output,其结构图如下所示:
Encoder - Decoder模型可以处理很多问题,如下图所示:
通过Encoder - Decoder模型可以有效解决input和output不等长的问题,但是,在该模型中,context©必须包含Input的所有信息,当input过长时,context(c)将无法存储如此之多的信息,这将导致翻译质量的下降,为解决此问题,引入了“注意力机制”。
注意力机制通过在不同的时间段,输入不同的c值解决了Encoder - Decoder模型的瓶颈,其结构如下所示:
下面以: “我爱中国” -> “I love china” 为例,具体解释“注意力机制”的核心思想。
在上面提到,所谓注意力机制是在不同的时间段i,输入不同的Ci,那么Ci如何计算呢?
首先,我们给Encoder中的每个hj都赋予一个权值aij,其表示:Decoder第i阶段Ci与Encoder中第j阶段hj的相关程度,Ci = sum(aij * hj) j=1,2,…,n;
以““我爱中国” -> “I love china””的翻译为例说明Decoder各个阶段Ci的计算:
Decoder第1阶段C1的计算,C1 = a11 * h1 + a12 * h2 + a13 * h3 + a14 * h4,其中hj(j=1,2,3,4),为Encoder不同阶段hidden layer的输出,上述计算示意图如下:
至此,“注意力机制”只剩下一个问题:这些权重aij从何而来? 实际上,aij也是通过训练而来的,是通过模型自动学习而来,它与Encoder各个h和Decoder各个h有关。
还是以:““我爱中国” -> “I love china”” ,为例,说明权重aij的计算过程,如下图所示:
给定train_set(input,output),学习 网络各hidden layer参数 ,以及, 权重aij。
最后,用严格的数学表达式,整理一下“注意力机制”的工作原理:
#step1:下载Tensorflow NMT代码 git clone https://github.com/tensorflow/nmt.git #接下来所讲的命令基本都是在NMT根目录下运行的 #step2:下载一个越南语 与 英语 的平行语料库 nmt/scripts/download_iwslt15.sh/tmp/nmt_data #是一个路径名:(nmt/scripts/download_iwslt15.sh/) #step3:开始训练 Encoder - Decoder 模型 + 注意力机制 mkdir /tmp/nmt_attention_model #建立模型存储目录 python -m nmt.nmt #将library直接以脚本形式导入,运行 --attention = scaled_luong #所选的注意力机制,有四种选项:bahdanau(本章所讲注意力机制),normed_bahdanau,luong,scaled_luong; --src=vi #input语种 --tgt=en #output语种 --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 #每隔100步打印训练信息 --num_layers=2 #隐含层层数 --num_units=128 #隐含层unit数 --dropout=0.2 #unit被drop的概率为0.8 --metrics=bleu #使用bleu作为测试指标 #step4:测试:input(粤语) -> output(英语) python -m nmt.nmt --out_dir = /tmp/nmt_attention_model #模型 --inference_input_file = /tmp/my_infer_file.vi #input --inference_output_file = /tmp/nmt_attention_model/output_infer #output #在训练时,可以输入下列命令,打开tensorboard tensorboard --logdir nmt_attention_model
有时间详读,补充!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。