实战指南:训练、解码与评估)
基于 fairseq 的多样机器翻译混合专家模型translation_moe实战指南训练、解码与评估【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm本文围绕 fairseq 仓库中的translation_moe任务对应论文 Mixture Models for Diverse Machine Translation: Tricks of the Trade, Shen et al., 2019。一、背景为什么机器翻译需要专家混合物标准序列到序列模型针对每个源句只输出一个最佳译文但现实中的翻译往往有多个同样合理的答案例如同一句话可以有多种不同的措辞、句式与术语选择。translation_moe通过把 Transformer 扩展为混合专家Mixture of Experts, MoE模型让一个模型内部包含 K 个专家解码器每个专家倾向于产生风格不同的译文。训练时采用在线责任分配online responsibility assignment即每个训练样本不是预先硬性绑定到某个专家而是根据各专家在该样本上的表现动态分配责任同时所有专家共享大部分参数shared parameterization只通过一个轻量的门控机制加以区分从而避免 K 个独立模型带来的参数量与训练成本翻倍。在本文所在仓库中该任务位于 examples/translation_moe/translation_moe_src/translation_moe.py核心实现由三个模块构成translation_moe.py注册translation_moe任务负责专家指示符 token、责任分配与前向/推理流程mean_pool_gating_network.py均值池化门控网络为学习先验learned prior变体提供专家选择概率logsumexp_moe.py软 MoE 专用的 LogSumExp 前向 / 后向传播。配套的评分脚本为 score.py用于计算两两 BLEU 与多参考 oracle BLEU。二、四种 MoE 变体--method 参数任务通过--method选择 MoE 变体合法的取值在源码中被定义为ChoiceEnum([sMoElp, sMoEup, hMoElp, hMoEup])见 translation_moe.py含义如下--methodhard / softprior含义hMoElphard硬选择learned学习先验每个样本只由一个专家负责专家先验由门控网络学习hMoEuphard硬选择uniform均匀先验每个样本只由一个专家负责先验固定为均匀分布sMoElpsoft软混合learned学习先验每个样本由所有专家加权混合权重由门控网络学习sMoEupsoft软混合uniform均匀先验每个样本由所有专家加权混合先验均匀在 translation_moe.py 的__init__中四种取值被映射为两个布尔开关uniform_prior为True时*up变体直接使用均匀先验不依赖门控网络hard_selection为True时h*变体在训练时对责任分布做 argmax 硬分配为False时s*变体按责任权重做软加权。由此可以推断hMoEup硬选择 均匀先验是唯一既不需要门控网络、又不需要学习先验的变体因此也是method参数的默认值源码默认methodhMoEup。三、数据准备WMT17 En-De 与联合词典本示例在 WMT17 英语-德语En-De数据集上复现论文结果。数据准备分两步下载并预处理原始语料。运行 examples/translation/prepare-wmt14en2de.sh完整流程详见 examples/translation/README.md 中 WMT14 English to German (Convolutional) 一节cd examples/translation/ bash prepare-wmt14en2de.sh cd ../..该脚本默认采用 Vaswani et al. (2017) 的数据划分并额外加入 WMT17 的 news-commentary-v12 数据产出目录examples/translation/wmt17_en_de若想只使用 WMT14 数据以复现 Gehring et al. (2017) 的结果可改为bash prepare-wmt14en2de.sh --icml17。二值化binarize。关键点在于必须学习联合词典即给fairseq-preprocess传入--joined-dictionary选项让源语言与目标语言共享同一个词表这也是--share-all-embeddings能生效的前提TEXTexamples/translation/wmt17_en_de fairseq-preprocess \ --source-lang en --target-lang de \ --trainpref $TEXT/train --validpref $TEXT/valid --testpref $TEXT/test \ --destdir>fairseq-train --ddp-backendlegacy_ddp \ >fairseq-generate>wget dl.fbaipublicfiles.com/fairseq/data/wmt14-en-de.extra_refs.tok6.2 逐专家生成译文对每个专家分别运行fairseq-interactive实时应用 BPE 并合并输出BPE_CODEexamples/translation/wmt17_en_de/code for EXPERT in $(seq 0 2); do \ cat wmt14-en-de.extra_refs.tok \ | grep ^S | cut -f 2 \ | fairseq-interactive>python examples/translation_moe/score.py --sys wmt14-en-de.extra_refs.tok.gen.3experts --ref wmt14-en-de.extra_refs.tok # pairwise BLEU: 48.26 # #refs covered: 2.11 # multi-reference BLEU (leave-one-out): 59.46该结果对应论文 Table 7 的第 3 行。score.py的核心指标与计算方式见 score.py 的load_sys/pairwise/multi_ref函数指标含义与算法pairwise BLEU把所有专家的假设两两互为 ref/hypo 计算语料 BLEUpairwise函数中对同一源句的 i≠j 组合做全配对。数值越低说明专家间差异越大、多样性越好#refs covered平均每个源句被多少个不同参考译文覆盖对每个假设找最相似的参考统计命中集合大小再求平均见multi_ref中ref_cnt / len(refs)数值越高说明译文覆盖的参考多样性越好multi-reference BLEU (leave-one-out)多参考语料 BLEU 的留一平均对 m 个参考逐一留出用剩余参考评估全部假设衡量整体译文质量与参考分布的贴合程度score.py还支持只给--sys输出 pairwise BLEU、只给--ref计算参考之间的ref pairwise BLEU与multi-reference BLEU (leave-one-out)用于设定多样性上界以及--output输出格式化合并文件方便人工阅读。七、配置参数速查表TranslationMoEConfig见 translation_moe.py在继承标准TranslationConfig的基础上新增了以下参数参数默认值说明--methodhMoEupMoE 变体sMoElp/sMoEup/hMoElp/hMoEup--num-experts3专家数量 K--mean-pool-gating-networkFalse使用均值池化门控网络*lp变体必需--mean-pool-gating-network-dropout0门控网络 dropout缺省复用全局--dropout--mean-pool-gating-network-encoder-dim0门控输入维度缺省取encoder_embed_dim--gen-expert0生成时使用的专家编号--sentence-avg继承自optimization.sentence_avg损失归一化方式按句或按 token使用*lp学习先验变体时必须提供门控网络使用*up均匀先验变体时无需门控网络。若在均匀先验下仍传--mean-pool-gating-network从源码逻辑看该网络不会被构造训练时责任只由专家自身表现决定。八、注意事项与常见问题插件可见性--user-dir examples/translation_moe/translation_moe_src必须出现在所有fairseq-train/fairseq-generate/fairseq-interactive命令中否则会报task translation_moe 未注册类错误。联合词典是硬前提--joined-dictionary与--share-all-embeddings配套保证expert_i指示符 token 在共享词表中只有一个 ID。--ddp-backendlegacy_ddp示例命令沿用 legacy DDP 后端与现代ddp后端存在差异升级 fairseq 版本时需自行验证兼容性。评估配置与训练一致生成/评估时--method、--mean-pool-gating-network、--num-experts必须与训练完全一致否则专家 token 索引与门控网络行为会错位。依赖score.py依赖sacrebleu与numpyBPE 相关流程依赖subword_nmt训练示例中另有fastBPE、sacremoses可用于预处理参见 examples/translation/README.md。九、延伸阅读与复现指引完整论文复现说明与训练/解码/评估命令见本文所依据的 translation_moe/README.md任务与配置源码translation_moe.py门控网络实现mean_pool_gating_network.py软混合梯度实现logsumexp_moe.py评分工具score.py数据预处理脚本与普通翻译示例examples/translation/。引用本文涉及的论文时可使用仓库 README 提供的 BibTeXarticle{shen2019mixture, title {Mixture Models for Diverse Machine Translation: Tricks of the Trade}, author {Tianxiao Shen and Myle Ott and Michael Auli and MarcAurelio Ranzato}, journal {International Conference on Machine Learning}, year 2019, }通过本文的完整流程——联合词典预处理、四种 MoE 变体选择、hMoElp 训练、按专家解码与多参考评估——你可以在本仓库的 fairseq 基础上完整复现多样机器翻译的核心实验并将同一套机制迁移到自己的翻译或生成任务中。【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考