ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

使用 fairseq 复现 Scaling NMT(Ott et al., 2018):WMT‘16 En-De 大模型 Transformer 的端到端训练与评测指南

使用 fairseq 复现 Scaling NMT(Ott et al., 2018):WMT‘16 En-De 大模型 Transformer 的端到端训练与评测指南 使用 fairseq 复现 Scaling NMTOtt et al., 2018WMT16 En-De 大模型 Transformer 的端到端训练与评测指南【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm导读本文基于 kosmos-2/fairseq/examples/scaling_nmt/README.md 整理完整复现论文Scaling Neural Machine TranslationOtt et al., 2018在 WMT16 English-German 上的实验流程涵盖数据解压、joined dictionary 预处理、Big Transformer 训练、checkpoint 平均、beam 解码以及 tokenized BLEU 与 sacrebleu 两种评测口径。文中所有命令均以仓库内实际存在的脚本average_checkpoints.py、compound_split_bleu.sh、sacrebleu.sh与模型注册定义transformer_legacy.py为据读者可据此在自己的 GPU 环境上从零训练、解码并得到可比的 BLEU 结果。一、背景为什么需要 Scaling NMTScaling Neural Machine TranslationOtt et al., 2018的核心发现是把 Transformer 的训练批量做大、配合更高的学习率可以显著提升翻译质量。论文在 Attention Is All You NeedVaswani et al., 2017的 Big Transformer 架构基础上通过增大 batch size相当于同时用 128 张 GPU 训练获得更优的 WMT14 En-Fr 与 WMT16 En-De 结果。本仓库中的 fairseq 代码位于 kosmos-2/fairseq/即用于复现该论文的官方实现examples/scaling_nmt目录提供完整的操作指引。与单机小 batch 训练相比这套流程的关键差异在于使用--update-freq梯度累积模拟大规模训练大 batch 下把学习率从 0.0005 提高到 0.001评测阶段必须施加与论文一致的技巧checkpoint 平均、length penalty、compound splitting否则 BLEU 不可比。二、预训练模型与复现入口2.1 官方发布的预训练模型原文档提供两张可直接下载复现的模型卡片ModelDescriptionDatasettransformer.wmt14.en-frTransformerOtt et al., 2018WMT14 English-Frenchtransformer.wmt16.en-deTransformerOtt et al., 2018WMT16 English-German这两个模型名同时也被注册在 fairseq 的 hub models 中。查看 transformer_legacy.py 的hub_models方法可以看到transformer.wmt14.en-fr对应wmt14.en-fr.joined-dict.transformer.tar.bz2transformer.wmt16.en-de对应wmt16.en-de.joined-dict.transformer.tar.bz2且 En-Fr 模型在加载时声明了tokenizer: moses、bpe: subword_nmt的预处理方式。2.2 从零训练的完整链路本文重点讲解在 WMT16 En-De 上从零训练一个新模型整条链路分为四步解压 Google 提供的 WMT16 En-De 预处理数据用fairseq-preprocess建立 joined dictionary 并二值化用fairseq-train训练 Big Transformer用fairseq-generate checkpoint 平均 BLEU 脚本评测。三、数据准备解压与 joined dictionary 预处理3.1 解压 WMT16 En-De 数据首先获取 Google 提供的预分词 WMT16 En-De 数据BPE 32k解压到工作目录TEXTwmt16_en_de_bpe32k mkdir -p $TEXT tar -xzvf wmt16_en_de.tar.gz -C $TEXT解压后应得到train.tok.clean.bpe.32000、newstest2013.tok.bpe.32000、newstest2014.tok.bpe.32000等文件分别作为训练、验证valid与测试test前缀。3.2 用 joined dictionary 预处理器fairseq-preprocess \ --source-lang en --target-lang de \ --trainpref $TEXT/train.tok.clean.bpe.32000 \ --validpref $TEXT/newstest2013.tok.bpe.32000 \ --testpref $TEXT/newstest2014.tok.bpe.32000 \ --destdir>fairseq-train \ >python scripts/average_checkpoints \ --inputs /path/to/checkpoints \ --num-epoch-checkpoints 10 \ --output checkpoint.avg10.pt通常平均最后 5~10 个 checkpoint 效果较好具体数量需根据训练时长调整。从源码看该脚本的实现要点average_checkpoints.pyaverage_checkpoints()逐个加载 checkpoint通过params_keys校验所有 checkpoint 的参数键必须完全一致否则抛出KeyError对浮点参数做逐元素累加后除以模型数num_modelsdiv_非浮点参数则做整除//支持--num-update-checkpoints按 update 号筛选 checkpoint正则checkpoint_\d_(\d)\.pt/checkpoint(\d)\.pt分别匹配 update-based 与 epoch-based 命名average_checkpoints.py。5.2 第二步beam 解码fairseq-generate \ >bash scripts/compound_split_bleu.sh gen.out # BLEU4 29.29, 60.3/35.0/22.8/15.3 (BP1.000, ratio1.004, syslen64763, reflen64496)该脚本先检查gen.out最后一行是否包含 BLEU否则提示 not done generating然后用grep ^H抽取假设、grep ^T抽取参考分别用 perl 正则s{(\S)-(\S)}{$1 ##AT##-##AT## $2}g在连字符两侧插入空格最后调用fairseq-score --sys $SYS --ref $REF计算 tokenized BLEUcompound_split_bleu.sh。原文档明确警告这种 inflated虚高分数不适合与未使用该技巧的工作比较。方式 Bsacrebleu detokenized BLEU推荐bash scripts/sacrebleu.sh wmt14/full en de gen.out # BLEUcase.mixedlang.en-denumrefs.1smooth.exptest.wmt14/fulltok.13aversion.1.4.3 28.6 59.3/34.3/22.1/14.9 (BP 1.000 ratio 1.016 hyp_len 63666 ref_len 62688)scripts/sacrebleu.sh 会先检查sacremoses是否安装pip install sacremoses然后把gen.out中的H-行按序号排序、抽取第 3 列去除H-序号与得分经sacremoses detokenize后送入sacrebleu --test-set $TESTSET --language-pair ${SRCLANG}-${TGTLANG}计算 detokenized BLEU。论文官方复现的 sacrebleu 分数为 28.6详见原文档输出示例。评测结论论文建议优先报告 sacrebleu 分数compound-split tokenized BLEU 仅用于与历史上使用同一技巧的工作对齐。六、从源码验证一条命令到模型注册的调用链为了帮助读者理解命令背后的执行路径这里梳理fairseq-train与架构参数的关系fairseq-train入口在 fairseq_cli/train.pyfairseq-generate入口在 fairseq_cli/generate.pyfairseq-preprocess入口在 fairseq_cli/preprocess.py--arch参数通过register_model_architecture(transformer, ...)装饰器注册transformer_legacy.pyfairseq启动时会按名称查找对应的架构函数并填充默认超参模型本体TransformerModel继承自TransformerModelBase构造时将 argparse 的 namespace 通过TransformerConfig.from_namespace(args)转为 dataclass 配置transformer_legacy.py因此命令行覆盖的值会优先于架构默认值。这意味着本文表格中列出的所有 Big 架构默认值都可以在命令行直接覆盖例如想改为 pre-norm 的 tensor2tensor 风格直接指定--arch transformer_wmt_en_de_big_t2t即可无需改动任何代码。七、复现注意事项小结数据一致性务必使用 Google 提供的 WMT16 En-De BPE 32k 预处理数据词表限制 32768joined dictionary硬件前提--fp16需要 CUDA 9.1 与 VoltaV100及以上 GPU若硬件不支持可去掉--fp16并相应调低--max-tokens大 batch 是论文的灵魂8 GPU 环境下加--update-freq 16并调高--lr 0.001才能逼近论文 128 GPU 的设定评测必须成套复现checkpoint 平均5~10 个→ beam 4 lenpen 0.6 → 再选 BLEU 口径报告分数时注明使用的是 sacrebleu 还是 compound-split tokenized BLEU脚本位置本文使用的三个评测脚本均位于 kosmos-2/fairseq/scripts/ 目录下average_checkpoints.py、compound_split_bleu.sh、sacrebleu.sh命令中的scripts/前缀需按实际仓库根目录调整。八、引用若在研究中使用了本仓库的 scaling NMT 复现流程可引用原论文inproceedings{ott2018scaling, title {Scaling Neural Machine Translation}, author {Ott, Myle and Edunov, Sergey and Grangier, David and Auli, Michael}, booktitle {Proceedings of the Third Conference on Machine Translation (WMT)}, year 2018, }延伸阅读fairseq 整体使用文档kosmos-2/fairseq/docs/getting_started.rstTransformer 模型架构与所有注册变体kosmos-2/fairseq/fairseq/models/transformer/transformer_legacy.py训练/生成/预处理 CLI 入口kosmos-2/fairseq/fairseq_cli/本指南原始出处kosmos-2/fairseq/examples/scaling_nmt/README.md【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表