开始
首先,这篇博客基本基于:/tensorflow/nmt/ 的内容来的,作为个人学习的笔记,也当做一个博客内容分享。顺序和Github上的顺序有一些区别,注意咯
首先,这里讲的是一个基于Seq2Seq实现的机器翻译系统,即Neural Machine Translation,具体的论文可以参考(Sutskever et al., , Cho et al., )。具体关于Seq2Seq是什么,以及Encoder-Decoder是什么,我就不再详细赘述了,有兴趣的可以看看我博客里之前的内容,都有。
在Readme里面,对于这个项目来说,具有轻量化、高质量、集成了一些Google NMT的技巧以及具备实际使用能力等几个特性,也就是说非常具有参考学习的意义。
这个项目更好的一个地方在于,提供了两类不同的语料供我们测试,一大一小,如果大家没有GPU或者只是单纯想学习一下,那么那个小规模的语料就很贴心了。
Small-scale: English-Vietnamese parallel corpus of TED talks (133K sentence pairs) provided by the IWSLT Evaluation Campaign.Large-scale: German-English parallel corpus (4.5M sentence pairs) provided by the WMT Evaluation Campaign.
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 /tensorflow/nmt/# 使用自带的脚本下载一个简单的数据集cd nmtnmt/scripts/download_iwslt15.sh /tmp/nmt_data# 运行代码mkdir /tmp/nmt_modelpython -m nmt.nmt \--src=vi --tgt=en \ --vocab_prefix=/tmp/nmt_data/vocab \ --train_prefix=/tmp/nmt_data/train \ --dev_prefix=/tmp/nmt_data/tst \ --test_prefix=/tmp/nmt_data/tst \ --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/
确定了自己程序没有问题后,就开始聊聊和分析下这个项目吧,请期待第二篇