本文会首先介绍神经网络机器翻译(Neural Machine Translation )技术的原理,再介绍如何使用 TensorFlow NMT 训练一个中英翻译引擎。

一、Encoder -- Decoder模型的原理

Encoder-Decoder 模型是使用神经网络进行机器翻译的基本方法,一般也称作 Seq2Seq 模型 。原始的 N VS N RNN结构要求输入序列和输出序列等长,而Encoder-Decoder 模型可以有效地建模输入序列和输出不等长的问题 。 具体来说,它会先用一个 Encoder 将输入的序列编码为一个上下文向量 c, 再使用 Decoder对c进行解码,将之变为输出序列。对应到机器翻译问题中,输入的句子被 Encoder 编码为向量 c,c 中存储了神经网络对句子的理解,再利用 Decoder 解码 c,以生成翻译之后的句子 。

二、注意力机制

在 Encoder-Decoder 结构中, Encoder 把所高的输入序列都编码成一个统一的语义特征 c 再解码,因此, c 中必须包含原始序列中的所有信息,它的长度成了限制模型性能的瓶颈。如在机器翻译问题中 , 当被翻译的句子较长 时,一个 c可能无法存诸如此多的信息,翻译精度会下降 。注意力机制( Attention) 通过在每个时间输入不同的 c 来解决这个问题 。使用注意力机制后,每一个 c会自动选取与当前所要输出的 y最合适的上下文信息。

三、使用TensorFlow NMT 搭建神经网络翻译引擎

2017 年 7 月, Google 公司公布了基于 TensorFlow 构建的 NMT 项目,该项目采用了最新的深度学习技术,可以让每个人轻松地训练、自己的神经网络翻译引擎 。 NMT 项目支持基本的 Encoder-Decoder 结构,也支持注意力机制。

1、将越南语翻译为英语

(1)未使用注意力模型

TensorFlowNMT代码下载地址:https://github.com/tensorflow/nmt,运行命令下载越南语与英语的平行语料库:bash nmt/scripts/download_iwslt15.sh ./tmp/nmt-data,下载的文件将会保存在/tmp/nmt_data/目录下。利用这个语料库,就可以开始训练模型了,新建一个/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 # 每100步打印信息
--num_layers=2 # 使用两层LSTM
--num_units=128 # 隐藏单元个数
--drop_out=0.2
--metrics=bleu

深受版本不同的危害...

报错:AttributeError: module 'tensorflow.contrib.data' has no attribute 'Dataset',这是版本不同导致的问题,改为tf.data.TextLineDataset()即可。

报错:TypeError: map() got an unexpected keyword argument 'num_threads',解决方案:用到这两个参数num_threads、output_buffer_size的地方,把该参数全部去掉就可以。

报错:AttributeError: 'MapDataset' object has no attribute 'group_by_window',解决方案:将 batched_dataset = src_tgt_dataset.group_by_window(key_func=key_func, reduce_func=reduce_func, window_size=batch_size) 改为 batched_dataset = src_tgt_dataset.apply(tf.contrib.data.group_by_window( key_func=key_func, reduce_func=reduce_func, window_size=batch_size))即可。

报错:UnboundLocalError: local variable 'batched_dataset' referenced before assign,这是变量未定义就使用导致的错误,仔细检查一下定义和使用的地方,我的是代码对齐问题。

如何可使用训练好的模型对新的句子进行翻译?首先创建一个 /tmp/my_infer_file.vi 文件,并将测试集 /tmp/nmt_data/tst2013.vi 中的越南语句子复制一些到 /tmp/my一infer_file.vi里。执行命令:

python -m nmt.nmt
--out_dir=tmp/nmt_model
--inference_input_file=tmp/my_infer_file.vi
--inference_output_file=tmp/nmt_model/output_infer

(2)使用注意力模型

使用上述命令只是在训练基础的 Encoder-Decoder 模型 ,并没再加入注意力机制。在 TensorFlowNMT 中对模型加入注意力机制很简单,只需要使用--attention 具体指定一种注意力机制即可 。 此处一共提供了 4 种选顶 : bahdanau、 normed_bahdanau、 luong、 scaled_luong。运行命令进行训练和测试如下:

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 # 每100步打印信息
--num_layers=2 # 使用两层LSTM
--num_units=128 # 隐藏单元个数
--drop_out=0.2
--metrics=bleu
# 测试
python -m nmt.nmt
--out_dir=tmp/nmt_attention_model
--inference_input_file=tmp/my_infer_file.vi
--inference_output_file=tmp/nmt_model/output_infer

