K8s Lab 把当前仓库文档整理成一个可阅读的网页站点

Repository Reading Site

本轮操作记录:大模型数据集样本与治理文档编写

这一轮继续沿着大模型课程主线推进,但重点不再是泛泛讲“大模型是什么”,而是把“数据”这一层单独讲透。 目标有四个: 1. 让小白真正看见大模型数据长什么样。 2. 系统解释原始数据、清洗数据、SFT、偏好数据、评测集、RAG 文档的区别。 3. 引入数据版本、数据卡、血缘、隐私和质量治理这些平台工程概念。 4. 为后续训练、微调和部署课程打一个更扎实的数据地

Markdown19-操作记录-大模型数据集样本与治理文档编写.md2026年4月10日 10:29

本轮操作记录:大模型数据集样本与治理文档编写

本轮目标

这一轮继续沿着大模型课程主线推进,但重点不再是泛泛讲“大模型是什么”,而是把“数据”这一层单独讲透。

目标有四个:

  1. 让小白真正看见大模型数据长什么样。
  2. 系统解释原始数据、清洗数据、SFT、偏好数据、评测集、RAG 文档的区别。
  3. 引入数据版本、数据卡、血缘、隐私和质量治理这些平台工程概念。
  4. 为后续训练、微调和部署课程打一个更扎实的数据地基。

Step 1:先确认现有 ml-platform 目录里没有“数据样本”目录

实际命令

find /Users/yuanjun/coding/github/k8s-lab/ml-platform -maxdepth 2 -type d | sort

sed -n '1,220p' /Users/yuanjun/coding/github/k8s-lab/ml-platform/training/train.py

sed -n '1,220p' /Users/yuanjun/coding/github/k8s-lab/18-第十八课-大模型全生态-从数据到训练到部署到治理原理.md

为什么先查这一步

因为我需要先判断:

  • 仓库里有没有现成的数据示例可以复用
  • 当前 ml-platform 是否已经有“数据长相”的学习材料
  • 新内容应该补在文档层,还是要同时补示例文件

我看到的结果

ml-platform 当前目录

有:

  • docs
  • training
  • inference
  • operator
  • manifests

但没有:

  • 面向大模型的数据样本目录

training/train.py

它展示的是一个传统 ML 的训练脚本,重点在:

  • California Housing 数据
  • 特征工程
  • ONNX / JSON 导出

这对理解通用 ML 很好,但不等于大模型数据工程。

原理解释

这一步让我确认:

这轮不应该只写一篇概念文,还应该补一组真实示例文件,让“数据长相”这件事真正可见。


Step 2:决定新增一个专门的示例数据目录

我新增的位置

为什么放这里

原因有三个:

  1. 它和 ml-platform 主题天然相关。
  2. 这类文件属于“学习样本资产”,比放在根目录更有组织性。
  3. 后续如果继续讲 tokenizer、SFT、评测、RAG,都可以继续往这个 examples 目录扩展。

原理解释

这是一个小但重要的工程习惯:

文档讲概念,示例文件讲形状,二者最好同时存在,而且目录层次要清楚。

如果只写概念,没有示例文件,读者常常会“似懂非懂”。

如果只有示例文件,没有解释文档,读者又很容易只看见格式,看不见原理。


Step 3:设计示例文件时,我没有只放一种数据,而是故意覆盖 6 类核心数据

我新增的文件

为什么不是只放一个 dataset.jsonl

因为如果只给一个文件,小白很容易继续误会:

  • “大模型数据集就是一堆 JSONL”

这不够。

我故意把不同用途的数据拆开,是为了让读者直接建立边界感:

00-raw-corpus.jsonl

展示:

  • 原始数据带噪声、带 HTML、带 PII、带垃圾内容,是真实世界的样子

01-cleaned-corpus.jsonl

展示:

  • 清洗后数据多了质量分、脱敏标记、去重分组等治理字段

02-sft-messages.jsonl

展示:

  • 聊天 / 指令微调数据的 messages 结构

03-preference-dpo.jsonl

展示:

  • 偏好数据不是“一个标准答案”,而是 chosenrejected

04-eval-set.jsonl

展示:

  • 评测集和训练集是两回事

05-rag-documents.jsonl

展示:

  • RAG 文档在生态里重要,但不等于训练数据

06-dataset-card.yaml

展示:

  • 数据集不是裸文件,还需要元数据说明、用途说明和治理说明

