数据集
- 训练集1:WMT14 Europarl corpus, parallel corpus German-English
- 训练集2:WMT14 Europarl corpus, parallel corpus French-English
- 训练集3:IWSLT17 train.tags.de-en.de and train.tags.de-en.en
- 验证集: WMT06 Shared-Task Development data 英 德 法
- 测试集: WMT06 Shared-Task Test data 英 德 法
数据集情况统计
数据集名称 | 数据量 | 语言 | 领域 |
---|---|---|---|
WMT14 | 190W | 德语→英语 | 欧洲议会平行语料库 |
WMT14 | 200W | 法语→英语 | 欧洲议会平行语料库 |
IWSLT | 22W | 德语→英语 | TED口语翻译 |
验证集 | 0.2W | 英、德、法 | - |
测试集 | 0.3W | 英、德、法 | - |
WMT14网址: http://www.statmt.org/europarl/.
IWSLT17网址: http://www.statmt.org/europarl/.
测试集和验证集网址: http://www.statmt.org/wmt06/shared-task/.
开发环境
Linux CentOS
python3.7
GPU版本的PyTorch1.3.0
数据处理工具
分词使用mosesdecoder: https://github.com/moses-smt/mosesdecoder.
BPE分词使用subword-nmt:https://github.com/rsennrich/subword-nmt
Transformer使用Fairseq0.6.2进行训练和解码:https://github.com/pytorch/fairseq/tree/v0.6.2
数据处理流程
首先,需要准备好WMT、IWSLT以及测试集和验证集的双语平行语料库,即需要去除原始文件中的“杂质”。其中WMT的数据整体质量还不错,而来自IWSLT17的数据集需要进行去HTML标签的处理。这里需要注意,有些标签的内容有保留价值,有些标签的内容没有保留价值。比如URL的标签就可以连同其内容一起去掉,而标题的标签就可以保留其内容。
分词
使用Mosesdecoder中的tokenizer.perl将语料库中的单词和标点符合分开来,分词的具体使用方法可以参考其他博客。
推荐博客https://blog.csdn.net/weixin_38937984/article/details/103995209
加目标语标签
该标签表明了源语言句子所要翻译到的目标语言,网络通过训练至收敛后,通过在待翻译的句子开头加入目标语标签,模型便能将我们源语言翻译到我们想要翻译到的目标语言。可以使用Python脚本来实现,也可以使用Linux shell脚本来实现。
BPE切分子词
切分子词的目的是为了减少词表的大小,词表过大的话,训练过程中就会出现一些问题。
推荐博客https://blog.csdn.net/weixin_38937984/article/details/103995209
关于训练、解码和测试
请参考Fairseq框架的使用手册https://fairseq.readthedocs.io/en/latest/?badge=latest
接口封装
需要深入Fairseq interactive.py文件进行修改代码,将代码封装为两个接口,一个是加载模型的接口load_model(),一个是翻译的接口translate()
代码实现
本人已经在Git上开源项目代码
其中包含数据的处理脚本、fairseq训练脚本、fairseq解码测试脚本。
欢迎大家找我交流
地址:老虎的毕设