
unilm 仓库中的 fairseq 机器翻译实战预训练模型加载、IWSLT/WMT 基准训练与多语言翻译【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm本文以infoxlm/fairseq子仓库中的神经机器翻译官方文档 机器翻译 README 为核心系统讲解 fairseq 翻译任务的四条主线通过torch.hub或 CLI 工具加载官方预训练模型、批量推理与 BLEU 评估、从零训练 Transformer / 卷积fconv翻译模型以及多语言联合词典翻译模型的构建。读完后你可以独立完成从数据准备binarize、训练、推理到自动评分的完整机器翻译流水线并理解每个命令行参数在 fairseq 源码中的落点。文档定位与整体工作流该文档是 fairseq 翻译示例目录infoxlm/fairseq/examples/translation/的入口说明与同目录下的四个数据准备脚本配套使用脚本作用prepare-iwslt14.sh下载并预处理 IWSLT14 德英de-en平行语料prepare-wmt14en2de.sh下载并预处理 WMT14/17 英德en-de语料支持--icml17复现原始 ConvS2S 设置prepare-wmt14en2fr.sh下载并预处理 WMT14 英法en-fr语料prepare-iwslt17-multilingual.sh下载 IWSLT17{de,fr}-en多语言语料并训练联合 BPE需要注意一个前置约定文档中的所有cd examples/translation/与fairseq-preprocess、fairseq-train、fairseq-generate等命令都假定你在 fairseq 仓库根目录下执行即本仓库中的infoxlm/fairseq/目录。这些 CLI 入口分别对应 fairseq_cli/train.py、fairseq_cli/generate.py、fairseq_cli/preprocess.py、fairseq_cli/score.py 和 fairseq_cli/interactive.py。整体工作流为三步闭环数据准备准备脚本下载原始平行语料并做分词/BPE 化fairseq-preprocess再将其二值化为可直接喂给训练器的data-bin目录训练fairseq-train按指定--arch与超参训练检查点输出到checkpoints/推理与评估fairseq-generate批量生成译文fairseq-score或sacrebleu计算 BLEU。官方预训练模型清单文档给出了十个官方预训练翻译模型。模型按架构分为两类早期卷积序列到序列模型fconv对应 fconv.py 实现与 Transformer 模型对应 transformer.py 实现模型名架构数据集说明conv.wmt14.en-frConvolutionalGehring et al., 2017, ConvS2SWMT14 英-法附 newstest2014、newstest2012/2013 评测包conv.wmt14.en-deConvolutionalGehring et al., 2017WMT14 英-德附 newstest2014 评测包conv.wmt17.en-deConvolutionalGehring et al., 2017WMT17 英-德附 newstest2014 评测包transformer.wmt14.en-frTransformerOtt et al., 2018WMT14 英-法联合词典joined-dicttransformer.wmt16.en-deTransformerOtt et al., 2018WMT16 英-德联合词典transformer.wmt18.en-deTransformerEdunov et al., 2018WMT18 英-德WMT18 冠军系统多模型集成ensembletransformer.wmt19.en-deTransformerNg et al., 2019WMT19 英-德WMT19 冠军系统联合词典集成transformer.wmt19.de-enTransformerNg et al., 2019WMT19 德-英WMT19 冠军系统transformer.wmt19.en-ruTransformerNg et al., 2019WMT19 英-俄WMT19 冠军系统transformer.wmt19.ru-enTransformerNg et al., 2019WMT19 俄-英WMT19 冠军系统这些模型名并不是凭空约定的字符串——从源码结构看它们是各模型类在hub_models()方法中注册的键。以 Transformer 为例transformer.py#L54-L73 中hub_models()返回的字典包含transformer.wmt16.en-de等条目值即为官方发布包下载地址。也就是说模型名、下载包、评测语料三者的对应关系可以直接在源码中查证。方式一通过 torch.hub 快速交互翻译这是文档推荐的最低门槛用法。由于分词与 BPE 依赖预处理工具先安装额外依赖pip install sacremoses subword_nmt然后通过 PyTorch Hub 交互式翻译import torch # 列出所有可用模型 torch.hub.list(pytorch/fairseq) # [..., transformer.wmt16.en-de, ... ] # 加载在 WMT16 英-德上训练的 Transformer en2de torch.hub.load(pytorch/fairseq, transformer.wmt16.en-de, tokenizermoses, bpesubword_nmt) # 底层模型存放在 *models* 属性下 assert isinstance(en2de.models[0], fairseq.models.transformer.TransformerModel) # 翻译一句话 en2de.translate(Hello world!) # Hallo Welt!源码层面torch.hub的整个接入逻辑集中在 hubconf.py文件顶部声明了dependenciesnumpy、regex、requests、torch若 Cython 加速模块token_block_utils_fast缺失会在加载时自动触发build_ext --inplace现场编译见 hubconf.py#L21-L38通过导入BPEHubInterface与TokenizerHubInterface定义于fairseq/hub_utils.py分别暴露为 Hub 接口的bpe和tokenizer命名空间——这就是tokenizermoses、bpesubword_nmt这类字符串参数的解析入口最后遍历MODEL_REGISTRY把每个模型类的hub_models()键注册为 Hub 入口hubconf.py#L41-L48torch.hub.load(...)实际调用的是该类from_pretrained(model_name)的部分应用partial。因此加载失败或模型名写错时报错信息会指向hub_models()的键对照 transformer.py 与 fconv.py本仓库实际路径见infoxlm/fairseq/fairseq/models/中的注册表即可排查。方式二CLI 批量生成与 BLEU 评估对评测集做批量生成是文档给出的第二条主线。以下命令以 WMT14 英-法卷积模型为例原文档标注在 GTX-1080ti 上运行mkdir -p># Compute BLEU score grep ^H /tmp/gen.out | cut -f3- /tmp/gen.out.sys grep ^T /tmp/gen.out | cut -f2- /tmp/gen.out.ref fairseq-score --sys /tmp/gen.out.sys --ref /tmp/gen.out.ref # BLEU4 40.83, 67.5/46.9/34.4/25.5 (BP1.000, ratio1.006, syslen83262, reflen82787)关键参数含义结合 fairseq_cli/generate.py 与 fairseq_cli/score.py 的实现--beam 5束搜索宽度--batch-size 128批大小直接影响吞吐原文档实测约 580 tokens/s--remove-bpe生成后还原 BPE 子词若训练时用的是 SentencePiece则应写--remove-bpesentencepiece多语言一节中即如此使用fairseq-score的--order默认为 4即 BLEU4可选--ignore-case、--sacrebleu等开关其内部调用fairseq/bleu.py的计分逻辑见 fairseq_cli/score.py#L13-L21。grep ^H/grep ^T依赖fairseq-generate的输出协议每行句对以H行Hypothesis与T行Target交替打印这是解析评估结果的稳定依据。训练新模型一IWSLT14 德英 Transformer这是文档给出的 Transformer 翻译最小完整示例。第一步下载与二值化在infoxlm/fairseq/根目录下执行# Download and prepare the data cd examples/translation/ bash prepare-iwslt14.sh cd ../.. # Preprocess/binarize the data TEXTexamples/translation/iwslt14.tokenized.de-en fairseq-preprocess --source-lang de --target-lang en \ --trainpref $TEXT/train --validpref $TEXT/valid --testpref $TEXT/test \ --destdir>CUDA_VISIBLE_DEVICES0 fairseq-train \ >fairseq-generate># Download and prepare the data cd examples/translation/ # WMT17 data: bash prepare-wmt14en2de.sh # or to use WMT14 data: # bash prepare-wmt14en2de.sh --icml17 cd ../.. # Binarize the dataset TEXTexamples/translation/wmt17_en_de fairseq-preprocess \ --source-lang en --target-lang de \ --trainpref $TEXT/train --validpref $TEXT/valid --testpref $TEXT/test \ --destdir># Download and prepare the data cd examples/translation/ bash prepare-wmt14en2fr.sh cd ../.. # Binarize the dataset TEXTexamples/translation/wmt14_en_fr fairseq-preprocess \ --source-lang en --target-lang fr \ --trainpref $TEXT/train --validpref $TEXT/valid --testpref $TEXT/test \ --destdir>pip install sacrebleu sentencepiece cd examples/translation/ bash prepare-iwslt17-multilingual.sh cd ../..第二步分两次二值化两个方向的数据。注意第二次必须复用第一次生成的英语词典# Binarize the de-en dataset TEXTexamples/translation/iwslt17.de_fr.en.bpe16k fairseq-preprocess --source-lang de --target-lang en \ --trainpref $TEXT/train.bpe.de-en --validpref $TEXT/valid.bpe.de-en \ --joined-dictionary \ --destdir># NOTE: the command below assumes 1 GPU, but accumulates gradients from # 8 fwd/bwd passes to simulate training on 8 GPUs mkdir -p checkpoints/multilingual_transformer CUDA_VISIBLE_DEVICES0 fairseq-train># Generate and score the test set with sacrebleu SRCde sacrebleu --test-set iwslt17 --language-pair ${SRC}-en --echo src \ | python scripts/spm_encode.py --model examples/translation/iwslt17.de_fr.en.bpe16k/sentencepiece.bpe.model \ iwslt17.test.${SRC}-en.${SRC}.bpe cat iwslt17.test.${SRC}-en.${SRC}.bpe \ | fairseq-interactive contenteditable="false">【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考