数据泄露与测试集问题
概述
**数据泄露(Data Contamination / 数据污染)**是指测试集的数据被无意包含在了模型的训练集中,导致模型评测结果虚高,无法反映模型真实能力。这在大模型时代是一个普遍且严重的问题。
什么是测试集数据泄露
- 定义:测试集中的样本(或答案)在训练前就已经出现在训练数据中,模型在评测时相当于"背题"
- 注意:这里指无意包含,如果是故意train on测试集就是作弊了
- 大模型训练数据量极大,来源广泛(Common Crawl等互联网数据),很难避免测试集泄露
问题的历史
早在T5模型的时候,研究者就发现:
- T5使用的C4数据集中,包含了2%-50%不等的GLUE benchmark原题
- 导致T5在GLUE上的亮眼结果遭到质疑,因为高分可能来自记忆
从此之后,主流大模型论文都会专门有一章Data contamination analysis来证明评测结果的可信性,比如GPT-3、GPT-4、LLaMA-2都做了相关分析。
GPT-3 案例研究
GPT-3在WMT16 En->De翻译任务得到43 BLEU:
- 如果区分干净样本(clean,未泄露)和泄露样本(dirty):
- 干净样本:40.8 BLEU
- 泄露样本:47.4 BLEU
- GPT-3真实翻译水平接近40.3,而不是43分总分
- 可见泄露会显著高估模型性能
如何检测和处理数据泄露
标准方法:区分dirty/clean
成熟的处理方法是:
- 识别测试集中哪些样本泄露了,哪些没有
- 分别在dirty set和clean set上评测,比较性能差异
- clean set性能才是模型真实能力
存在的问题:
- 需要获取base模型完整的训练数据才能比对
- 大部分流行基座模型(包括LLaMA-2和多数中文大模型)不开源训练数据
- 即使拿到数据,庞大的数据量处理起来非常耗时。比如LLaMA-2为了检测数据泄露,在PySpark 1500核集群运行了超过7小时。
基于搜索引擎的检测方法
一种更实用的假设:任何能在公共互联网找到的测试题,都有很大风险被包含在训练数据中。
可以直接用搜索引擎区分三类样本:
| 类别 | 定义 |
|---|
| 干净样本 | 网络上找不到原题和答案 |
| 题目泄露 | 能找到原题,但找不到答案 |
| 题目+答案同时泄露 | 原题和答案都能在同一网页找到 |
判断标准:
- 原题判断:有80%以上字符与测试样例完全重叠
- 答案判断:完整字符串匹配
案例分析:C-Eval上的Qwen vs Baichuan
结果显示:
- 如果看总分(Average),Qwen-7B在C-Eval上比Baichuan高整整3%
- 但Qwen在泄露样本上准确率比干净样本高5.5%,说明存在过拟合
- Baichuan在干净样本和泄露样本差距只有1.41%
- 如果只比较干净样本,两个模型实际差距只有1.1%,远小于表面差距
常见评测集泄露情况
根据实际检测,常见LLM评测集都存在严重的数据泄露:
| 评测集 | 泄露比例 |
|---|
| C-Eval | 超过46.14%的测试样例能在Common Crawl找到原题 |
| MMLU | 接近37%的测试样例完整出现在Common Crawl中 |
这么高比例的泄露,会导致:
- 排行榜上名次不准确,虚高模型性能
- 错误估计模型真实能力
对模型评测的影响
- 排行榜失真:泄露更严重的模型排名更高,但实际能力不一定更强
- 无法准确比较:不区分clean/dirty的话,很难说清楚两个模型真实差距
- 高估模型能力:论文报告的性能比实际高,误导研究方向
面试常见问题
-
什么是大模型评测中的数据泄露问题?
- 指测试集样本被无意包含在训练数据中,模型记住了答案导致评测结果虚高
- 大模型训练数据来自互联网,很难避免这个问题
-
为什么数据泄露在大模型时代更严重?
- 大模型训练数据量极大,覆盖整个互联网,测试题很可能已经被爬取进去
- 多数大模型不开源训练数据,很难彻底检测去除
-
如何基于网络搜索检测数据泄露?
- 假设网络上能搜到的题很大概率已经在训练数据里
- 把测试样例分为干净、题目泄露、题目答案都泄露三类
- 分别评测比较性能差异,就能看出泄露影响
-
数据泄露对评测结果有什么影响?
- 会导致性能虚高,排行榜失真,无法反映模型真实能力
- 不处理的话,比较不同模型时会得出错误结论
-
GPT-3翻译任务案例说明了什么?
- GPT-3在所有样本上得到43 BLEU,但干净样本只有约40.8
- 泄露样本能达到47.4,说明数据泄露会显著高估性能
- 区分干净和脏样本才能得到真实结果
-
常见评测集的数据泄露情况如何?
- C-Eval超过46%的样本能在Common Crawl找到
- MMLU也有接近37%的样本泄露
- 普遍都有比较严重的泄露问题