正文
引言
基准测试是机器学习研究的硬通货。一个模型只要在某个基准上达到 SOTA,就能收获引用、媒体报道,偶尔还会顺便孵化出一家融资充足的创业公司。一个模型如果在基准上表现糟糕,那它要么被视为研究失败,要么被解释成“这个基准本身有问题”,具体取决于该模型是否出自设计该基准的同一团队。本文关注第三种可能:模型之所以在基准上表现很好,是因为它以前见过这个基准。那么问题就变成了,它到底算不算“表现很好”。
我们使用“基准污染(benchmark contamination)”来描述测试数据出现在训练数据中的现象。需要承认的是,这个术语在过去五年里大约已经被提出过四十七次,提出者们显然也没有对彼此的文献综述做“基准检查”。我们的贡献是完成迄今最全面的污染分析,覆盖 12 个任务类别下的 127 个基准,并报告一组即便按本领域标准来看也相当糟糕的结果。
本文其余部分安排如下。第 2 节回顾相关工作,我们确信自己读过这些文献,尽管也承认其中部分引用可能是写作助手幻觉出来的。第 3 节介绍方法。第 4 节呈现结果。第 5 节讨论影响。第 6 节总结。
方法
我们的污染检测流程 BenchmarkSniffer v1.0 的工作方式如下。给定基准测试集 $\mathcal{T} = {t_1, t_2, \ldots, t_n}$ 和预训练语料 $\mathcal{C}$,我们使用大小为 32 token 的滑动窗口,计算每个 $t_i$ 与 $\mathcal{C}$ 中任意文档之间的最长公共子串。若重叠程度超过阈值 $\tau$,则将该测试样本标记为污染。这个阈值是我们在验证集上反复跑方法,直到得到一个“看起来还讲得过去”的数字后选出来的。我们设定 $\tau = 0.7$。对 $\tau \in {0.5, 0.6, 0.8}$ 的敏感性分析都得到了一些我们不太喜欢的结果。
我们将 BenchmarkSniffer 应用于 127 个基准以及三套预训练语料:Common Crawl(2019–2023)、The Pile,以及一个名为 "misc_internet_text_do_not_use_v3.jsonl" 的语料文件。后者是我们在实验室共享服务器上发现的,我们决定不再深究。
结果
在分析的 127 个基准中,有 119 个(93.7%,为了修辞效果在摘要里四舍五入成 94%)至少包含一个污染样本。在看起来“干净”的 8 个基准里,有 3 个是我们在本研究期间自己生成的合成数据集,因此不可能出现在训练数据中。剩余 5 个里,4 个是 2026 年 1 月之后才发布的,另 1 个是专门用来评估污染检测方法的基准,我们认为这在哲学上颇有意思。
在受污染基准上评估时,模型平均准确率为 84.3%。同一批模型在我们基于相同任务分布构建的干净保留重评估集合上,平均准确率降至 51.2%,对多数任务而言仅略高于随机水平。我们指出,51.2% 从技术上讲确实高于随机,并鼓励读者在将该领域进展描述为“不存在”之前认真权衡这一点。
讨论
这些结果表明,我们一直称之为语言模型“泛化”的相当大一部分,更准确的描述其实是“记住了测试答案”。我们并不认为这尤其是谁的错,除非你把责任归给那些构建基准、在互联网数据上训练、却在评估前不做检查的研究者。也就是说,基本上每个人都有份。
我们曾考虑提出一些具体补救方案,包括动态生成基准、使用受限访问的保留语料、以及强制性的污染审计。但我们并没有在自己的基准上实现任何一种,而且也不打算实现。
参考文献
- Reviewer #2 (2024). “你的论文很烂。” Journal of Rejected Submissions, 1(1), pp. 1-1. https://doi.org/10.0000/rejected.2024.001
- Nobody, N. (2023). “这篇我也没读。” Proceedings of Things I Skimmed, 42, pp. 404-404.
- Someone, A., et al. (2022). “我们故意没引用的相关工作。” IEEE Trashactions, 1(1), pp. 1-99.
- Benchmark, B., & Contamination, C. (2021). “我们的基准没问题的初步证据。” Workshop on Benchmarks We Haven’t Checked Yet, pp. 1-4.
- Test, T., et al. (2020). “根本没有问题。” Proceedings of the International Conference on Reassurance, pp. 200-200.