openNMT转换命令产生垃圾结果

如何解决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 adamdecay_method noamwarmup_steps 8000:使用特殊学习 率。

batch_type tokensnormalization tokensaccum_count 4:批处理和 根据记号而不是句子进行归一化。计算 基于四个批次的渐变。

label_smoothing 0.1:使用标签平滑损失。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?