外观
大模型测试集数据泄露问题分析
内容整理自学习笔记,仅供面试备考参考;不构成录用、培训或考试承诺。
1. 什么是 LLMs 测试集数据泄露问题?
数据泄露(Data Contamination)是指模型测试集的数据被无意地包含在了训练集中。
注意:如果是故意的(比如 train on 测试集),那就是另一个话题了。
背景说明
这种情况在大模型时代是很难避免的。其实在 Common Crawl 刚开始被用作训练集时就有不少人意识到了这个问题。
典型案例:
- 有论文发现,在 T5 所用的 C4 数据集中,包含了 2-50% 不等的 GLUE benchmark 的原题
- 导致 T5 在 GLUE 极亮眼的数据在当时遭到了不小质疑
在此之后,基本所有的 LLMs 在论文或 report 中都会有单独的一章 Data contamination analysis 来证明自己评测的可信性。代表性例子包括:GPT-3、GPT-4、Llama-2。
2. 如何解决 LLMs 测试集数据泄露问题?
最成熟的方法
处理数据泄露最成熟的方法是识别测试集中的已泄露样本和未泄露样本,分别构建 dirty set 和 clean set,然后比较模型在这两个数据集上的性能差异。
典型案例:GPT-3 翻译任务
| 数据集 | BLEU Score |
|---|---|
| 总体成绩 | 43.0 |
| 未泄露样本(clean set) | 40.8 |
| 泄露样本(dirty set) | 47.4 |
| 真实翻译水平(近似) | ~40.3 |
结论:GPT-3 通过强大的记忆力在评测集上取得了额外的优势。其真实的翻译水平应接近 40.3,而不是 43 分的总分。
该方法的局限性
在实际研究或开发过程中,这种方法很难复刻:
| 问题 | 说明 |
|---|---|
| 训练数据不公开 | 大部分常用的基座模型(包括一众中文大模型和 Llama-2)都没有开源其训练数据 |
| 数据量庞大 | 即使拿到训练数据,其庞大的数据量也会使整个处理过程非常耗时 |
示例:在 Llama-2 中为了识别测试集的数据泄露,在 PySpark 1500 核 cluster 上运行了超过 7 个小时。
3. 是否可以避开训练集来处理数据泄露问题?
针对该问题,可以做出一个假设:任何在网络上能够找到的测试集题目,都有很大的风险被包含在 LLMs 的训练数据中。
可以直接使用搜索引擎来区分测试集中的样例,将所有测试样例分为三类:
| 类别 | 说明 |
|---|---|
| 干净样例 | 网络上找不到对应测试样例的题目或答案 |
| 题目泄漏样例 | 网络上能够找到原题,但答案并没有一起出现 |
| 题目-答案同时泄漏样例 | 测试样例的原题和答案同时出现在同一网页上 |
3.1 如何判断网络上是否有原题?
判断标准:有 80% 以上的字符与测试样例完全重叠(用 meteor 来测量)。
3.2 如何判断答案是否存在?
判断标准:使用完整的字符串匹配。
3.3 性能差异对比
比较模型在以上三个类别的性能差异。以 C-Eval 为例:
- Average:模型的总分
- All Dirty:包含了所有在网上能找到原题的测试样例
- Input-and-Label Contaminated:网上能同时找到原题和答案的样例
分析结论
| 模型 | 总分差距 | clean vs 泄露差距 | 分析 |
|---|---|---|---|
| Qwen-7B vs Baichuan | Qwen 超越 Baichuan 整整 3% | - | 仅看总分,差距明显 |
| Qwen-7B | - | 准确率超越 clean set 整整 5.5% | 很可能说明 Qwen 在 C-Eval 上有潜在的过拟合现象 |
| Baichuan | - | clean set 和泄露样例差距仅 1.41% | 差距较小 |
| Qwen vs Baichuan(clean set) | 仅 1.1% | - | 模型能力的实际差距可能并没有那么大 |
4. 常见测试集有多少比例的数据泄露?
仔细观察下来,常见的 LLMs 测试集均有很严重的数据泄露现象。
| 测试集 | 数据泄露比例 | 来源 |
|---|---|---|
| C-Eval | 超过 46.14% | Common Crawl |
| MMLU | 接近 37% | Common Crawl |
警示:如此高比例的数据泄露意味着许多大模型评测排行榜的排名可能并不能真实反映模型能力,在解读评测结果时需谨慎对待。