四、TensorFlow NMT 源码简介

主要介绍词嵌入、 Encoder-Decoder 模型 、 注意力机制三部分的源码。

1、词嵌入

在 model.py 文件中,构建了基本的词嵌入及 Encoder-Decoder模型 。model.py下载地址:https://github.com/tensorflow/nmt/blob/master/nmt/model.py

embedding_encoder = tf.get_variable("embedding_encoder", [src_vocab_size, src_embed_size], dtype)
# encoder_emb_lookup_fn 查找某个单词id对应的词嵌入向量
self.encoder_emb_inp = self.encoder_emb_lookup_fn(self.embedding_encoder, sequence)

2、Encoder

词嵌入之后得到新的输入 encoder_emb_inp, 它的形状为 (max_time,batch_size, embedding_size),它将被传入 Encoder中。

cell = self._build_encoder_cellencoder_cell = (hparams, num_layers,num_residual_layers)
# encoder_outpus : [max_time, batch_size, num_units)
# encoder_state: [batch size, num units) 相当于上下文表示向量c
# 将新建的RNN展开时间维度
encoder_outputs, encoder_state = tf.nn.dynamic_rnn(cell,self.encoder_emb_inp,dtype=dtype,sequence_length=sequence_length,time_major=self.time_major,swap_memory=True)

3、Decoder

cell, decoder_initial_state = self._build_decoder_cell(hparams, encoder_outputs, encoder_state,iterator.source_sequence_length)# Helper
helper = tf.contrib.seq2seq.TrainingHelper(decoder_emb_inp, iterator.target_sequence_length,time_major=self.time_major)# Decoder
my_decoder = tf.contrib.seq2seq.BasicDecoder(cell,helper,decoder_initial_state,)# Dynamic decoding
outputs, final_context_state, _ = tf.contrib.seq2seq.dynamic_decode(my_decoder,output_time_major=self.time_major,swap_memory=True,scope=decoder_scope)

4、注意力机制的 Encoder-Decoder 模型(attention model.py)

对原先的 decoder_cell 用 tf.contrib.seq2seq.AttentionWrapper 包装后, 得到新的 decoder cell 会自动具有注意力机制 。 使用 decoder_cell 对上下文进行解码的方法与之前一致 。

attention_mechanism = create_attention_mechanism(attention_option, num_units,memory,source_sequence_length)
cell = tf.contrib.seq2seq.AttentionWrapper(cell,attention_mechanism,attention_layer_size=num_units,alignment_history=alignment_history,name="attention")

五、总结

本文介绍了基本RNN结构:Encoder-Decoder,以及他的改进——注意力机制。

