DeepSeek 数据工程教程
从数据采集到质量评估,完整掌握大模型数据工程流水线。涵盖 SFT 数据集构建、RLHF 偏好数据准备、数据清洗去重、数据增强、大规模数据处理等核心环节,附 Python 实战代码。
开始学习数据是 LLM 的灵魂
在大模型训练中,数据质量直接决定了模型能力的上限。高质量的数据集能让小模型超越大模型,而低质量的数据会让万亿参数模型表现平庸。数据工程覆盖了从原始数据采集到最终训练数据交付的全链路。
数据工程概述
理解数据在 LLM 训练中的核心地位,掌握数据质量与数据数量的权衡关系,建立完整的数据工程流水线全景认知。
数据在 LLM 训练中的核心地位
在 LLM 训练的三要素(算法、算力、数据)中,数据往往被低估,但它的重要性远超其他两者。一个广为流传的观点是:模型架构的边际收益递减,而数据质量的边际收益递增。以下是三个相互关联的核心事实:
- 数据质量决定模型能力上限:即使使用最先进的模型架构(如 MoE),如果训练数据质量差,模型也无法产出高质量回答。DeepSeek-V3 和 R1 的强大能力,很大程度上归功于精心构建的训练数据。
- 数据多样性决定泛化能力:单一领域的数据会让模型过拟合,而多样化的数据能让模型在未见过的任务上表现良好。DeepSeek 的数据混合策略覆盖了数学、代码、推理、对话、创意写作等多个领域。
- 数据规模决定知识边界:模型的知识范围不会超出训练数据覆盖的范围。想让模型懂医学,就必须有高质量的医学数据;想让模型会编程,就必须有足够的代码数据。
数据质量 vs 数据数量
在有限的计算资源下,数据质量比数据数量更重要。以下是两者的权衡分析:
| 维度 | 追求数量 | 追求质量 |
|---|---|---|
| 训练效率 | 训练时间长,收敛慢 | 训练更快,收敛更稳定 |
| 模型表现 | 噪声多,输出不稳定 | 输出准确,幻觉少 |
| 成本 | GPU 成本高,周期长 | 数据清洗成本高,但总成本更低 |
| 典型策略 | 爬取全网数据,粗过滤 | 精选数据源,多重过滤,人工标注 |
DeepSeek 团队在实践中发现:用 1/10 的高质量数据训练的模型,在指令遵循和推理能力上往往优于用全量粗数据训练的模型。这也解释了为什么数据工程是 LLM 开发中最关键的环节。
数据工程流水线全景
一个完整的数据工程流水线包含以下阶段:
- 数据采集:从公开数据集、网络爬取、API 调用、合成生成等渠道获取原始数据
- 数据清洗:去除重复、过滤低质量、处理缺失值、过滤敏感信息
- 数据标注:为 SFT、RLHF、DPO 等不同训练阶段构建不同格式的数据
- 数据增强:通过 Self-Instruct、Evol-Instruct、反向翻译等技术扩充数据
- 质量评估:从多样性、困难度、指令复杂度等维度评估数据质量
- 数据混合:按比例混合不同领域的数据,形成最终的训练数据集
- 版本管理:使用 DVC 等工具管理数据版本,确保可复现
数据采集与来源
了解 LLM 训练数据的主要来源,包括公开数据集、网络爬取、合成数据生成,以及数据合规注意事项。
常用公开数据集
| 数据集名称 | 规模 | 类型 | 适用场景 |
|---|---|---|---|
| Alpaca | 52K | SFT 指令数据 | 指令微调入门 |
| ShareGPT | 90K | 多轮对话 | 对话能力训练 |
| UltraChat | 1.5M | 多轮对话 | 大规模对话训练 |
| OpenOrca | 4M | SFT 指令数据 | 大规模指令微调 |
| CodeAlpaca | 20K | 代码生成 | 代码能力训练 |
| MathInstruct | 260K | 数学推理 | 数学能力训练 |
从 Hugging Face 加载公开数据集
网络爬取与数据采集
对于特定领域的数据,网络爬取是重要的补充手段。以下是一个面向文档和教程的爬虫示例:
合成数据生成
当公开数据不足以覆盖特定领域时,可以使用合成数据生成(Synthetic Data Generation)技术。通过 DeepSeek 等强模型生成高质量的训练数据:
数据合规注意事项
在使用公开数据集和网络爬取数据时,务必检查数据许可协议。部分数据集(如 ShareGPT)有特定的使用限制。网络爬取应遵守 robots.txt 协议,控制爬取频率,避免对目标网站造成负担。涉及个人隐私信息的数据需要脱敏处理。
数据清洗与去重
数据清洗是数据工程中最耗时但最重要的环节。高质量的数据清洗能显著提升模型训练效果,包括质量过滤、去重和敏感信息过滤。
质量过滤管道
一条完整的质量过滤管道包含多个维度的过滤:
MinHash LSH 去重
MinHash + LSH(Locality-Sensitive Hashing)是业界标准的大规模去重方案,能高效检测近似重复的文档:
语义去重
MinHash 适合字面级去重,但对于语义相似但表述不同的数据,需要使用嵌入向量进行语义去重:
敏感信息过滤
在训练数据中,必须过滤掉个人隐私信息和敏感内容:
数据格式与标注
不同训练阶段需要不同的数据格式。SFT 使用 Instruction-Input-Output 格式,ChatML 用于对话场景,RLHF/DPO 需要偏好比较数据。理解这些格式是构建高质量数据集的基础。
SFT 数据格式(Instruction-Input-Output)
SFT(Supervised Fine-Tuning)数据是最基础的训练数据格式。每条数据包含指令、可选输入和期望输出:
ChatML 对话格式
ChatML(Chat Markup Language)是 OpenAI 定义的对话格式,也广泛用于 SFT 训练。它将多轮对话结构化为标准格式:
RLHF 偏好数据格式
RLHF(Reinforcement Learning from Human Feedback)和 DPO(Direct Preference Optimization)需要偏好比较数据,即同一个 prompt 下,标注哪个回答更好:
数据格式选择建议
基础 SFT 训练使用 Instruction-Input-Output 格式即可;多轮对话场景推荐 ChatML 格式;如果需要进行 RLHF 或 DPO 训练,必须准备偏好对比数据。DeepSeek 系列模型同时支持 Alpaca 格式和 ChatML 格式。
数据增强技术
当已有数据不足时,数据增强技术可以帮你从少量种子数据中生成大量高质量训练数据。Self-Instruct 和 Evol-Instruct 是两种最主流的方法。
Self-Instruct 自生成方法
Self-Instruct 的核心思想是用强模型从种子任务中自动生成新的指令-输出对:
Evol-Instruct 进化生成
Evol-Instruct 通过逐步增加指令的复杂度来生成更具挑战性的数据。DeepSeek 团队在训练中大量使用了类似的进化策略:
反向翻译数据增强
反向翻译(Back Translation)是多语言数据增强的经典方法,通过翻译-回译生成语义等价但表达不同的数据:
DeepSeek 特定数据准备
DeepSeek-R1 的推理数据有特殊的格式要求,包含 thinking 标签和 CoT(Chain of Thought)推理链。本章详细介绍如何为 DeepSeek 模型准备数据。
DeepSeek-R1 推理数据格式
DeepSeek-R1 的关键创新在于训练数据中包含了显式的思考过程(thinking/reasoning)。以下是标准的 R1 推理数据格式:
CoT 数据构建
构建 Chain of Thought 数据的关键是让模型学会"先思考,再回答"。以下代码自动为数学问题生成 CoT 推理链:
代码数据准备
代码数据是 DeepSeek 训练数据的重要组成部分。优质的代码数据应包含问题描述、代码实现和注释:
数学数据准备
数学推理数据需要包含公式、推导步骤和最终答案。LaTeX 格式是数学表达的标准:
数据质量评估
数据质量评估是数据工程的最后一道防线。从多样性、困难度、指令复杂度、自动评分等多个维度评估数据集质量,确保训练数据符合预期标准。
多样性评估
多样性评估确保数据集覆盖了足够广泛的领域和任务类型:
困难度评估
评估数据集中每条指令的难度,确保数据难度分布合理:
指令复杂度评分
指令复杂度评分从多个维度评估指令的质量:
| 评分维度 | 说明 | 评分方法 |
|---|---|---|
| 清晰度 | 指令是否明确、无歧义 | LLM 评分 1-5 |
| 完整性 | 指令是否包含足够的上下文 | 信息密度计算 |
| 可执行性 | 指令是否可以被完成 | LLM 可执行性判断 |
| 创造性 | 指令是否鼓励创造性思维 | LLM 评分 1-5 |
自动质量打分
使用 LLM 作为评判器,对数据质量进行自动评分:
数据混合策略
不同领域的数据需要按特定比例混合,才能训练出全面均衡的模型。数据混合策略直接影响模型的通用能力和专项能力。
典型数据混合比例
以下是 DeepSeek 类模型训练中常用的数据混合比例参考:
| 数据类别 | 建议比例 | 说明 |
|---|---|---|
| 通用对话 | 30-40% | 日常对话、问答、闲聊,保证基础对话能力 |
| 代码生成 | 15-20% | Python/JS/Java/C++ 等主流语言代码 |
| 数学推理 | 10-15% | 代数、几何、微积分、概率统计 |
| 逻辑推理 | 10-15% | 逻辑谜题、推理链、多步推理 |
| 创意写作 | 5-10% | 诗歌、故事、文案、剧本 |
| 专业领域 | 5-10% | 医学、法律、金融等垂直领域 |
| 安全对齐 | 3-5% | 拒绝有害请求、价值观对齐 |
数据混合代码实现
数据退火策略
数据退火(Data Annealing)是一种训练策略,在训练过程中动态调整数据混合比例。早期使用多样化数据训练基础能力,后期逐步增加高质量、高难度数据的比例:
- 预热阶段(前 20% 训练步数):通用对话数据占 50%,简单指令为主,帮助模型建立基础对话能力
- 主训练阶段(20%-80% 训练步数):逐步增加代码和推理数据比例,引入中等难度任务
- 退火阶段(最后 20% 训练步数):大幅增加高质量、高难度数据,减少通用对话数据,提升模型在复杂任务上的表现
DeepSeek 团队在训练中使用了类似的退火策略,这也是 DeepSeek-R1 在推理能力上表现突出的重要原因之一。
大规模数据处理
当数据量达到百万级甚至亿级时,单机处理已不可行。本章介绍使用 Spark、Ray 等分布式框架进行大规模数据处理,以及数据版本管理。
使用 Ray 并行处理
Ray 是一个轻量级的分布式计算框架,特别适合 Python 生态的数据处理任务:
使用 PySpark 分布式处理
PySpark 是处理 TB 级大规模数据的标准工具,支持 DataFrame API 和 SQL 操作:
流式处理大文件
对于超大的 JSONL 文件,使用流式处理避免内存溢出:
数据版本管理(DVC)
DVC(Data Version Control)是数据科学的 Git,用于管理数据集的版本:
生产级数据管线
将前面所有步骤整合为一条完整的生产级数据管线,包含持续数据采集、自动化质量监控、数据漂移检测和完整的 Pipeline 代码。
完整数据管线架构
- 数据采集层:定时任务抓取公开数据集更新、爬取新内容、调用合成数据 API
- 数据清洗层:质量过滤、去重、敏感信息过滤、格式标准化
- 数据增强层:Self-Instruct 生成、Evol-Instruct 进化、反向翻译
- 质量评估层:多样性评分、困难度评估、自动质量打分
- 数据混合层:按比例混合、数据退火策略、版本管理
- 监控告警层:数据漂移检测、质量趋势监控、异常告警
完整 Pipeline 代码
数据漂移检测
数据漂移(Data Drift)是指数据分布随时间发生的变化。在生产环境中,需要持续监控数据质量是否偏离预期:
自动化质量监控
使用定时任务持续监控数据质量指标:
运行 Pipeline
生产环境建议
- 使用 Apache Airflow 或 Prefect 编排管线任务
- 将质量指标推送到 Prometheus + Grafana 进行可视化监控
- 配置告警规则:数据质量通过率低于阈值、数据量异常波动等
- 使用 DVC 或 LakeFS 进行数据版本管理,确保可复现
- 定期人工抽检数据质量,与自动评分交叉验证
DeepSeek 数据工程常见问题
DeepSeek 相关教程
深入学习 DeepSeek 模型的使用、部署和生态工具。