我目前正在尝试使用 yaml 脚本训练西班牙语到英语的模型。我的数据集非常大,但对于初学者来说,我试图让一个 10,000 个训练集和 1000-2000 个验证集首先运行良好。然而,在尝试了几天之后,我认为我需要帮助,因为我训练的越多,我的验证准确度就会下降,而我的训练准确度会上升。
我的数据来自 ModelFront 的 ES-EN 冠状病毒评论数据集,可在此处找到https://console.modelfront.com/#/evaluations/5e86e34597c1790017d4050a。我发现平行句子非常准确。我正在使用数据集中的前 10,000 条平行线,跳过包含任何数字的句子。然后我将接下来的 1000 或 2000 用于我的验证集和接下来的 1000 用于我的测试集,只包含没有数字的句子。查看数据时,它看起来很干净,并且句子在各自的行中相互排列。
然后我使用句子来构建词汇模型。使用 spm_train 命令,我输入我的英语和西班牙语训练集,在参数中用逗号分隔,并输出一个 esen.model。另外,我选择使用 unigrams 和 16000 的词汇量
至于我的 yaml 配置文件:这是我指定的
我的源和目标训练数据(我为英语和西班牙语提取的 10,000 个在转换 [] 中带有“sentencepiece”)
我的源和目标验证数据(英语和西班牙语为 2,000 个,转换中带有“sentencepiece”[])
我的 Src 和目标词汇模型的词汇模型 esen.model
编码器:rnn 解码器:rnn 类型:LSTM 层数:2 bidir:true
优化:亚当学习率:0.001
训练步数:5000 有效步数:1000
其他记录数据。
使用 onmt_translate 开始训练后,我的训练准确度从 7.65 开始,到 5000 步结束时进入低 70 秒。但是,在那个时间范围内,我的验证准确度从 24 变为 19。
然后我使用 bleu 对我的测试集进行评分,其 BP 约为 0.67。
我注意到,在以 1 的学习率尝试 sgd 之后,我的验证准确率不断提高,但最终困惑度开始回升。
我想知道我是否做错了什么会导致我的验证准确度下降而训练准确度上升?我只是需要训练更多吗?任何人都可以推荐其他任何东西来改进这个模型吗?我已经盯着它看了几天。任何事情都值得赞赏。谢谢。
!spm_train --input=data/spanish_train,data/english_train --model_prefix=data/esen --character_coverage=1 --vocab_size=16000 --model_type=unigram
## Where the samples will be written
save_data: en-sp/run/example
## Where the vocab(s) will be written
src_vocab: en-sp/run/example.vocab.src
tgt_vocab: en-sp/run/example.vocab.tgt
## Where the model will be saved
save_model: drive/MyDrive/ESEN/model3_bpe_adam_001_layer2/model
# Prevent overwriting existing files in the folder
overwrite: False
# Corpus opts:
data:
taus_corona:
path_src: data/spanish_train
path_tgt: data/english_train
transforms: [sentencepiece, filtertoolong]
weight: 1
valid:
path_src: data/spanish_valid
path_tgt: data/english_valid
transforms: [sentencepiece]
skip_empty_level: silent
src_subword_model: data/esen.model
tgt_subword_model: data/esen.model
# General opts
report_every: 100
train_steps: 5000
valid_steps: 1000
save_checkpoint_steps: 1000
world_size: 1
gpu_ranks: [0]
# Optimizer
optim: adam
learning_rate: 0.001
# Model
encoder_type: rnn
decoder_type: rnn
layers: 2
rnn_type: LSTM
bidir_edges: True
# Logging
tensorboard: true
tensorboard_log_dir: logs
log_file: logs/log-file.txt
verbose: True
attn_debug: True
align_debug: True
global_attention: general
global_attention_function: softmax
onmt_build_vocab -config en-sp.yaml -n_sample -1
onmt_train -config en-sp.yaml
Step 1000/ 5000; acc: 27.94; ppl: 71.88; xent: 4.27; lr: 0.00100; 13103/12039 tok/s; 157 sec
Validation perplexity: 136.446
Validation accuracy: 24.234
...
Step 4000/ 5000; acc: 61.25; ppl: 5.28; xent: 1.66; lr: 0.00100; 13584/12214 tok/s; 641 sec
Validation accuracy: 22.1157
...