神经网络机器翻译技术NMT相关推荐

  1. 神经网络机器翻译技术及应用(上)

    何中军,百度机器翻译技术负责人.本文根据作者2018年12月在全球架构师峰会上的特邀报告整理而成. 本报告分为以下5个部分: 机器翻译基本原理,介绍机器翻译原理.主要挑战.发展历程,及评价方法 神经网 ...

  2. 融合统计机器翻译特征的蒙汉神经网络机器翻译技术

    融合统计机器翻译特征的蒙汉神经网络机器翻译技术 杜健  内蒙古大学 [摘要]:随着机器翻译的发展,统计机器翻译已经进入瓶颈期很难有所提高,因此研究人员逐步将研究目光投向神经网络机器翻译方向.神经网络机 ...

  3. 对神经网络机器翻译(NMT)的个人见解

    首先,我们先看下经典的NMT的模型图: 这是英语对西班牙语的翻译. 有几点需要注意: (1)模型的最后输出层(FC),输出维度为训练集中所有词,即训练集中一个出现了n个词,那么输出维度就是n. (2) ...

  4. 神经网络机器翻译(一)

    文章目录 序言 Encoder-Decoder 模型原理 应用范围 局限性 注意力机制(Attention) 模型原理 原理图示 自注意力 (self-attention) 原理介绍 图示讲解 ker ...

  5. 编写程序实现通过有道或百度翻译url对用户输入数据进行翻译_8亿用户AI有道:超强神经网络翻译技术大解密...

    [新智元导读]数据的作用在人工智能发展道路上愈发被重视.7月27日,在广州举行的GMIC大会上,网易有道技术总监林会杰表示目前AI+教育还在初级阶段,对于这一行业而言,得数据者得先机.这家拥有国内最大 ...

  6. 编写程序实现通过有道或百度翻译url对用户输入数据进行翻译_8亿用户AI有道,超强神经网络翻译技术大解密...

    [新智元导读]数据的作用在人工智能发展道路上愈发被重视.7月27日,在广州举行的GMIC大会上,网易有道技术总监林会杰表示目前AI+教育还在初级阶段,对于这一行业而言,得数据者得先机.这家拥有国内最大 ...

  7. Seq2Seq and NMT(基于cs224n的最全综述神经机器翻译技术)

    文章目录 Machine Translation的简介: 统计机器翻译模型(SMT): 神经机器翻译(NMT)-sequence 2 sequence Greedy decoding Beam sea ...

  8. 【笔记3-7】CS224N课程笔记 - 神经网络机器翻译seq2seq注意力机制

    CS224N(七)Neural Machine Translation, Seq2seq and Attention seq2seq神经网络机器翻译 历史方法 seq2seq基础 seq2seq - ...

  9. 统计机器翻译与神经机器翻译区别_神经网络机器翻译的发展趋势

    神经网络机器翻译的发展趋势 作者:Isabella Massardo     编译:TransliaMT 上个 月,OpenAI 推出了其 GPT-3(生成型预训练变换器-3)的封闭测试版,展示了该模 ...

  10. 朱靖波:谈谈机器翻译技术发展与产业化

    2020-11-07 00:18:49 作者 | 朱靖波 编辑 | 陈彩娴 由中国中文信息学会主办,山东大学承办的第十七届自然语言处理青年学者研讨会(YSSNLP 2020)于10月24-25日在线上 ...

最新文章

  1. 背英语单词很困难,不妨学习一下词根词缀吧(每天10个词根、词缀)Part 3
  2. webgis 行政图报错_WebGIS 地图 示例源码下载
  3. css属性 content
  4. 一款开源免费且快速,高效和安全的跨平台备份程序:Restic使用教程
  5. Web前端开发必备工具推荐
  6. AutoML在推荐系统协同过滤中的探索与发现(附交流视频和PPT下载链接)
  7. SQl SGA 整理
  8. Python数据分析中Groupby用法之通过字典或Series进行分组
  9. 校验码(循环冗余校验码)
  10. 2022-2028年中国高通量药物筛选与创新药物行业市场调查研究及发展前景展望报告
  11. 启用SATA硬盘的AHCI模式解决X61速度慢的问题
  12. 终极指南:家庭安防监控摄像机安装位置
  13. 店宝宝:双十一战线拉长,规则又复杂了吗?
  14. Camera摄像头模组硬件
  15. 计算机类普刊有哪些,可以快速发表论文的计算机普刊
  16. 计算机毕业设计ssm科技类产品众筹系统9x420系统+程序+源码+lw+远程部署
  17. 一坑未平一坑又起——圆锥曲线1-1 椭圆的定义中的东西
  18. 人体力学-线速度与角速度
  19. 粤港澳高速船电子海圈更新实践
  20. ENVI:如何自定义beijing54、西安80、国家2000坐标系

热门文章

  1. 孩子沉迷网游 呼唤亲子陪伴教育
  2. Bada学习-(二十九)bada测试服务器
  3. word标题序号变为黑色方块解决方案
  4. dble 不支持的关键字 mysql_分布式 | DBLE Release Notes 详细解读 2.19.11.0
  5. Flink StreamingFileSink写入hdfs,文件一直处于inprogress
  6. 后台网站首页设计过程
  7. Blender建模(二)
  8. Spark SQL操作JSON字段小Tips
  9. java 股票指标算法库_股票K线指标算法整理(Java封装工具类,K线指标算法工具类)...
  10. 本地打印后台处理程序服务没有运行