首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenNMT-py较低的BLEU分数为翻译到德语

OpenNMT-py较低的BLEU分数为翻译到德语
EN

Stack Overflow用户
提问于 2017-07-28 07:00:18
回答 1查看 939关注 0票数 2

我在Europarl上训练过从英语到德语,从意大利语到德语的OpenNLP-py模型,BLEU的分数很低:英语->德语8.13分,意大利语->德语4.79分。

由于我还不是NNs方面的专家,所以我采用了库提供的默认配置。在这两种情况下,13次训练花费了大约20个小时。在这两种情况下,我使用80%的数据集进行培训,10%用于验证,10%用于测试。

下面是我用来创建意大利->德国模型的命令,我对另一个模型使用了类似的命令序列。有人能就如何提高我的模型的有效性给我提供任何建议吗?

代码语言:javascript
复制
# $ wc -l Europarl.de-it.de
# 1832052 Europarl.de-it.de

head -1465640 Europarl.de-it.de > train_de-it.de
head -1465640 Europarl.de-it.it > train_de-it.it

tail -n 366412 Europarl.de-it.de | head -183206 > dev_de-it.de
tail -n 366412 Europarl.de-it.it | head -183206 > dev_de-it.it

tail -n 183206 Europarl.de-it.de > test_de-it.de
tail -n 183206 Europarl.de-it.it > test_de-it.it

perl tokenizer.perl -a -no-escape -l de < ../data/train_de-it.de > ../data/train_de-it.atok.de
perl tokenizer.perl -a -no-escape -l de < ../data/dev_de-it.de > ../data/dev_de-it.atok.de
perl tokenizer.perl -a -no-escape -l de < ../data/test_de-it.de > ../data/test_de-it.atok.de

perl tokenizer.perl -a -no-escape -l it < ../data/train_de-it.it > ../data/train_de-it.atok.it
perl tokenizer.perl -a -no-escape -l it < ../data/dev_de-it.it > ../data/dev_de-it.atok.it
perl tokenizer.perl -a -no-escape -l it < ../data/test_de-it.it > ../data/test_de-it.atok.it

python3 preprocess.py \
-train_src ../data/train_de-it.atok.it \
-train_tgt ../data/train_de-it.atok.de \
-valid_src ../data/dev_de-it.atok.it \
-valid_tgt ../data/dev_de-it.atok.de \
-save_data ../data/europarl_de_it.atok.low \
-lower

python3 train.py \
-data ../data/europarl_de_it.atok.low.train.pt \
-save_model ../models_en_de/europarl_it_de_models \
-gpus 0
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-28 08:01:54

您可以在训练浪漫多路模型英语-德语WMT15 NMT发动机训练上得到很多提示。其主要思想是在一个级联的XXYY训练语料库上运行BPE标记化,然后用学习的BPE模型对训练语料库进行标记化。

字节对编码标记化对德语应该是有益的,因为它的复合,该算法有助于将单词分割成子词单位。诀窍是,您需要在包含源和目标的单个训练语料库上训练BPE模型。请参阅让·塞内拉特的评论

BPE模型应该只对训练语料库进行训练--理想情况下,您可以为源和目标训练一个单一的模型,以便该模型能够轻松地将相同的单词片段从源翻译到目标。因此,我将源和目标训练语料库连接起来--然后对它进行一次训练,然后在这个单一的语料库上学习一个BPE模型,然后用于源和目标中的测试/有效/训练语料库的标记化。

另一个想法是使用-case_feature进行标记。这也是一个好主意,所有的语言,字母可以有不同的情况。请参阅简的评论

通常,对于几乎所有语言(用大小写)来说,使用-case_feature是一个好主意--并且在源中处理和呈现目标大小写(例如,所有大写/小写或大写单词,.)时显示出良好的性能。

为了提高MT的质量,您也可以尝试

  1. 获得更多的语料库(例如WMT16语料库)
  2. 使用领域内培训进行调优
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45366863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档