非自回归机器翻译(NAT)实战指南:在 fairseq 中复现 Levenshtein Transformer 与 Mask-Predict 等五类模型

非自回归机器翻译(NAT)实战指南:在 fairseq 中复现 Levenshtein Transformer 与 Mask-Predict 等五类模型 非自回归机器翻译NAT实战指南在 fairseq 中复现 Levenshtein Transformer 与 Mask-Predict 等五类模型【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm导读本文以 fairseq 官方nonautoregressive_translation示例为骨架完整讲解如何在 WMT14 英德En-De数据集上训练与推理五类非自回归Non-Autoregressive, NAT机器翻译模型Levenshtein TransformerLevT、Non-Autoregressive TransformerNAT、迭代精炼版 iNAT、Insertion TransformerInsT与 Mask-PredictCMLM。读完本文你将掌握translation_lev任务、nat_loss准则、--noise噪声注入机制以及iterative_refinement_generator迭代解码器的完整用法并理解其底层源码实现能够直接复现论文结果。背景为什么需要非自回归翻译传统自回归Autoregressive, AT翻译逐词从左到右解码每一步都依赖上一步输出生成 N 个词需要 N 次串行前向计算推理延迟高。非自回归模型的目标是并行生成整句翻译一次性输出全部目标 token或在少量迭代轮数内逐步精炼从而大幅降低解码时延。fairseq 在 examples/nonautoregressive_translation/README.md 中提供了 Levenshtein TransformerGu et al., 2019的完整复现指引并额外内置了四类经典 NAT 模型的参考实现模型论文核心思想Levenshtein Transformer (LevT)Gu et al., 2019以删除/插入两类编辑操作迭代精炼译文NATGu et al., 2017长度预测 一次性并行生成iNATLee et al., 2018并行生成后迭代精炼训练中引入 DAEInsertion Transformer (InsT)Stern et al., 2019通过插入操作逐步构造序列Mask-Predict (CMLM)Ghazvininejad et al., 2019条件掩码语言模型 迭代解码所有模型共享同一套任务translation_lev与损失准则nat_loss差异主要体现在模型架构与训练时注入的噪声类型上这使得对比实验非常方便。数据集准备WMT14 英德与知识蒸馏下载与预处理首先按照翻译任务的数据准备说明下载并预处理 WMT14 En-De 数据集。关键一步在运行fairseq-preprocess时必须传入--joined-dictionary让源语言英与目标语言德共享同一个词表——这是 NAT 系列模型的常见要求因为许多 NAT 方法如 LevT、InsT需要将源 token 直接映射到目标 token 的编辑操作上。知识蒸馏Knowledge DistillationNAT 模型在训练中缺乏逐词依赖的自纠正能力直接从原始平行语料学习往往难以生成高质量译文。遵循 Gu et al. 2019 的做法从自回归模型进行知识蒸馏可以显著简化训练数据的分布有时甚至对 NAT 模型能否学到良好翻译起到决定性作用。蒸馏流程很简单先在相同数据上按标准 Transformer 训练指引训练一个自回归模型用该模型对训练集解码得到一份蒸馏数据集通常称为wmt14_en_de_distill供 NAT 模型训练使用。官方也提供了预处理好的原始数据集与蒸馏数据集下载后需自行调用fairseq-preprocess完成二值化binarized处理。训练非自回归模型训练 NAT 模型统一使用translation_lev任务与nat_loss准则通过--noise参数指定施加在目标句上的输入噪声。从源码看translation_lev.py 中--noise的合法取值为random_delete、random_mask、no_noise、full_mask四种并在 inject_noise 方法中按取值分别执行随机删除、随机掩码、无噪声、全掩码操作作为解码器的输入prev_target。默认配置运行的是 Levenshtein Transformer--noiserandom_delete以下命令在二值化蒸馏数据上训练 LevTfairseq-train \ >fairseq-train \ >fairseq-train \ >fairseq-train \ >fairseq-train \ >fairseq-generate \ >article{gu2019levenshtein, title{Levenshtein Transformer}, author{Gu, Jiatao and Wang, Changhan and Zhao, Jake}, journal{arXiv preprint arXiv:1905.11006}, year{2019} }延伸阅读完整训练脚本汇总nonautoregressive_translation/scripts.md模型实现levenshtein_transformer.py损失准则nat_loss.py噪声注入任务translation_lev.py迭代精炼生成器iterative_refinement_generator.py【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考