原理解释

这是一个很重要的教学设计:

用“多类最小样本”替代“单类抽象定义”,能更快帮助读者建立概念边界。


Step 4:设计原始数据样本时,故意保留了真实项目里最常见的脏问题

为什么这样做

如果我把原始数据也写得特别干净,那读者会得到错误印象,以为:

  • 数据集通常一下载就能训练

这是不真实的。

所以在:

里,我故意放了这些问题:

  1. HTML 和脚本标签
  2. 手机号这类 PII
  3. 营销灌水文本
  4. 代码样本

原理解释

这样做是为了帮助读者建立一个非常现实的工程认知:

真实原始数据不是“高质量教材”,而是“未经治理的混杂原料”。

而数据工程的价值,正是把这批原料变成可用资产。


Step 5:清洗后数据里,我故意加了治理字段,而不只是留一个 text

我为什么这么做

如果清洗后数据只长这样:

{"text": "..."}

那读者还是容易停留在:

  • “清洗就是把文字变干净”

这不够。

所以在:

里,我额外加了:

  • source_doc_id
  • quality_score
  • pii_removed
  • dedup_group

原理解释

这些字段在教学上非常关键,因为它们分别对应:

  • 来源追踪
  • 质量评估
  • 合规状态
  • 去重关系

这能帮助读者更早理解:

清洗后的数据不只是“文本变干净了”,而是“进入治理体系了”。


Step 6:主文档没有只解释名词,而是围绕“边界感”来组织

我新增的主文档

这篇文章的主线不是“数据多重要”,而是“把边界彻底分清”

我重点拆开的边界包括:

  1. 原始数据 vs 训练就绪数据
  2. 预训练数据 vs SFT 数据
  3. SFT 数据 vs 偏好数据
  4. 训练集 vs 评测集
  5. 训练数据 vs RAG 文档
  6. 数据文件 vs 数据资产
  7. 数据版本 vs 模型版本
  8. 数据说明文档 vs 数据卡

原理解释

因为小白最容易犯的错误不是“没见过名词”,而是:

  • 把不同层级和不同用途的数据对象混淆

一旦这些边界不清,后面你无论学:

  • SFT
  • DPO
  • RAG
  • 训练平台
  • 模型注册

都会混乱。


Step 7:文档里专门强调了 train / validation / test 和泄漏问题

为什么要把这部分单拎出来

因为很多人做大模型时,会误以为:

  • 评测数据只是“少量题库”
  • 混进去一点也没关系

这是非常危险的。

所以我在正文里专门把:

  • train
  • validation
  • test
  • data leakage

拆开讲了。

原理解释

这是在给后面真正做训练和评测埋关键伏笔。

如果一个人从第一天就没有建立“评测集必须隔离”的意识,那后面做任何 benchmark 都会有很大失真风险。


Step 8:我没有把这一课写成“数据工具列表”,而是先讲通用原则

为什么不先讲 DVC / LakeFS / Label Studio / Airflow 这些工具

因为工具会变,原则相对稳定。

用户现在最缺的是:

  • 知道为什么要做这些事

而不是:

  • 立刻装某个工具

所以这篇文章更关注:

  • 数据对象的定义
  • 各类数据的边界
  • 清洗和治理的目标
  • 版本和血缘的必要性
  • 企业里最容易踩的坑

原理解释

这是一个很重要的教学取舍:

初期先讲稳定原则,再讲具体工具,读者更容易形成长期可迁移的能力。


本轮新增文件

主文档

操作记录

示例数据目录


本轮没有做的事

这轮仍然是概念与样本建设,没有实际执行:

  • 数据清洗脚本
  • 数据集切分脚本
  • 标注平台部署
  • 训练任务提交

原因不是偷懒,而是教学顺序上的刻意安排:

只有先把“数据对象和治理目标”讲清楚,后面再做脚本和平台,读者才会真正明白自己在搭什么。


下一步最自然的推进

这节课讲完,后面最自然就该进入:

  • 训练和微调

也就是重点讲透:

  • SFT 是怎么喂进去的
  • LoRA 到底改了什么
  • checkpoint 是什么
  • adapter 和 base model 是什么关系
  • 训练完的模型产物长什么样

所以我建议下一课直接推进:

  • 20-第二十课-大模型训练-SFT-LoRA-Checkpoint-Adapter与模型产物原理.md