如何解决openNMT转换命令产生垃圾结果
我正在运行以下命令
parent_id
文件'pred.txt'中的结果与翻译所提供的源句子完全不同
语料库大小为3000个平行句子。预处理命令是-
onmt_translate -model demo-model_step_100000.pt -src data/src-test.txt -output pred.txt -replace_unk -verbose
培训是在演示模型上
onmt_preprocess -train_src emmT/01engParallel_onmt.txt -train_tgt emmT/01maiParallel_onmt.txt -valid_src emmT/01engValidation_onmt.txt -valid_tgt emmT/01maiValidation_onmt.txt -save_data emmT/demo
解决方法
即使在“可见”的数据上,也无法获得令人满意的翻译,因为:
- 您的模型受过很少的句子对训练(实际上3000个太少了,培训一个好的模型也太少了)。使用4M +语料库,您只能获得或多或少有意义的翻译(越多越好)。
-
onmt_train -data EMMT/demo -save_model demo-model
训练一个小的(2层x 500个神经元)单向RNN模型(请参阅documentation)。建议使用transformer
模型类型以获得最新的结果。
常见问题解答说明了如何进行变压器模型培训:
变压器型号非常 对超参数敏感。要有效运行它,您需要设置一个 一堆模仿Google设置的不同选项。我们有 确认以下命令可以复制其WMT结果。
python train.py -data /tmp/de2/data -save_model /tmp/extra \ -layers 6 -rnn_size 512 -word_vec_size 512 -transformer_ff 2048 -heads 8 \ -encoder_type transformer -decoder_type transformer -position_encoding \ -train_steps 200000 -max_generator_batches 2 -dropout 0.1 \ -batch_size 4096 -batch_type tokens -normalization tokens -accum_count 2 \ -optim adam -adam_beta2 0.998 -decay_method noam -warmup_steps 8000 -learning_rate 2 \ -max_grad_norm 0 -param_init 0 -param_init_glorot \ -label_smoothing 0.1 -valid_steps 10000 -save_checkpoint_steps 10000 \ -world_size 4 -gpu_ranks 0 1 2 3
以下是每个参数的含义
param_init_glorot
-param_init 0
:正确初始化参数
position_encoding
:为每个嵌入添加正弦位置编码
optim adam
,decay_method noam
,warmup_steps 8000
:使用特殊学习 率。
batch_type tokens
,normalization tokens
,accum_count 4
:批处理和 根据记号而不是句子进行归一化。计算 基于四个批次的渐变。
label_smoothing 0.1
:使用标签平滑损失。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。