1. 机器翻译
机器翻译,即跨语言间的自动翻译,是机器学习社区最活跃的研究领域。在机器翻译的众多方法中,序列到序列(sequence-to-sequence,seq2seq)模型近期获得巨大成功。由于其可以使用深度神经网络获取句义,该模型成为谷歌翻译等多数商业翻译系统事实上的标准模型。
小生以参加《全球AI挑战赛-英中机器文本翻译》为导向,学习各种相关知识。
2. 赛题简介
英中文本机器翻译竞赛的目标是评测英中文本机器翻译的能力。本次文本机器翻译语言方向为英文到中文。参赛队伍需要根据评测方提供的数据,训练机器翻译系统,并且自由地选择机器翻译技术。例如,基于规则的翻译技术、基于实例的翻译技术、统计机器翻译及神经网络机器翻译技术等。
本次竞赛将利用机器翻译的客观考核指标(BLEU、NIST score、TER)进行评分,BLEU得分会作为主要的机器评价指标。组委会将通过客观指标,并结合答辩表现,综合评估参赛者的算法模型。
3. 环境准备
3.1. 软件安装
- win10
- python3.6
- tensorflow1.3.0
3.2. 源码安装配置
git clone https://github.com/tensorflow/nmt/
因为tensorflow的更新很快,nmt项目的更新也很快,所以,我们必须使用和tensorflow版本对应的nmt版本。git reset --hard 77e6c55
4. 入门demo
让我们开始训练第一个 NMT 模型,将越南语翻译为英语。代码的入口是nmt.py。
4.1. 数据集
我们将使用小规模的 Ted 演讲并行语料库(133k 的训练样本)进行训练。所有的数据都可从以下链接找到:https://nlp.stanford.edu/projects/nmt/ 。
我们将使用tst2012作为开发数据集,tst2013作为测试数据集。在linux下运行以下命令行下载数据:mkdir -p /tmp/nmt_data
nmt/scripts/download_iwslt15.sh /tmp/nmt_data
linux下载好数据集后,把数据集下载到win10中nmt目录中,路径为nmt/tmp/nmt_data
。
4.2. 训练model
在根目录(nmt目录)下运行:
1 | 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 |
郝同学i5-3337U CPU@1.80GHz,8G内存,训练了将近两个小时才训练完成。下文我们要学习使用一下UCloud提供的免费GPU。
我们可以使用 Tensorboard 在训练过程中查看模型的总结:
tensorboard --port 22222 --logdir ./tmp/nmt_model/
通过以下简单的变化,就能逆向完成英语到越南语的翻译。
--src=en --tgt=vi
4.3. 使用model
1、从mnt/tmp/nmt_data/tst2013.vi
中复制几句话,新建nmt/tmp/my_infer_file.vi
,粘贴到里面。
2、运行model
1 | python -m nmt.nmt --model_dir=./tmp/nmt_model --inference_input_file=./tmp/my_infer_file.vi --inference_output_file=./tmp/nmt_model/output_infer |
3、查看结果
打开nmt/tmp/nmt_model/output_infer
文件,即可看到翻译结果。
5. 书签
谷歌开放GNMT教程:如何使用TensorFlow构建自己的神经机器翻译系统
Neural Machine Translation (seq2seq) Tutorial