资讯动态

Flores101 大规模多语言机器翻译:基于 EdgeFormer/fairseq 的预训练模型下载、SentencePiece 编码与推理实战

发布时间:2026/9/13 10:15:11 来源:尧图企业网站定制
Flores101 大规模多语言机器翻译基于 EdgeFormer/fairseq 的预训练模型下载、SentencePiece 编码与推理实战【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm本文以 unilm 仓库中 edgelm/examples/flores101/README.md 为核心指南系统讲解如何基于 fairseq本仓库中由 EdgeFormer 项目维护的 fairseq 代码库使用 Flores101 大规模多语言机器翻译预训练模型完成从模型下载、SentencePiece 子词编码、数据二值化到 beam search 生成译文的完整推理链路。读完本文你将能够熟练配置fairseq-preprocess与fairseq-generate的关键参数理解translation_multi_simple_epoch多语言任务的语言标记langtok机制并掌握该模型支持的 100 语言代码表直接跑通任意德→法de→fr等语言对的翻译实验。背景Flores101 与 WMT21 大规模多语言翻译赛道Flores101 是为WMT 2021 Large-Scale Multilingual Machine Translation大规模多语言机器翻译竞赛的小型与大型赛道small and large tracks提供的基线预训练模型集合。该赛道要求参赛模型在 100 语言之间进行任意方向的多语言翻译因此基线模型必须具备极强的多语言共享与泛化能力。从模型架构与训练方式上看这批模型与 M2M-100 目录。需要特别说明的是本仓库中的 fairseq 代码由 EdgeFormer 项目维护edgelm/README.md 指出该仓库构建于 Fairseq 与 edgelm/fairseq_cli/generate.py。因此下文所有命令中的$fairseq均指代本仓库的edgelm/目录。预训练模型总览Flores101 提供两个不同规模的基线模型均使用 256,000 词元的共享 SentencePiece 词表Vocab Size 256K覆盖全部赛道语言模型层数 (Num layers)嵌入维度 (Embed dim)FFN 维度 (FFN dimension)词表大小 (Vocab Size)参数量 (#params)下载flores101_mm100_615M1210244096256,000615M官方发布地址下载flores101_mm100_615M.tar.gzflores101_mm100_175M65122048256,000175M官方发布地址下载flores101_mm100_175M.tar.gz两个模型的差异主要体现在容量上615M 版本采用 12 层、嵌入维度 1024、FFN 维度 4096 的标准 Transformer 规模配置175M 版本则为 6 层、嵌入维度 512、FFN 维度 2048 的轻量配置适合算力受限或快速验证的场景。两者共享相同的 256K 词表因此词典文件dict.txt与 SentencePiece 模型sentencepiece.bpe.model可以通用这也为后续按需切换模型规模提供了便利。tar 包内包含推理所需的完整文件清单model.pt模型权重、dict.txt词典、sentencepiece.bpe.model子词模型、language_pairs.txt语言对清单。环境准备在运行推理前需要准备以下环境安装仓库代码在edgelm/目录下执行pip install --editable ./参见 edgelm/README.md 的 Setup 一节使fairseq-preprocess、fairseq-generate命令可用。安装 SentencePiece文档明确要求从 SentencePiece 官方项目安装pip install sentencepiece亦可编码脚本spm_encode.py内部通过import sentencepiece as spm加载子词模型见 edgelm/scripts/spm_encode.py。准备数据目录将$fairseq指向本仓库的edgelm/目录所有命令均在仓库根目录下执行。实战流程从原始文本到译文完整推理链路分为四步下载模型 → SentencePiece 编码 → 数据二值化 → beam search 生成。下面以德→法de→fr为例逐步展开并给出源码级参数说明。Step 1下载模型并解压fairseq/path/to/fairseq # 在本仓库中指向 edgelm/ 目录 cd $fairseq # 下载 615M 参数模型以 615M 版本为例 wget flores101_mm100_615M 官方下载地址 # 解压 tar -xvzf flores101_mm100_615M.tar.gz解压后会在$fairseq/flores101_mm100_615M/下得到上文所述的全部推理文件。若希望使用 175M 轻量版本将 URL 替换为flores101_mm100_175M.tar.gz即可后续命令中所有flores101_mm100_615M/路径相应替换。Step 2使用官方 SentencePiece 模型编码模型使用官方训练的 SentencePiece 子词模型sentencepiece.bpe.model对原始文本进行编码。文档以 WMT19 德法测试集的前 20 行为示例数据源fairseq/path/to/fairseq cd $fairseq # 下载示例数据集从 WMT19 测试集取德→法方向的前 20 行 sacrebleu --echo src -l de-fr -t wmt19 | head -n 20 raw_input.de-fr.de sacrebleu --echo ref -l de-fr -t wmt19 | head -n 20 raw_input.de-fr.fr # 对源语言de与目标语言fr分别进行 SentencePiece 编码 for lang in de fr ; do python scripts/spm_encode.py \ --model flores101_mm100_615M/sentencepiece.bpe.model \ --output_formatpiece \ --inputsraw_input.de-fr.${lang} \ --outputsspm.de-fr.${lang} done其中scripts/spm_encode.py即仓库中的 edgelm/scripts/spm_encode.py。从源码看该脚本支持以下参数--model必填SentencePiece 模型路径脚本通过spm.SentencePieceProcessor()加载L47-L48--inputs输入文件列表可传多个默认-标准输入--outputs输出文件列表需与--inputs数量一致脚本会断言校验见 L43-L45--output_format可选piece子词片段默认或id词元 ID。当选择piece时调用sp.EncodeAsPieces选择id时调用sp.EncodeAsIdsL50-L58--min-len/--max-len按子词数量过滤过短/过长的句对不传则不过滤L63-L73。脚本按行并行处理多个输入文件zip(*inputs)并保证多输入句对全有或全无地输出只要任一输入行被过滤空行、长度超限该句对整体跳过L106-L110。运行结束后会在 stderr 打印skipped N empty lines与filtered N lines统计信息。Step 3二值化Binarization编码后的子词文本需要通过fairseq-preprocess转换为 fairseq 的二进制数据格式推理时才能被mmap高效加载fairseq-preprocess \ --source-lang de --target-lang fr \ --testpref spm.de-fr \ --thresholdsrc 0 --thresholdtgt 0 \ --destdir data_bin \ --srcdict flores101_mm100_615M/dict.txt --tgtdict flores101_mm100_615M/dict.txt关键参数说明--source-lang de --target-lang fr指定源/目标语言对应上一步生成的前缀spm.de-fr--testpref spm.de-fr测试集文件前缀此处仅有测试集无训练/验证集因此只指定 test 前缀--thresholdsrc 0 --thresholdtgt 0关闭词频阈值剪枝。由于使用的是预训练模型的完整 256K 共享词典必须设为 0否则二值化过程会对词典做裁剪导致与预训练模型词典不一致--destdir data_bin二值化输出目录--srcdict / --tgtdict显式指定源/目标共享词典为模型自带的dict.txt。执行后data_bin/下会生成test.de-fr.de-idx.bin、test.de-fr.de-idx.idx、test.de-fr.fr-idx.bin、test.de-fr.fr-idx.idx等 mmap 格式的二进制文件以及dict.de.txt、dict.fr.txt等词典文件供下一步生成使用。Step 4beam search 生成译文fairseq-generate \ data_bin \ --batch-size 1 \ --path flores101_mm100_615M/model.pt \ --fixed-dictionary flores101_mm100_615M/dict.txt \ -s de -t fr \ --remove-bpe sentencepiece \ --beam 5 \ --task translation_multi_simple_epoch \ --lang-pairs flores101_mm100_615M/language_pairs.txt \ --decoder-langtok --encoder-langtok src \ --gen-subset test \ --fp16 \ --dataset-impl mmap \ --distributed-world-size 1 --distributed-no-spawn该命令是本流程的核心各参数含义与底层机制如下--task translation_multi_simple_epoch选择多语言翻译任务。该任务在 edgelm/fairseq/tasks/translation_multi_simple_epoch.py 中通过register_task(translation_multi_simple_epoch)注册。从源码看L86-L88推理阶段任务会自动将lang_pairs收敛为{source_lang}-{target_lang}单对并断言所有源语言/所有目标语言共享同一词典L108-L123这正是 Flores101 单共享词典架构的实现保证--lang-pairs flores101_mm100_615M/language_pairs.txt模型支持的语言对清单文件支持逗号分隔的内联写法见任务参数定义 L70-L72--encoder-langtok src与--decoder-langtok分别给编码器输入追加源语言标记、给解码器输入追加目标语言标记。这些参数在 edgelm/fairseq/data/multilingual/multilingual_data_manager.py 中定义。其中--encoder-langtok src表示编码器语言标记跟随源语言--decoder-langtok不加值时使用默认的目标语言标记。解码阶段build_generator 会通过symbols_to_strip_from_output在生成后自动剥除输出中的目标语言 token除非显式传入--keep-inference-langtok保留以便分析若使用--lang_tok_replacing_bos_eos变体则语言标记会替换序列的 BOS/EOS 位置L180-L196--fixed-dictionary固定使用模型自带的 256K 共享词典防止与数据目录中的词典产生不一致--remove-bpe sentencepiece解码后合并子词、还原 BPE/SentencePiece 片段输出可读的自然语言译文--beam 5beam search 束宽为 5--batch-size 1 --gen-subset test单样本批处理在test子集上生成--fp16使用半精度推理加速 GPU 计算依赖 Tensor Core--dataset-impl mmap与二值化时生成的 mmap 格式对应内存映射按需加载避免一次性载入大文件--distributed-world-size 1 --distributed-no-spawn单卡运行禁止 spawn 分布式子进程避免推理脚本意外拉起多进程。输出中每行包含S-源句、T-参考译文、H-假设译文与D-去 BPE 后的译文前缀其中D-行即为最终结果。支持的 100 语言与语言代码Flores101 模型覆盖以下语言语言代码为fairseq与 SentencePiece 编码中所使用的 2~3 字母代码供-s/-t及language_pairs.txt使用语言 (Language)代码 (lang code)语言 (Language)代码 (lang code)Afrikaans 南非荷兰语afAmharic 阿姆哈拉语amArabic 阿拉伯语arAssamese 阿萨姆语asAsturian 阿斯图里亚斯语astAymara 艾马拉语ayAzerbaijani 阿塞拜疆语azBashkir 巴什基尔语baBelarusian 白俄罗斯语beBulgarian 保加利亚语bgBengali 孟加拉语bnBreton 布列塔尼语brBosnian 波斯尼亚语bsCatalan 加泰罗尼亚语caCebuano 宿务语cebChokwe 乔奎语cjkCzech 捷克语csWelsh 威尔士语cyDanish 丹麦语daGerman 德语deDyula 迪尤拉语dyuGreek 希腊语elEnglish 英语enSpanish 西班牙语esEstonian 爱沙尼亚语etPersian 波斯语faFulah 富拉语ffFinnish 芬兰语fiFrench 法语frWestern Frisian 西弗里西亚语fyIrish 爱尔兰语gaScottish Gaelic 苏格兰盖尔语gdGalician 加利西亚语glGujarati 古吉拉特语guHausa 豪萨语haHebrew 希伯来语heHindi 印地语hiCroatian 克罗地亚语hrHaitian Creole 海地克里奥尔语htHungarian 匈牙利语huArmenian 亚美尼亚语hyIndonesian 印度尼西亚语idIgbo 伊博语igIloko 伊洛卡诺语iloIcelandic 冰岛语isItalian 意大利语itJapanese 日语jaJavanese 爪哇语jvGeorgian 格鲁吉亚语kaKachin 克钦语kacKamba 坎巴语kamKabuverdianu 佛得角克里奥尔语keaKongo 刚果语kgKazakh 哈萨克语kkCentral Khmer 高棉语kmKimbundu 金邦杜语kmbNorthern Kurdish 北库尔德语kmrKannada 卡纳达语knKorean 韩语koKurdish 库尔德语kuKyrgyz 吉尔吉斯语kyLuxembourgish 卢森堡语lbGanda 干达语lgLingala 林加拉语lnLao 老挝语loLithuanian 立陶宛语ltLuo 卢奥语luoLatvian 拉脱维亚语lvMalagasy 马达加斯加语mgMaori 毛利语miMacedonian 马其顿语mkMalayalam 马拉雅拉姆语mlMongolian 蒙古语mnMarathi 马拉地语mrMalay 马来语msMaltese 马耳他语mtBurmese 缅甸语myNepali 尼泊尔语neDutch 荷兰语nlNorwegian 挪威语noNorthern Sotho 北索托语nsNyanja 尼扬贾语nyOccitan 奥克语ocOromo 奥罗莫语omOriya 奥里亚语orPunjabi 旁遮普语paPolish 波兰语plPashto 普什图语psPortuguese 葡萄牙语ptQuechua 克丘亚语quRomanian 罗马尼亚语roRussian 俄语ruSindhi 信德语sdShan 掸语shnSinhala 僧伽罗语siSlovak 斯洛伐克语skSlovenian 斯洛文尼亚语slShona 绍纳语snSomali 索马里语soAlbanian 阿尔巴尼亚语sqSerbian 塞尔维亚语srSwati 斯瓦蒂语ssSundanese 巽他语suSwedish 瑞典语svSwahili 斯瓦希里语swTamil 泰米尔语taTelugu 泰卢固语teTajik 塔吉克语tgThai 泰语thTigrinya 提格里尼亚语tiTagalog 他加禄语tlTswana 茨瓦纳语tnTurkish 土耳其语trUkrainian 乌克兰语ukUmbundu 翁本杜语umbUrdu 乌尔都语urUzbek 乌兹别克语uzVietnamese 越南语viWolof 沃洛夫语woXhosa 科萨语xhYiddish 意第绪语yiYoruba 约鲁巴语yoChinese 中文zhZulu 祖鲁语zu使用注意事项代码需严格匹配如 Dyula 为dyu、Chokwe 为cjk、Kimbundu 为kmb、Northern Kurdish 为kmr、Kabuverdianu 为kea等三字母代码拼写错误会导致词典或语言标记查找失败以上任意两种语言都可以组成-s src -t tgt的翻译方向只需保证语言对包含在language_pairs.txt覆盖范围内从 任务实现 看源语言与目标语言分别解析自lang_pairs的-分隔符。常见问题与调优建议词表不匹配OOV/索引越界务必同时使用--thresholdsrc 0 --thresholdtgt 0二值化与--fixed-dictionary生成确保 256K 共享词典在预处理、任务加载与推理三个环节完全一致。--encoder-langtok src的含义该写法表示编码器端语言标记使用源语言标记与部分模型中--encoder-langtok tgt的写法不同是translation_multi_simple_epoch推理的标准配置目标端语言标记由--decoder-langtok控制其默认值即目标语言本身。推理资源与精度--fp16需在支持 Tensor Core 的 GPU 上启用--batch-size 1适合串行逐句生成若追求吞吐可适当调大 batch但需注意多语言任务下 batch 内语言对的填充padding开销--dataset-impl mmap与二值化产物格式必须一一对应。从 615M 切换到 175M仅需替换--path与--lang-pairs、--fixed-dictionary、SentencePiece 模型等所有flores101_mm100_615M/路径为flores101_mm100_175M/两者共享同一词表二值化数据可复用。替换数据源示例中使用 sacrebleu 抓取 WMT19 德法测试集前 20 行实际使用时可将raw_input.de-fr.de替换为任意德文原文保证每行一句编码、二值化与生成步骤完全不变如需在fairseq-interactive中实时翻译可参照fairseq_cli/interactive.py并结合上述--task、--lang-pairs、--encoder-langtok参数配置。小结本文基于 edgelm/examples/flores101/README.md完整还原了 Flores101 预训练模型615M/175M在 EdgeFormer/fairseq 代码库上的推理流水线模型下载与解压 →spm_encode.py子词编码 →fairseq-preprocess二值化 →fairseq-generatebeam search 生成并对translation_multi_simple_epoch任务的语言标记机制、共享词典约束等底层实现edgelm/fairseq/tasks/translation_multi_simple_epoch.py做了源码级解读。该流程可直接推广到表格中任意 100 语言方向是开展大规模多语言机器翻译实验与评测的可靠起点。【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价