当前位置:   article > 正文

***chapter 16 神经网络机器翻译技术

神经网络机器翻译

本章主要介绍两部分内容:
1、神经网络机器翻译技术的原理;
2、利用Tensorflow NMT 实现“机器翻译”;

一、神经网络机器翻译原理

(一)Encoder - Decoder 模型的原理

在传统的 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。

最后,用严格的数学表达式,整理一下“注意力机制”的工作原理:
在这里插入图片描述

二、使用Tensorflow NMT搭建神经网络翻译引擎

(一) 使用NMT搭建一个“越南语 -> 英语”的翻译引擎:
#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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
(二)Tensorflow NMT源码介绍

有时间详读,补充!

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/498693
推荐阅读
相关标签
  

闽ICP备14008679号