Benchmark Contamination
When the test is in the training data — the problem that makes most published model scores impossible to fully trust.
When not to use it
- (It's a hazard, not a technique. The question is when to assume it.)*
- Always, on any public benchmark. The prior should be that contamination is possible, not that it's absent.
- Especially on benchmarks older than the model. Years of discussion, paraphrase and posting.
- Especially on closed models. The decontamination claim is unfalsifiable from outside.
- Never on your own internal data. Nobody trained on your tickets. That's the value.
Reach for something else instead
- (Ways to get an uncontaminated measurement.)*
- Your own thirty examples — from your use case. The only test set nobody has seen.
- Post-cutoff problems — created after the model's training data ends.
- Private held-out sets — effective, and unverifiable from outside.
- Executable tasks — where the answer is computed rather than recalled.
Sources & further reading
- Sainz et al. (2023), NLP Evaluation in Trouble: On the Need to Measure LLM Data Contamination for each Benchmark — the problem stated plainly.
- Golchin & Surdeanu (2023), Time Travel in LLMs: Tracing Data Contamination in Large Language Models — detecting it from outside, without corpus access.
- Zhou et al. (2023), Don't Make Your LLM an Evaluation Benchmark Cheater — how contamination inflates scores, and what it does to comparisons.
Primary sources, listed so you can check the claims on this page rather than take them on trust.
Where people go wrong
- Reading a decontamination claim as a guarantee. It's substring matching against a corpus nobody can fully audit.
- Ignoring indirect contamination. The benchmark file isn't in the corpus; the blog post solving it is.
- Comparing a new model to an old benchmark and treating the gap as progress.
- Missing iterative contamination — a field tuning against a public benchmark for years has fitted to it collectively, and no procedure fixes that.