python - openNMT 翻译命令产生垃圾结果
问题描述
我正在运行以下命令
onmt_translate -model demo-model_step_100000.pt -src data/src-test.txt -output pred.txt -replace_unk -verbose
文件“pred.txt”中的结果与为翻译给出的源句完全不同
语料库大小为 3000 个平行句子。预处理命令是 -
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
培训在演示模型上
onmt_train -data EMMT/demo -save_model demo-model
解决方案
即使在“可见”数据上也无法获得体面的翻译,因为:
- 你的模型只训练了太少的句子对(3000 真的太少了,无法训练一个好的模型)。您只能使用 4M+ 的语料库获得一些或多或少有意义的翻译(并且越多越好)。
onmt_train -data EMMT/demo -save_model demo-model
训练一个小型(2 层 x 500 个神经元)单向 RNN 模型(参见文档)。建议使用transformer
模型类型以获得最先进的结果。
常见问题解答说明了如何运行变压器模型训练:
Transformer 模型对超参数非常敏感。为了有效地运行它,您需要设置一堆模仿 Google 设置的不同选项。我们已经确认以下命令可以复制他们的 WMT 结果。
python train.py -data /tmp/de2/data -save_model /tmp/extra \ -层 6 -rnn_size 512 -word_vec_size 512 -transformer_ff 2048 -heads 8 \ -encoder_type 转换器 -decoder_type 转换器 -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
:使用标签平滑损失。
推荐阅读
- vue.js - 当设备将方向更改为横向时,如何防止我的应用旋转?
- angular - 如何在 Angular 中的 DataSource 对象中将路径设置为 DataSource 属性名称 - EJ2 树视图
- python-3.x - python中的随机函数在圆圈内生成随机对
- typescript - Typescript 重载函数签名中的错误
- java - 自定义 DiscoveryClient 用于发现 Spring Cloud Config 服务器
- c++ - C++ 类“请求和标识符”中的 int 方法
- flutter - 如何仅从颤动的字符串中提取数字?
- sql - SQL Server 代理作业 - 删除表并替换为 .bak 文件的脚本
- python - 使用 PIPE 从主进程读取子进程的标准输出导致子进程死亡
- assembly - 我的程序集冒泡排序出了什么问题?