卷7 · 工程实战手册
7.5 数据 pipeline 工程:把数据当代码对待
展开本章目录与同卷章节
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. 清洗:脏数据的经典形态(图像侧)
- EXIF 旋转陷阱:手机照片的旋转信息存在元数据里——PIL 和 cv2 读取行为不同,训练/推理各自读出一度颠倒的图(经典静默 bug,3.2 的”分辨率不一致”近亲)。修法:入库时统一
ImageOps.exif_transpose并丢弃 EXIF; - 分辨率/长宽比规范化:按下游统一(VLM 场景记录原始尺寸);
- 色彩空间:CMYK/灰度混入 RGB 管线(统一转 RGB);
- 损坏文件:下载中断的截断图——
Image.verify()批检; - 内容过滤:模糊图(拉普拉斯方差)、低信息图(纯色)、水印/文字污染(OCR 检出即剔除——除非你在做文档数据)。
文本侧(caption/SFT 数据):语言识别(fastText)、长度分布截断、毒性/NSFW 分类器过滤、格式校验(JSON schema)。
3. 去重:两层工事
- 精确去重:图像感知哈希(pHash)/ 文本规范化后 hash——同一张图的字节变体;
- 模糊去重:图像用 pHash 汉明距离聚类,文本用 MinHash + LSH(2.4 §1 的工具落地)——近似重复(同一新闻的转载、同一风景的连拍);
- 最关键的一道:训练集与评测集的隔离去重(先定评测,再从训练侧剔除与评测近似的样本)——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. 自测题
- EXIF 陷阱的机理与修法?(元数据旋转+不同库读取行为不同;入库统一 transpose 并剥离)
- 模糊去重的图像/文本各用什么?(pHash 汉明距离 / MinHash+LSH)
- “最关键的一道去重”是哪道?为什么?(train-eval 隔离去重——污染使一切实验作废)
- 蒸馏标注的放行条件?(抽样人工对齐达阈值才全量+持续监控漂移)
- 数据版本化要记录的最小五要素?(来源清单+哈希/管线代码版本/变换清单/统计/评测集锁)
- 为什么”数据状态不可知”比”数据脏”更严重?(脏可以洗,不可知则实验不可比、错误不可溯)
7. 动手作业
- 写
pipeline.py:对你 8.7/A1 的图像数据跑全流程(EXIF→损坏检→pHash 去重→分辨率统计),输出 §5 格式的 yaml; - 造 20 张”陷阱图”(EXIF 旋转/截断/近重复)喂进管线,验证每个过滤器都报警——给自己埋雷再排雷;
- 蒸馏标注校准实验:让 LLM 标 200 条流派标签,与你的金标准算一致率——得到”这条蒸馏管线可不可用”的数字;
- 挑战:给管线加 canary 验证步骤(评测集蜜罐检测)。
8. 延伸资源
- HuggingFace
datasets/datatrove文档——规模化工具 - 《Deduplicating Training Data Makes Language Models Better》——去重对模型的实证影响
- DVC 文档——数据版本化的重型方案(了解即可)
