云镜收藏

稍后阅读

清单保存在当前浏览器,方便下次回来继续阅读。

清单还是空的

在笔记卡片或正文页点击“加入稍后阅读”即可收藏。

卷7 · 工程实战手册

7.5 数据 pipeline 工程:把数据当代码对待

约 4 分钟阅读
全书目录

展开本章目录与同卷章节1. 流水线全景(七个站,一个都不能少)2. 清洗:脏数据的经典形态(图像侧)3. 去重:两层工事4. 标注与合成的质检闭环5. 版本化:数据的 git6. 自测题7. 动手作业8. 延伸资源同卷章节7.1 显存估算速查与 OOM 排查大全7.2 训练调试案例集:十大经典翻车与处置7.3 分布式训练入门:DDP、FSDP 与 DeepSpeed7.4 推理部署与成本估算:把模型变成可运营的服务7.5 数据 pipeline 工程:把数据当代码对待7.6 AI 协作守则:驾驭代码 agent 而不被其驾驭

本章目标:补齐”数据工程”这块最隐性但最值钱的工程能力——一条可复现、可回滚、可质检的数据管线。5.2 讲了”数据为中心的研究观”,8.7 讲了标注规范,这一章讲管线本身。学完标准:能为你的 A1/D1 数据搭出带版本管理的处理流水线。

1. 流水线全景(七个站,一个都不能少)

采集 → 清洗 → 去重 → 过滤 → 标注/合成 → 质检 → 版本化入库

第一原则:数据管线 = 代码。同样要版本控制、要测试、要可回滚——“数据是脏的”不是借口,“数据状态不可知”才是事故。

2. 清洗:脏数据的经典形态(图像侧)

  1. EXIF 旋转陷阱:手机照片的旋转信息存在元数据里——PIL 和 cv2 读取行为不同,训练/推理各自读出一度颠倒的图(经典静默 bug,3.2 的”分辨率不一致”近亲)。修法:入库时统一 ImageOps.exif_transpose 并丢弃 EXIF;
  2. 分辨率/长宽比规范化:按下游统一(VLM 场景记录原始尺寸);
  3. 色彩空间:CMYK/灰度混入 RGB 管线(统一转 RGB);
  4. 损坏文件:下载中断的截断图——Image.verify() 批检;
  5. 内容过滤:模糊图(拉普拉斯方差)、低信息图(纯色)、水印/文字污染(OCR 检出即剔除——除非你在做文档数据)。

文本侧(caption/SFT 数据):语言识别(fastText)、长度分布截断、毒性/NSFW 分类器过滤、格式校验(JSON schema)。

3. 去重:两层工事

  1. 精确去重:图像感知哈希(pHash)/ 文本规范化后 hash——同一张图的字节变体;
  2. 模糊去重:图像用 pHash 汉明距离聚类,文本用 MinHash + LSH(2.4 §1 的工具落地)——近似重复(同一新闻的转载、同一风景的连拍);
  3. 最关键的一道:训练集与评测集的隔离去重(先定评测,再从训练侧剔除与评测近似的样本)——3.7 污染陷阱的供给侧防线。评测集加 canary(独有的蜜罐样本),管线跑完验证 canary 未泄漏。

4. 标注与合成的质检闭环

  • 人工标注:8.7 的三把尺(kappa/锚点/模型预筛)——管线化即”每批次自动算 kappa、锚点混入、模型预标注排队”;
  • 蒸馏标注(LLM 当标注员):先校准后使用——抽 200 条人工对齐,测一致率达标(如 ≥85%)才放行全量;连续监控漂移;
  • 合成数据:生成 → 奖励/过滤器筛选(不合格不入库)→ 混合配比记录(5.2 的合成风险清单是这里的操作手册)。

5. 版本化:数据的 git

最小可行方案(不需要重型工具):

dataset_version: v1.3
source_manifest: urls.csv (hash: a3f...)      # 原始来源清单+校验和
pipeline_commit: git-sha of preprocessing code
transforms: [exif_transpose, dedup_phash6, nsfw_filter@0.9]
stats: {count: 38214, dup_removed: 1207, ...} # 每版本必附统计
eval_split: eval_v2.lock                       # 评测集锁定文件(永不动)

每次管线变更 → 版本号 +1 → 旧版本保留(实验可比性)。进阶工具:DVC / wandb artifacts / HF datasets 的版本机制。论文投稿被问”用了哪个版本的数据”时,这页 yaml 就是答案。

6. 自测题

  1. EXIF 陷阱的机理与修法?(元数据旋转+不同库读取行为不同;入库统一 transpose 并剥离)
  2. 模糊去重的图像/文本各用什么?(pHash 汉明距离 / MinHash+LSH)
  3. “最关键的一道去重”是哪道?为什么?(train-eval 隔离去重——污染使一切实验作废)
  4. 蒸馏标注的放行条件?(抽样人工对齐达阈值才全量+持续监控漂移)
  5. 数据版本化要记录的最小五要素?(来源清单+哈希/管线代码版本/变换清单/统计/评测集锁)
  6. 为什么”数据状态不可知”比”数据脏”更严重?(脏可以洗,不可知则实验不可比、错误不可溯)

7. 动手作业

  1. 写 pipeline.py:对你 8.7/A1 的图像数据跑全流程(EXIF→损坏检→pHash 去重→分辨率统计),输出 §5 格式的 yaml;
  2. 造 20 张”陷阱图”(EXIF 旋转/截断/近重复)喂进管线,验证每个过滤器都报警——给自己埋雷再排雷;
  3. 蒸馏标注校准实验:让 LLM 标 200 条流派标签,与你的金标准算一致率——得到”这条蒸馏管线可不可用”的数字;
  4. 挑战:给管线加 canary 验证步骤(评测集蜜罐检测)。

8. 延伸资源

  • HuggingFace datasets/datatrove 文档——规模化工具
  • 《Deduplicating Training Data Makes Language Models Better》——去重对模型的实证影响
  • DVC 文档——数据版本化的重型方案(了解即可)