机器之心报道


nlp所有框架(斯坦福的NMT代码库和哈佛的NMT工具包)(1)

斯坦福大学NLP组开放神经机器翻译代码库

发布地址:http://nlp.stanford.edu/projects/nmt/

nlp所有框架(斯坦福的NMT代码库和哈佛的NMT工具包)(2)

参与成员:

代码库

代码库: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 分。我们证明了我们的字符模型不仅能成功地学习生成形式很好的捷克语词(这是一种词汇复杂高度屈折的语言),还能为英语源词建立了正确的表征。

代码库:https://github.com/lmthang/nmt.hybrid


预处理的数据


训练集(包含 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》中使用了这个数据集。


训练集(包含 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.


训练集(包含 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


我们训练了 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


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


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)。

nlp所有框架(斯坦福的NMT代码库和哈佛的NMT工具包)(3)

OpenNMT 可以像主要的翻译服务提供商的已投入生产的系统那样使用。该系统简单易用,易于扩展,同时也能维持效率和当前最佳的翻译准确度。

其特性包括:

安装

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/)的出色工作。特别地,下面是一些实现的功能:

声明

OpenNMT 的实现使用了以下项目的代码:

,