halo 的技术博客

返回

训练大模型的第一步:数据清洗与配比的工程实践#

当你决定训练一个大模型时,第一反应可能是选架构——Transformer 还是 Mamba?多少层?多大的 hidden size?

但所有做过实际训练的人都会告诉你一个反直觉的事实:数据质量对最终模型效果的影响,远大于模型架构的微调。 你用最先进的架构但喂了脏数据,结果一定不如用标准架构但喂了高质量数据。

本文聚焦大模型训练中最容易被忽视但最重要的环节——数据处理与配比策略。

数据从哪里来?#

大模型的预训练数据来源比大多数人想象的更复杂。常见的数据源包括:

Common Crawl(CC) 是最大的公开网页数据集,每月爬取数十亿网页。但原始 CC 数据质量参差不齐——里面充斥着广告、SEO 垃圾、机器翻译文本、重复内容和各类低质量文字。

高质量专有语料 包括 Wikipedia、书籍(如 Books3、Gutenberg)、学术论文(ArXiv、PubMed)、代码仓库(GitHub、Stack Overflow)、高质量论坛(Reddit 精选子版块)。这些数据质量高但数量有限,通常占预训练数据的 5-15%。

合成数据 在 2025 年后成为热点。用 GPT-4 或 Claude 生成教科书级别的训练数据,用于增强特定领域的能力(如数学推理、代码生成)。但合成数据有”近亲繁殖”的风险——如果训练数据本身就是模型生成的,模型的能力天花板被锁定在生成数据的模型的水平。

数据清洗流水线#

原始数据到可训练语料之间,需要经过一条多阶段的清洗流水线。下面是工业界的标准做法:

第一层:语言识别与过滤。 使用 fastText 或 CLD3 进行语言分类,剔除非目标语言的内容。这一步看似简单,但对中文模型尤其重要——CC 数据中的大量英文内容需要被过滤,同时要保留中文语境下的高质量英文引用和代码。

第二层:质量过滤。 这是清洗中最关键也最复杂的一步。常用方法包括:

  • 规则过滤:去掉太短(<50 字)或太长(>100000 字)的文档,去掉 HTML 标签残留过多、特殊字符比例过高的文档,去掉包含大量脏话或敏感词的文档。
  • 困惑度过滤:用已有的小模型(如 KenLM 或 GPT-2-small)计算文本的困惑度。困惑度过高的文本可能是随机乱码或低质量内容。困惑度过低则可能是重复模板文本。
  • 分类器过滤:训练一个文本质量分类器,区分 Wikipedia 级质量和 CC 级质量。HuggingFace 的 FineWeb 项目开源了一套成熟的质量过滤方案。
  • 去重:包括文档级去重(MinHash + LSH,找到相似度 >80% 的文档对)和段落级去重(去掉在不同文档中反复出现的模板段落)。

第三层:内容安全与隐私。 过滤掉包含个人身份信息的内容(邮箱、电话、地址)、明显违法内容、极端暴力内容。这一步不仅关乎模型安全,也关乎合规——GDPR 等法规要求训练数据不能包含未经授权的个人信息。

第四层:启发式清洗。 这是经验驱动的优化步骤。例如:去掉以”请登录以继续”结尾的页面、去掉包含大量 JavaScript 代码的页面(并非代码语料)、去掉导航菜单占比过高的页面。这些规则每个团队都会根据自己的经验积累一套”独门秘方”。

数据配比策略#

清洗完了,不同来源的数据应该以什么比例混合?这是在预训练阶段最重要的决策之一,直接影响模型的知识结构和能力倾向。

Llama 3 的配比思路(根据 Meta 公开信息推断):约 50% 通用网页、15% 代码与数学、10% 书籍与学术论文、10% 多语言内容、15% 其他。这个配比的核心理念是:代码增强推理能力,书籍增强语言质量,网页提供知识广度。

