unilm 仓库 ML50 多语言数据管道:从下载、去重清洗到 BPE 二值化的完整实战指南

发布时间:2026/11/4 14:11:40

unilm 仓库 ML50 多语言数据管道:从下载、去重清洗到 BPE 二值化的完整实战指南 unilm 仓库 ML50 多语言数据管道从下载、去重清洗到 BPE 二值化的完整实战指南【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm导读本文聚焦 decoding/IAD/fairseq/examples/multilingual/data_scripts 目录下针对ML5050 语言多语言翻译数据集的一站式数据处理管线。这套工具链覆盖了从「并行语料下载」→「语言识别过滤」→「去重」→「剔除 valid/test 泄漏句」→「SentencePiece BPE 编码」→「fairseq-preprocess 二值化」的完整流程是多语言mBART / mT5 等模型训练数据准备的标准参考实现。读完本文你将掌握如何复现 mBART50 风格的 50 语言训练语料构建全流程并能深入理解每个处理步骤的源码级原理。一、工具链总览与数据流向ML50 数据管线位于仓库的 decoding/IAD/fairseq/examples/multilingual/data_scripts 目录。核心思想是多个来源的平行语料 → 统一命名为train.lang_pair.lang格式的文本 → 逐级清洗 → 产出可直接被 fairseq 读取的二进制数据。整个流水线由两个 bash 脚本驱动阶段脚本输出下载download_ML50_v1.sh$WORKDIR_ROOT/ML50/raw预处理preprocess_ML50_v1.sh$WORKDIR_ROOT/ML50/dedup、$WORKDIR_ROOT/ML50/clean、二值化结果其中预处理阶段又细分为三个 Python 步骤每个步骤的职责如下表所示步骤脚本输入 → 输出职责去重dedup_all.pyraw→dedup按「源句-目标句」二元组去重清洗remove_valid_test_in_train.pydedup→clean从训练集中剔除与 valid/test 重叠的句子二值化binarize.pyclean→ BPE → databinSPM 切词 fairseq-preprocess二、环境准备依赖与关键环境变量2.1 安装依赖脚本执行前需要先安装 Python 依赖原文档给出的命令为pip install -r requirement.txt其中 requirement.txt 内容极简只有两个包wget命令行下载工具pandas用于清洗阶段生成数据清理统计报表clean_summary.tsv/actual_clean_summary.tsv。除此之外下载阶段还会动态安装fasttext用于语言识别过滤见 download_wmt20.sh 中的prepare_lid()。2.2 核心环境变量所有脚本都依赖两个环境变量未设置时会直接报错退出例如 dedup_all.py 与 binarize.py 均在入口处做了校验变量用途示例WORKDIR_ROOT所有工作文件的根目录下载的语料会落在$WORKDIR_ROOT/ML50/data/workspace/ml50SPM_PATH指向已安装的 SentencePiece 的spm_encode.py脚本路径预处理阶段使用/path/to/sentencepiece/spm_encode.py下载阶段只需WORKDIR_ROOTexport WORKDIR_ROOTa directory which will hold all working files预处理阶段则需要同时配置两个变量export WORKDIR_ROOTa directory which will hold all working files export SPM_PATHa path pointing to sentencepiece spm_encode.py注意原文档要求预先安装 SentencePiece 并确保spm_encode.py可被 Python 直接执行。SPM_PATH指向的是spm_encode.py本身而不是 SentencePiece 的安装目录。三、数据下载多来源并行语料的汇聚运行 download_ML50_v1.sh 即可触发全部数据源下载bash ./download_ML50_v1.sh该脚本内部按顺序调用以下下载子脚本把不同来源的语料统一拷贝到$WORKDIR_ROOT/ML50/raw子脚本数据来源download_wmt20.shWMT20 低资源语言ja、ta、km、ps、iu、cs、de、pl、ru、zh 等同时安装 fasttext、Moses 等辅助工具download_wmt19_and_before.pyWMT19 及更早的平行语料download_wat19_my.sh缅甸语 WAT19 语料download_ted_and_extract.pyTED 演讲平行语料download_lotus.sh印度语言ml、ur、te 等语料download_iitb.shIITB 印地语-英语语料download_af_xh.sh南非荷兰语af、科萨语xh语料download_iwslt_and_extract.shIWSLT 语料download_flores_data.shFLORES 评测数据3.1 下载阶段的处理逻辑以 WMT20 为例download_wmt20.sh 是下载阶段最复杂的脚本它展示了多语言语料构建的两个通用技巧1多源并行 统一符号链接每个语言对如prepare_ja、prepare_ta都会并行wait下载多个子语料Paracrawl、WikiTitles、WikiMatrix、NewsCommentary、UN 语料等并统一建立*.ja、*.en之类的软链接最后cat合并为all.xx再统一输出find ./ -maxdepth 1 -name *.ja | sort -V | xargs cat all.ja find ./ -maxdepth 1 -name *.en | sort -V | xargs cat all.en lid_filter ja all.ja $DEST/train.ja_XX-en_XX.ja_XX en all.en $DEST/train.ja_XX-en_XX.en_XX2fastText 语言识别过滤lid_filter借助 fasttext_multi_filter.py 和 fasttext 官方预训练的lid.176.bin语言识别模型脚本会自动下载到$WORKDIR/fasttext/lid.176.bin对平行语料的每一行判断其语言只有当源句和目标句的语言识别结果与期望语言完全一致时才保留该句子对否则跳过并计数if not all(a b for a, b in zip(preds, args.langs)): skip_cnt 1 continue for line, output_h in zip(lines, outputs): print(line.strip(), fileoutput_h)该脚本使用multiprocessing.Pool并行默认 10 个 worker、chunk 500 行是大规模语料过滤的关键性能保障。3.2 下载完成的目录约定下载完成后全部原始语料位于$WORKDIR_ROOT/ML50/raw文件命名遵循 fairseq 约定{split}.{src}-{tgt}.{lang}例如train.ja_XX-en_XX.ja_XX。注意这里的语言标签使用 mBART50 风格的带地区后缀形式如ja_XX、en_XX、ta_IN、zh_CN。已知注意事项脚本注释中明确标出部分数据源需要手动认证才能下载脚本中有 TODO 提示IWSLT 的下载 URL 曾经变更、globalvoices 的 URL 也已失效执行时可能需要对相应脚本做修复或手动下载。四、预处理去重 → 清洗 → BPE 二值化下载完成后执行预处理脚本export WORKDIR_ROOTa directory which will hold all working files export SPM_PATHa path pointing to sentencepiece spm_encode.py bash ./preprocess_ML50_v1.sh该脚本的核心逻辑见 preprocess_ML50_v1.shML50${WORKDIR_ROOT}/ML50 mkdir -p $ML50/dedup mkdir -p $ML50/cleaned_dedup python ./dedup_all.py --from-folder $ML50/raw --to-folder $ML50/dedup python ./remove_valid_test_in_train.py --from-folder $ML50/dedup --to-folder $ML50/clean python ./binarize.py --raw-folder $ML50/clean对应的三个中间目录含义原文档明确给出$WORKDIR_ROOT/ML50/raw解压后的原始数据$WORKDIR_ROOT/ML50/dedup去重后的数据$WORKDIR_ROOT/ML50/clean从去重数据中移除 valid/test 句子后的数据。4.1 第一步句子对去重dedupdedup_all.py 会自动扫描--from-folder下的所有train*文件解析出所有语言对方向--directions可手动指定逗号分隔然后对每个方向调用 utils/dedup.py 中的deup()函数。去重的核心实现非常朴素而高效以(源句, 目标句) 二元组作为 key 维护一个seen集合首次出现则写入输出文件重复出现则跳过并累加重复计数def deup(src_file, tgt_file, src_file_out, tgt_file_out): seen set() dup_count 0 with open(src_file, encodingutf-8) as fsrc, \ open(tgt_file, encodingutf-8) as ftgt, \ open(src_file_out, w, encodingutf-8) as fsrc_out, \ open(tgt_file_out, w, encodingutf-8) as ftgt_out: for s, t in zip(fsrc, ftgt): if (s, t) not in seen: fsrc_out.write(s) ftgt_out.write(t) seen.add((s, t)) else: dup_count 1 print(fnumber of duplication: {dup_count})由于多语言训练语料经常来自多个来源如 WMT 与 OPUS、CommonCrawl 之间高度重叠这一步骤能显著压缩训练集规模、避免模型在重复数据上过拟合。4.2 第二步剔除 valid/test 泄漏cleanremove_valid_test_in_train.py 是这套管线的「质检」环节目的是防止训练集与评测集valid/test句子重叠造成评测分数虚高。其处理逻辑分为三个阶段汇总全部 valid/test 句子get_all_test_data()收集所有方向的 valid 与 test 文件含反向tgt-src方向构建句子全集all_valid_test_data扫描训练集找出泄漏check_train_all()逐方向比对凡训练行中源句或目标句出现在 valid/test 集合中的记入mess_up_train并统计每个方向需要删除的条数与百分比写回清洗后的数据remove_messed_up_sentences()逐行过滤只有「源句、目标句均不在 mess_up 集合中」且「(s,t)、(t,s) 句子对均不在 valid/test 句子对集合中」的行才保留写入--to-foldervalid/test 以及未受影响方向的训练文件则直接shutil.copyfile拷贝过去。该脚本还会生成两份统计报表供数据审计clean_summary.tsv预测清理量基于句子级去重前的估算actual_clean_summary.tsv实际清理量因为存在重复句子实际值与预测值可能不同。报表列包括direction、train_size_after_remove、orig_size、num_to_remove、remove_percent。4.3 第三步SentencePiece 切词与 fairseq 二值化binarize.py 完成从纯文本到 fairseq 二进制格式的转换分为两个子阶段1自动下载 mBART50 的 SPM 模型与词表脚本启动时若检测不到本地文件会自动下载文件保存在$WORKDIR_ROOT下SPM_MODEL f{WORKDIR_ROOT}/sentence.bpe.model SPM_VOCAB f{WORKDIR_ROOT}/dict_250k.txt if not os.path.exists(SPM_MODEL): call(fwget https://dl.fbaipublicfiles.com/fairseq/models/mbart50/sentence.bpe.model -O {SPM_MODEL}) if not os.path.exists(SPM_VOCAB): call(fwget https://dl.fbaipublicfiles.com/fairseq/models/mbart50/dict_250k.txt -O {SPM_VOCAB})可见该管线默认对齐mBART50的 25 万词表dict_250k.txt与对应 SPM 模型——这正是本仓库多语言模型方案的核心配套资源。2SPM 编码 fairseq-preprocessencode_spm()对每个方向的 train/valid/test 三个 split 执行spm_encode.py以piece格式输出 BPE 文本随后binarize()/binarize_()调用fairseq-preprocess生成二进制数据cmds [ fairseq-preprocess, f--source-lang {src} --target-lang {tgt}, f--destdir {databin_dir}/, f--workers 8, ] # 使用 mBART50 的 joined dictionary cmds.extend([f--joined-dictionary, f--srcdict {spm_vocab}])关键参数说明--joined-dictionary --srcdict dict_250k.txt源/目标共享同一份 25 万词表多语言模型的标配做法--workers 8并行预处理进程数--trainpref/--validpref/--testpref按train.bpe、valid.bpe、test.bpe前缀自动拼接传入。脚本还支持pairs_per_shard分片模式binarize()中的shard*目录逻辑当语料过大时可将 train 切分成多个 shard 分别二值化而 valid/test 只在首个 shard 中二值化一次、其余 shard 通过符号链接共享从而避免重复劳动。五、目录结构与命名规范速查整个管线最终在$WORKDIR_ROOT/ML50下形成如下结构$WORKDIR_ROOT/ML50/ ├── raw/ # 原始语料train/valid/test.{src-tgt}.{lang} ├── dedup/ # 去重后的语料 ├── clean/ # 剔除 valid/test 泄漏后的语料含 clean_summary.tsv ├── bpe/ # SPM piece 切词结果{direction}/train.bpe.{lang} 等 └── databin/ # fairseq 二进制数据{direction}/ 下含 .bin/.idx/dict 文件配套的辅助脚本还包括check_iswlt_test_data.py、check_self_overlaps.py、check_valid_test_overlaps.py数据质量核查工具utils/strip_sgm.sh剥离 WMT 评测数据的 SGM/XML 标签utils/dedup.py 与 utils/fasttext_multi_filter.py去重与语言过滤的可复用工具模块。六、实战建议与已知限制磁盘与带宽规划ML50 多源语料体积巨大仅 WMT20 就包含数十 GB 压缩包建议WORKDIR_ROOT指向大容量磁盘且下载脚本默认保留中间文件脚本注释中标注了 TODO需要手动清理$TMP_DIR。依赖可重复性下载阶段会pip install fasttext、git clone mosesdecoder、下载lid.176.bin首次运行耗时较长若网络受限可提前手动准备这些资源再复用脚本。失效链接与手动认证脚本注释中明确标注 IWSLT 与 globalvoices 的 URL 已变化、部分网站需要手动认证下载复现时请优先检查 download_iwslt_and_extract.sh 与 download_flores_data.sh 的可用性。评测公平性remove_valid_test_in_train.py是防止数据泄漏的关键步骤其输出的actual_clean_summary.tsv中remove_percent可用于评估各方向的数据污染程度建议作为训练前必查指标。词表对齐默认二值化采用 mBART50 的 25 万共享词表若要自训 SPM 模型可替换SPM_MODEL/SPM_VOCAB两个变量并确保所有语言方向使用同一词表以支持多语言联合训练。结语ML50 数据管线展示了工业级多语言语料构建的标准范式多源下载 → 语言识别过滤 → 句子对去重 → 评测集泄漏剔除 → 共享词表 BPE → 并行二值化。其「数据质量优先」的设计尤其是 valid/test 泄漏检测对任何多语言预训练任务都有直接的借鉴价值。读者可直接复用本仓库 data_scripts 目录下的脚本结合自身语料格式微调后快速搭建属于自己的多语言训练数据流水线。【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/2 3:52:27

PDFPatcher(PDF补丁丁):免费一站式 PDF 处理完整指南

PDFPatcher(PDF补丁丁):免费一站式 PDF 处理完整指南 【免费下载链接】PDFPatcher PDF补丁丁——PDF工具箱,可以编辑书签、剪裁旋转页面、解除限制、提取或合并文档,探查文档结构,提取图片、转成图片等等 …

2026/11/5 13:10:54

LunaTranslator OCR实操指南:5步搞定游戏文字识别配置

LunaTranslator OCR实操指南:5步搞定游戏文字识别配置 【免费下载链接】LunaTranslator 视觉小说翻译器 / Visual Novel Translator 项目地址: https://gitcode.com/GitHub_Trending/lu/LunaTranslator 某款视觉小说的对话栏带飘花特效,OCR结果每…

2026/11/5 13:55:19

GD32E10x官方例程入门:从GPIO点灯到串口调试

简介:这份GD32E10x系列官方例程面向嵌入式硬件与单片机开发者,基于ARM Cortex-M3内核,汇集兆易创新GD32E10x的示例代码,适合工业控制、消费电子、通信设备等场景的学习、验证与二次开发。压缩包共935个文件,约11.16MB&…

2026/11/5 13:50:18

基于Django的运维平台实战:资产、发布、巡检、告警一体化

简介:这份资源是一套基于Django框架开发的运维平台源码,面向具备Python基础、希望了解Web运维系统实现思路的开发者与运维人员,可用于学习主机管理、服务监控、日志查看、任务调度、权限控制、资源统计、脚本执行与故障告警等常见运维模块的落…

2026/11/5 13:25:11

基于ADS122U04IPWR与STM32F427ZI的工业测温方案设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 13:20:10

Dubbo服务下线实时告警:基于ZooKeeper Watch的轻量级监控方案

简介:这是一套面向Java分布式系统运维与开发人员的Dubbo服务高可用监控解决方案,聚焦于Provider异常下线的实时感知与告警响应。资源通过Zookeeper监听机制实现服务状态变更捕获,结合邮件通知模块,在不侵入原有Dubbo代码的前提下&…

2026/11/5 13:20:10

SSM超市管理系统源码解析:从分层架构到本地部署与业务修改

简介:这份资源是面向高校计算机专业学生与Java初学者的一套SSM框架课程设计完整项目,围绕超市管理场景,帮助读者完成从框架整合到业务模块落地的实战练习,适合作为毕业设计或课程作业的参考方案。压缩包共792个文件,约…

2026/11/5 13:20:10

SSM超市管理系统实战:从课设跑通到二次开发全解析

简介:这份资源是面向高校计算机相关专业学生与Java入门开发者的SSM课程设计参考项目,围绕超市管理场景,解决商品、库存、销售等业务模块从设计到落地的实践需求,适合作为课程作业、毕业设计原型或SSM框架练手案例。压缩包共792个文…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