Tensorflow 机器翻译NMT笔记 1 快速上手

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/MebiuW/article/details/77825642

开始

首先,这篇博客基本基于:https://github.com/tensorflow/nmt/ 的内容来的,作为个人学习的笔记,也当做一个博客内容分享。顺序和Github上的顺序有一些区别,注意咯

首先,这里讲的是一个基于Seq2Seq实现的机器翻译系统,即Neural Machine Translation,具体的论文可以参考(Sutskever et al., 2014, Cho et al., 2014)。具体关于Seq2Seq是什么,以及Encoder-Decoder是什么,我就不再详细赘述了,有兴趣的可以看看我博客里之前的内容,都有。

在Readme里面,对于这个项目来说,具有轻量化、高质量、集成了一些Google NMT的技巧以及具备实际使用能力等几个特性,也就是说非常具有参考学习的意义。

这个项目更好的一个地方在于,提供了两类不同的语料供我们测试,一大一小,如果大家没有GPU或者只是单纯想学习一下,那么那个小规模的语料就很贴心了。

NMT

这里写图片描述

传统的phrase-based机器翻译是将源语句按照一定的规则,分解成不同的phrase,然后在逐个翻译,造成翻译结果不流畅,并且系统复杂性太差。而在NMT当中,则是应用了这样一个Encoder-Decoder的模型,原始的Encoder-Decoder当中,Encoder将源语句按顺序读入,然后归纳成为一个蕴含了逐个语句所有信息的上下文向量Context,然后Decoder通过这个Context可以生成一个新的语句,并且是另一种语言的语句,从而完成了翻译。这样一个模型,除了做NMT以外,也可以做对话、语音识别、文字归纳等任务。

当然在实际使用中,不可能使用上面所说的那么简单的Encoder-Decoder。具体的一些经典的改进和细节可以有:
1. Attention:Attention绝对是Encoder-Decoder的标配,有了Attention,Decoder不再使用一个固定的Context,而是动态的计算当前状态的Context,效果改进明显。
2. 一般Encoder和Decoder都使用RNN网络,当然也不可能是原始的RNN,一般都是LSTM或者GRU,主要用于解决长期依赖问题,通俗一点就是原始的RNN不适合处理太长的序列,需要LSTM GRU等加强版的RNN来解决。
3. RNN可以是单向的,也可以是双向的RNN,一般Encoder部分都是用双向的RNN,似乎Decoder部分双向不太合适?(待求证)
4. RNN可以多层堆叠,这个我也写过,需要的可以自行看下。

这里写图片描述

代码初步运行

在写记录的这个时间,这个实例代码提供的是Tensorflow 1.2版本的,要是遇到什么问题的话,记得更新改进下版本。

基本的机器环境:
Python 2.7,Tensorflow(GPU or CPU 版都可以) 1.2.1,Ubuntu 64bit

按照官方的教程:克隆代码,下载数据集,运行Demo,这个三个步骤来完成一个最简单的初步上手

# 从github克隆代码到本地
git clone https://github.com/tensorflow/nmt/
# 使用自带的脚本下载一个简单的数据集
cd 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

如果不出意外的话,那么就可以运行结束,与此同时,可以使用Tensorboard来观察训练的各项指标

tensorboard --port 6222 --logdir /tmp/nmt_model/

确定了自己程序没有问题后,就开始聊聊和分析下这个项目吧,请期待第二篇

猜你喜欢

转载自blog.csdn.net/MebiuW/article/details/77825642