NLP开源:斯坦福的NMT代码库和哈佛的NMT工具包
机器之心报道
斯坦福大学NLP组开放神经机器翻译代码库
发布地址:http://nlp.stanford.edu/projects/nmt/
参与成员:
Christopher D. Manning(斯坦福大学计算机科学和语言学教授)
Minh-Thang Luong(斯坦福博士,Google Brain 研究科学家)
Abigail See(斯坦福大学计算机科学在读博士)
Hieu Pham
代码库
对于混合 NMT(hybrid NMT),请使用这个代码库并且引用:
代码库:https://github.com/lmthang/nmt.hybrid
论文:使用混合词-字符模型实现开放词汇神经机器翻译(Achieving Open Vocabulary Neural Machine Translation with Hybrid Word-Character Models)
摘要:几乎之前所有的神经机器翻译(NMT)使用的词汇都受限,随后可能用一个方法来修补未知的单词。本论文展示了一个全新的能实现开放词汇神经机器翻译(open vocabulary NMT)的词-字符解决方法。我们建立了一个混合的系统,能够实现大部分的词级(word level)翻译,并可查阅罕见词的字母组成。我们字符级的循环神经网络能计算源词的表征,并能在需要时恢复未知的目标词。这种混合的方法还有一个双重优点是,与基于字符的网络相比,它更快且更容易训练;同时,它不像基于词的模型那样会产生未知的词。在 WMT' 15 英语-捷克语的翻译任务上,这种混合方法还实现了一个额外的+ 2.1 BLEU 分的提升——超过已经能处理未知单词的模型 11.4 BLEU 分。我们的最佳系统在这个任务上达到了新的最佳表现:20.7 BLEU 分。我们证明了我们的字符模型不仅能成功地学习生成形式很好的捷克语词(这是一种词汇复杂高度屈折的语言),还能为英语源词建立了正确的表征。
对于通用的基于注意的 NMT(general attention-based NMT),请引用以下论文:
代码库:https://github.com/lmthang/nmt.hybrid
预处理的数据
WMT'15 英语-捷克语数据(大)
训练集(包含 1580 万个句子对)
英语训练集(train.en):http://nlp.stanford.edu/projects/nmt/data/wmt15.en-cs/train.en
捷克语训练集(train.cs):http://nlp.stanford.edu/projects/nmt/data/wmt15.en-cs/train.cs
测试集:
newstest2013.en:http://nlp.stanford.edu/projects/nmt/data/wmt15.en-cs/newstest2013.en
newstest2013.cs:http://nlp.stanford.edu/projects/nmt/data/wmt15.en-cs/newstest2013.cs
newstest2014.en:http://nlp.stanford.edu/projects/nmt/data/wmt15.en-cs/newstest2014.en
newstest2014.cs:http://nlp.stanford.edu/projects/nmt/data/wmt15.en-cs/newstest2014.cs
newstest2015.en:http://nlp.stanford.edu/projects/nmt/data/wmt15.en-cs/newstest2015.en
newstest2015.cs:http://nlp.stanford.edu/projects/nmt/data/wmt15.en-cs/newstest2015.cs
词汇库(最常见的词):
vocab.1K.en:http://nlp.stanford.edu/projects/nmt/data/wmt15.en-cs/vocab.1K.en
vocab.1K.cs:http://nlp.stanford.edu/projects/nmt/data/wmt15.en-cs/vocab.1K.cs
vocab.10K.en:http://nlp.stanford.edu/projects/nmt/data/wmt15.en-cs/vocab.10K.en
vocab.10K.cs:http://nlp.stanford.edu/projects/nmt/data/wmt15.en-cs/vocab.10K.cs
vocab.20K.en:http://nlp.stanford.edu/projects/nmt/data/wmt15.en-cs/vocab.20K.en
vocab.20K.cs:http://nlp.stanford.edu/projects/nmt/data/wmt15.en-cs/vocab.20K.cs
vocab.50K.en:http://nlp.stanford.edu/projects/nmt/data/wmt15.en-cs/vocab.50K.en
vocab.50K.cs:http://nlp.stanford.edu/projects/nmt/data/wmt15.en-cs/vocab.50K.cs
词典(从对齐的数据中提取出来的,dict.en-cs):http://nlp.stanford.edu/projects/nmt/data/wmt15.en-cs/dict.en-cs
字符库:
vocab.char.200.en (http://nlp.stanford.edu/projects/nmt/data/wmt15.en-cs/vocab.char.200.en)
vocab.char.200.cs (http://nlp.stanford.edu/projects/nmt/data/wmt15.en-cs/vocab.char.200.cs)
注:我们的论文《Achieving Open Vocabulary Neural Machine Translation with Hybrid Word-Character Models》中使用了这个数据集。
WMT'14 英语-德语数据(中)
训练集(包含 450 万个句子对)
英语训练集(train.en):http://nlp.stanford.edu/projects/nmt/data/wmt14.en-de/train.en
德语训练集:(train.de):http://nlp.stanford.edu/projects/nmt/data/wmt14.en-de/train.de
测试集:
newstest2012.en:http://nlp.stanford.edu/projects/nmt/data/wmt14.en-de/newstest2012.en
newstest2012.de:http://nlp.stanford.edu/projects/nmt/data/wmt14.en-de/newstest2012.de
newstest2013.en:http://nlp.stanford.edu/projects/nmt/data/wmt14.en-de/newstest2013.en
newstest2013.de:http://nlp.stanford.edu/projects/nmt/data/wmt14.en-de/newstest2013.de
newstest2014.en:http://nlp.stanford.edu/projects/nmt/data/wmt14.en-de/newstest2014.en
newstest2014.de:http://nlp.stanford.edu/projects/nmt/data/wmt14.en-de/newstest2014.de
newstest2015.en:http://nlp.stanford.edu/projects/nmt/data/wmt14.en-de/newstest2015.en
newstest2015.de:http://nlp.stanford.edu/projects/nmt/data/wmt14.en-de/newstest2015.de
词汇库(最常见的 5 万个词):
vocab.50K.en (http://nlp.stanford.edu/projects/nmt/data/wmt14.en-de/vocab.50K.en)
vocab.50K.de (http://nlp.stanford.edu/projects/nmt/data/wmt14.en-de/vocab.50K.de)
词典(从对齐的数据中提取出来的,dict.en-de):http://nlp.stanford.edu/projects/nmt/data/wmt14.en-de/dict.en-de
注:我们的论文《Effective Approaches to Attention-based Neural Machine Translation》中使用了这个数据集。另外,因为历史上的原因,我们对合成词(compound words)做了拆分。比如,rich-text format --> rich ##AT##-##AT## text format.
IWSLT'15 英语-越南语数据(小)
训练集(包含 13.3 万个句子对)
英语训练集(train.en):http://nlp.stanford.edu/projects/nmt/data/iwslt15.en-vi/train.en
越南语训练集(train.vi):http://nlp.stanford.edu/projects/nmt/data/iwslt15.en-vi/train.vi
测试集:
tst2012.en:http://nlp.stanford.edu/projects/nmt/data/iwslt15.en-vi/tst2012.en
tst2012.vi:http://nlp.stanford.edu/projects/nmt/data/iwslt15.en-vi/tst2012.vi
tst2013.en:http://nlp.stanford.edu/projects/nmt/data/iwslt15.en-vi/tst2013.en
tst2013.vi:http://nlp.stanford.edu/projects/nmt/data/iwslt15.en-vi/tst2013.vi
词汇库(最常见的 5 万个词):
vocab.en:http://nlp.stanford.edu/projects/nmt/data/iwslt15.en-vi/vocab.en
vocab.vi:http://nlp.stanford.edu/projects/nmt/data/iwslt15.en-vi/vocab.vi
词典(从对齐的数据中提取出来的,dict.en-vi):http://nlp.stanford.edu/projects/nmt/data/iwslt15.en-vi/dict.en-vi
注:我们的论文《Stanford Neural Machine Translation Systems for Spoken Language Domains》中使用了这个数据集
预训练的模型
我们放出了预训练好的模型,可以直接通过我们的 Matlab 代码使用。
注:要使用这些模型,必须要一个 GPU。如果想要这些模型在 CPU 上可用,请考虑使用这个脚本:https://github.com/stanfordnlp/nmt/blob/master/code/misc/model2cpu.m
WMT'15 英语-捷克语混合模型(hybrid models)
我们训练了 4 个具有同样架构的模型(全局注意、双线性形式、dropout、两层字符级模型):
1. Model 1:http://nlp.stanford.edu/projects/nmt/models/wmt15.en-cs/model1.mat
2. Model 2 :http://nlp.stanford.edu/projects/nmt/models/wmt15.en-cs/model2.mat
3. Model 3:http://nlp.stanford.edu/projects/nmt/models/wmt15.en-cs/model3.mat
4. Model 4:http://nlp.stanford.edu/projects/nmt/models/wmt15.en-cs/model4.mat
WMT'14 英语到德语基于注意的模型(attention-based models)
1. 全局注意、点积:http://nlp.stanford.edu/projects/nmt/models/wmt14.en-de/globalAttn-dotProduct.mat
2. 全局注意、点积、dropout:http://nlp.stanford.edu/projects/nmt/models/wmt14.en-de/globalAttn-dotProduct-dropout.mat
3. 全局注意、双线性形式、dropout:http://nlp.stanford.edu/projects/nmt/models/wmt14.en-de/globalAttn-bilinear-dropout.mat
4. 局部注意(单调)、双线性形式:http://nlp.stanford.edu/projects/nmt/models/wmt14.en-de/localAttnMono-bilinear.mat
5. 局部注意(单调)、双线性形式、dropout:http://nlp.stanford.edu/projects/nmt/models/wmt14.en-de/localAttnMono-bilinear-dropout.mat
6. 局部注意(预测)、点积、dropout:http://nlp.stanford.edu/projects/nmt/models/wmt14.en-de/localAttnPred-dotProduct-dropout.mat
7. 局部注意(预测)、双线性形式:http://nlp.stanford.edu/projects/nmt/models/wmt14.en-de/localAttnPred-bilinear.mat
8. 局部注意(预测)、双线性形式、dropout:http://nlp.stanford.edu/projects/nmt/models/wmt14.en-de/localAttnPred-bilinear-dropout.mat
IWSLT'15 英语-越南语基于注意的模型(attention-based models)
1. 全局注意、双线性形式、dropout:http://nlp.stanford.edu/projects/nmt/models/iwslt15.en-vi/globalAttn-bilinear-dropout.mat
2. 全局注意、concatenate :http://nlp.stanford.edu/projects/nmt/models/iwslt15.en-vi/globalAttn-concat.mat
3. 局部注意(预测)、点积、dropout:http://nlp.stanford.edu/projects/nmt/models/iwslt15.en-vi/localAttnMono-dotProduct-dropout.mat
4. 局部注意(单调)、双线性形式、dropout:http://nlp.stanford.edu/projects/nmt/models/iwslt15.en-vi/localAttnMono-bilinear-dropout.mat
5. 局部注意(单调)、双线性形式:http://nlp.stanford.edu/projects/nmt/models/iwslt15.en-vi/localAttnMono-bilinear.mat
6. 局部注意(单调)、concatenate、dropout :http://nlp.stanford.edu/projects/nmt/models/iwslt15.en-vi/localAttnMono-concat-dropout.mat
7. 局部注意(预测)、点积、dropout:http://nlp.stanford.edu/projects/nmt/models/iwslt15.en-vi/localAttnPred-dotProduct-dropout.mat
8. 局部注意(预测)、双线性形式:http://nlp.stanford.edu/projects/nmt/models/iwslt15.en-vi/localAttnPred-bilinear.mat
9. 局部注意(预测)、concatenate、dropout:http://nlp.stanford.edu/projects/nmt/models/iwslt15.en-vi/localAttnPred-concat-dropout.mat
哈佛大学NLP组开源神经机器翻译工具包OpenNMT:已达到生产可用水平
神经机器翻译是近段时间以来推动机器翻译发展的主要推动力。今天,哈佛大学自然语言处理研究组(Harvard NLP)宣布开源了其研发的神经机器翻译系统 OpenNMT,该系统使用了 Torch 数学工具包。该研究组在官网上表示该系统已经达到生产可用的水平(industrial-strength)。
官网:http://opennmt.net
代码:https://github.com/opennmt/opennmt
演示:https://demo-pnmt.systran.net
Docker 容器:https://hub.docker.com/r/harvardnlp/opennmt
OpenNMT 可以像主要的翻译服务提供商的已投入生产的系统那样使用。该系统简单易用,易于扩展,同时也能维持效率和当前最佳的翻译准确度。
其特性包括:
简单的通用型接口,仅需要源文件和目标文件;
为高性能 GPU 训练进行了速度和内存优化;
可以提升翻译性能的最新研究的特性;
有多个语言对的预训练好的模型(即将到来);
允许其它序列生成任务的扩展,比如归纳总结和图像到文本生成。
安装
OpenNMT 仅需要一次 vanilla torch/cutorch 安装。它要使用 nn、nngraph 和 cunn。有(CUDA)Docker 容器可选。
快速启动
OpenNMT 包含三条指令:
1)预处理数据
th preprocess.lua -train_src data/src-train.txt -train_tgt data/tgt-train.txt -valid_src data/src-val.txt -valid_tgt data/tgt-val.txt -save_data data/demo
2)训练模型
th train.lua -data data/demo-train.t7 -save_model model
3)翻译句子
th translate.lua -model model_final.t7 -src data/src-test.txt -output pred.txt
查看指南了解更多:http://opennmt.github.io/Guide
研究
其中主要的模型基于论文 Neural Machine Translation by Jointly Learning to Align and Translate Bahdanau et al. ICLR 2015 和 Effective Approaches to Attention-based Neural Machine Translation, Luong et al. EMNLP 2015。
在基本模型上,还有大量可选项,这都要感谢 SYSTRAN(http://www.systransoft.com/)的出色工作。特别地,下面是一些实现的功能:
Effective Approaches to Attention-based Neural Machine Translation . Luong et al., EMNLP 2015.
Character-based Neural Machine Translation. Costa-Jussa and Fonollosa, ACL 2016.
Compression of Neural Machine Translation Models via Pruning . See et al., COLING 2016.
Sequence-Level Knowledge Distillation . Kim and Rush., EMNLP 2016.
Deep Recurrent Models with Fast Forward Connections for Neural Machine Translation . Zhou et al, TACL 2016.
Guided Alignment Training for Topic-Aware Neural Machine Translation . Chen et al., arXiv:1607.01628.
Linguistic Input Features Improve Neural Machine Translation . Senrich et al., arXiv:1606.02892
声明
OpenNMT 的实现使用了以下项目的代码:
Andrej Karpathy 的 char-rnn:https://github.com/karpathy/char-rnn
Wojciech Zaremba 的 LSTM:https://github.com/wojzaremba/lstm
Element RNN 库:https://github.com/Element-Research/rnn