数据划分、泄漏与污染
本节目标
按真实生成单位划分开发、验证和测试数据,识别直接、近重复、语义和过程泄漏,并建立公开 Benchmark 的污染风险登记。
直觉解释
如果同一客户会话的前半段在开发集、后半段在测试集,模型可能识别上下文模板而非学会任务。公开测试题被训练或反复调参使用后,分数衡量的也可能是记忆和适配,而不是对新任务的泛化。
核心概念
- split leakage:同源或可推导信息跨入不同划分。
- test contamination:测试样本、答案或近似变体进入训练、提示库、检索库或调参过程。
- evaluation overfitting:即使没训练模型,反复观察测试结果并改系统也会对测试集过拟合。
- group split:按用户、文档、模板、事件或题目家族整体划分。
- temporal split:用时间边界模拟对未来数据的泛化。
- hidden test:不公开输入或答案,由受控服务运行;降低风险但牺牲部分透明性和独立复现。
分步骤方法
- 找出样本真正的“生成单位”:用户、文档、会话、模板、代码仓库或原始事件。
- 在去重前保留来源与 group ID;按 group 划分,而不是逐行随机。
- 先冻结测试,再从剩余数据生成开发/验证;所有数据变换只用允许的划分拟合。
- 检查完全重复、规范化重复和近重复;对翻译、改写和同答案模板做人工抽查。
- 记录测试暴露面:公开仓库、网页、论文附录、提示、检索库和模型供应商。
- 运行前声明已知训练数据边界和训练排除能力;无法确认时标注“污染未知”。
- 限制测试查询次数,保存提交历史;重大调参后使用新留出或新版本。
- 报告污染风险和检测方法,但不要把“未检测到”写成“确定无污染”。
建立暴露与污染登记
不同风险需要不同证据,不能用一次字符串去重统称“无污染”:
| 风险面 | 要记录的问题 | 可用控制或证据 |
|---|---|---|
| 训练/后训练污染 | 题目、答案或近变体是否进入预训练、微调、蒸馏或提示优化? | 供应商披露、训练截止、可审计排除、成员/顺序等检测及其局限 |
| 运行时可发现性 | Agent评测时能否经浏览器、搜索、RAG或工具找到题目与答案? | 网络/索引快照、允许域、查询Trace、隔离赛道 |
| 开发者适配 | 开发者是否看过测试内容、细粒度反馈或反复提交结果? | 访问记录、提交预算、反馈粒度、独立最终留出 |
| 维护链泄漏 | 私有case、grader、日志或答案是否从仓库、服务或报告泄露? | 最小权限、审计、轮换、保留与删除记录 |
每个系统分别标为confirmed、evidence-of-risk、not-detected或unknown,同时记录检测版本、覆盖和误报/漏报边界。not-detected只表示指定方法没有发现,unknown也不能被填成否。对具浏览能力的Agent,预训练污染与评测时直接检索到答案是两条独立风险链。
结果报告至少给出按暴露风险分层的敏感性分析,以及后截止日期、受控新题或其他较低暴露子集的结果。若污染检测改变排除集,要同时报告原始与调整后分数、排除规则和case数量,避免把事后清理变成选择性提升。
数据版本与Datasheet
每个数据版本至少记录来源、许可/授权、采集时间窗、生成单位、去重方法、split规则、已知污染、敏感信息处理、标签流程和适用/不适用用途。内容哈希能识别文件是否变化,却不能证明来源合法或标签正确。修复标签但不改变任务总体可发布补丁版本;改变任务分布、测试暴露方式或评分含义时应升大版本并停止跨版排名。
示例
错误的逐行随机划分:
doc-17/chunk-1 -> train
doc-17/chunk-2 -> test正确的组级划分:
doc-17/* -> train
doc-29/* -> testAgent 数据也一样:同一工作流模板生成的表面改写应共享 family ID。时间敏感知识可用截止日期之后的新事件构建滚动测试,但仍需核对事件是否已公开且是否可能进入模型或检索数据。
常见错误与排查
- 只查字符串完全相同:翻译、选项重排和同义改写仍可泄漏;结合来源、规范化、相似检索与抽查。
- 先增强再划分:一个原样本的变体可能跨集;先按 family 分组,再在允许的划分内增强。
- 公开答案后永久不更新:公开有利于审计,但污染风险随时间上升;准备版本轮换或受控测试。
- 隐藏测试等于绝对安全:提交可被反复探测,服务日志也可能泄漏;限制频率并审计异常。
- 把污染检测当定罪工具:闭源训练数据往往不可见,检测有误差;报告证据强度和替代解释。
练习
- 给 RAG chunk、客服会话和代码仓库任务分别选一个 group key。
- 画出数据从采集到提交的暴露面,标注可能泄漏答案的节点。
- 为公开 Benchmark 制定测试轮换、查询限额和污染声明模板。
自测
- 为什么逐行随机划分常常过于乐观?因为相关样本跨集,破坏独立性。
- 没有完全重复是否证明没有污染?不能;还可能有近重复、翻译、语义或过程污染。
- 一个团队每周看测试分数再调 prompt,是否发生训练数据污染?未必,但已经发生 evaluation overfitting。
小结与下一步
独立测试证据来自来源隔离、组级划分、暴露记录和受控使用,单个相似度算法不能兜底。下一步进入 基线、指标与可比运行,固定真正可比的执行条件。
参考资料
- NIST AI 600-1:记录训练与测试交叉污染(获取日期:2026-07-21)
- OpenAI: A shared playbook for trustworthy third party evaluations(发布于2026-05-29;污染与运行有效性检查)
- Datasheets for Datasets原始论文页面(获取日期:2026-07-21)
- NLP Evaluation in Trouble原始论文(获取日期:2026-07-21)
- Stop Uploading Test Data in Plain Text原始论文(获取日期:2026-07-21)
- Investigating Data Contamination in Modern Benchmarks原始论文(获取日期:2026-07-21)
- An Open-Source Data Contamination Report for Large Language Models(原始论文;检测覆盖与分层报告案例)
- Proving Test Set Contamination in Black-Box Language Models(ICLR 2024原始论文;黑盒检测案例)