DeepSeek 的配比策略(部分公开):对中文内容有更高的配比权重,对代码和数学有额外倾斜。这与 DeepSeek 在编程和数学推理上的强项一致。

配比不是一成不变的——在训练的不同阶段,数据配比会动态调整:

初期(前 30% tokens):使用通用配比,让模型建立广泛的知识基础。这个阶段数据量最重要,质量可以稍低。

中期(30%-70% tokens):逐步提高高质量语料(书籍、论文、代码)的占比,提高数据的难度。模型的 loss 下降速度会变慢,但学到的内容更有价值。

后期(最后 30% tokens):大幅提高高质量语料的占比,甚至对特定领域的精选数据进行过采样。这个阶段是模型能力从”能用”到”好用”的关键拐点。很多团队在训练后期会对数学和代码数据进行 2-3 倍的过采样。

退火阶段(Annealing,最后 5%):将学习率降到极低,只用最高质量的数据(通常是人工精挑细选的几百万条数据)。这个阶段的策略是从 Llama 3 的 92 页技术报告中被业界广泛学习的——退火可以让模型在 benchmark 指标上额外提升 1-3 个百分点。

工具与基础设施#

处理 TB 到 PB 级的数据,工程基础设施同样关键:

大规模数据处理框架:

  • Spark / Ray:分布式数据处理,适合 CC 级别的数据规模。清洗 10TB 的文本数据,一个 50 节点的 Spark 集群可以在几小时内完成。
  • Data-Juicer:阿里开源的数据处理框架,专门为 LLM 训练设计,内置了 50+ 种数据处理算子,开箱即用。
  • Dolma:AI2 开源的数据处理工具包,配合 OLMo 模型使用,有完整的去重和质量过滤方案。

文本存储格式:

  • JSONL:最简单通用的格式,每行一个 JSON 对象。适合小到中等规模的数据处理。
  • Parquet:列式存储格式,压缩率高,适合大规模分布式处理。Pandas 和 Spark 都原生支持。
  • MDS(Mosaic Data Shard):Databricks 的 MosaicML 团队提出的格式,针对训练时的数据加载做了专门优化。

常见陷阱#

陷阱一:过度清洗。 过滤条件太严格,导致模型变成”温室里的花朵”——在干净数据上表现好,遇到真实世界的有噪声输入时直接崩溃。适量的噪声其实有助于模型的鲁棒性。经验法则:清洗后保留 60-80% 的原始数据是比较安全的范围。

陷阱二:去重过猛。 完全去掉所有重复内容会导致模型学不会引用和套话——而这些恰恰是真实文本的重要组成。MinHash 的相似度阈值设在 0.8 是比较合理的平衡点。

陷阱三:忽略了多语言配比。 如果你训练一个以中文为主要交互语言的模型,但英文数据占比超过 80%,模型会倾向于用英文回答中文问题——这就是著名的”语言泄漏”问题。确保目标语言至少占 30-40% 的训练数据。

陷阱四:数据污染 Benchmark。 这是最容易被忽视也最致命的问题。如果训练数据中包含了评测集的题目和答案(例如 MATH 数据集的题目出现在 CC 中),模型在 benchmark 上的高分就是虚假的。必须对训练数据进行严格的去污染(decontamination)——找到并删除所有与评测集高度相似的文本。

总结#

数据工程是大模型训练中最不性感的环节——没有炫酷的架构图,没有亮眼的 benchmark 榜单。但正如计算机科学里的那句老话:Garbage In, Garbage Out。在算法和架构日益趋同的当下,数据质量和配比策略正在成为模型性能差异化最重要的来源。

如果你正在计划训练一个大模型,建议把至少 40% 的项目时间留给数据处理。这个投入会直接在最终模型的性能上体现回报。

数据清洗流水线

数据配比策略

训练大模型的第一步:数据清洗与配比的工程实践
https://blog.halo26812.eu.org/blog/llm-training-data-engineering
Author halo
Published at 2026年6月21日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