2

我在 Europarl 上训练了从英语到德语以及从意大利语到德语的 OpenNLP-py 模型,我的 BLEU 分数非常低:英语 -> 德语为 8.13,意大利语 -> 德语为 4.79。

由于我(还)不是神经网络专家,因此我采用了库提供的默认配置。在这两种情况下,训练 13 个 epoch 大约需要 20 小时。在这两种情况下,我都使用了 80% 的数据集进行训练,10% 用于验证,10% 用于测试。

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

# $ 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
4

1 回答 1

2

您可以在Training Romance Multi-Way 模型Training English-German WMT15 NMT engine中获得很多提示。主要思想是在连接的 XXYY 训练语料库上运行 BPE 标记化,然后使用学习的 BPE 模型对训练语料库进行标记化。

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

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

另一个想法是用 标记化-case_feature。对于字母可以有不同大小写的所有语言来说,这也是一个好主意。见让的评论

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

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

  1. 获取更多语料库(例如WMT16语料库)
  2. 使用域内训练进行调整
于 2017-07-28T08:01:54.493 回答