FairSeq训练翻译模型时基于BLEU早停的参数报错及M2M100微调问题
解决FairSeq 0.10.2中BLEU早停及M2M100微调的报错问题
问题1:fairseq-train: error: unrecognized arguments: --eval-bleu ...
原因
FairSeq 0.10.2版本过旧,--eval-bleu、--eval-bleu-args等系列参数是在0.11.0及后续版本才正式引入的,当前版本不支持这些参数。
解决方案
方案1:升级FairSeq版本(推荐)
执行命令升级到兼容torch 1.10.1的版本:pip install fairseq>=0.11.0升级后即可正常使用
--eval-bleu系列参数开启BLEU评估与早停。方案2:不升级版本,手动实现BLEU早停
- 训练时开启定期验证与 checkpoint 保存:
fairseq-train data_bin \ --your-existing-args \ --validate-after-updates 1000 \ --save-interval-updates 1000 \ --keep-best-checkpoints 5 - 每次验证后,使用FairSeq自带的BLEU计算脚本评估验证集结果:
fairseq-generate data_bin \ --path checkpoints/checkpoint_last.pt \ --batch-size 32 --beam 5 > valid_output.txt grep ^H valid_output.txt | cut -f3- > valid_preds.txt grep ^T valid_output.txt | cut -f2- > valid_target.txt fairseq-score --sys valid_preds.txt --ref valid_target.txt - 编写简单Shell/Python脚本监控BLEU得分,当连续3-5次验证无提升时,终止训练进程。
- 训练时开启定期验证与 checkpoint 保存:
问题2:微调M2M100时出现KeyError: 'bleu'
原因
- 若未升级FairSeq版本,M2M100的多语言任务默认未注册BLEU指标;
- 若已升级,可能是训练命令中未正确开启BLEU评估参数,或数据bin生成不规范导致验证集缺失。
解决方案
- 先确保FairSeq版本已升级到0.11.0+;
- 使用完整的M2M100微调命令(以中英翻译为例),确保包含所有BLEU评估参数:
fairseq-train data_bin \ --arch m2m_100_418M \ --encoder-langtok "src" --decoder-langtok \ --langs "en,zh" \ --task translation_multi_simple_epoch \ --eval-bleu \ --eval-bleu-detok moses \ --eval-bleu-remove-bpe "sentencepiece" \ --eval-bleu-args '{"beam":5,"max_len_a":1.2,"max_len_b":10}' \ --criterion label_smoothed_cross_entropy \ --label-smoothing 0.1 \ --optimizer adam --adam-betas '(0.9,0.98)' \ --lr 5e-4 --lr-scheduler inverse_sqrt \ --warmup-updates 4000 \ --max-update 20000 \ --patience 5 \ --save-dir checkpoints/m2m100_zh_en \ --fp16 - 检查数据bin目录是否包含
valid.en、valid.zh等验证集文件,若缺失需重新运行fairseq-preprocess生成正确的数据bin; - 若仍报错,可手动在训练代码中注册BLEU指标:在任务类的
build_model方法中添加BLEU评估器的初始化逻辑。
内容的提问来源于stack exchange,提问作者Nikhil Jaiswal
相关产品推荐
相关产品推荐

