Skip to content

Gap-K% has numbers, and it is the smallest gap of the three

datasets/results/contamination-openstack-6mo-with_context-gapk.json. Closes the open item that Gap-K% had an implementation and no measurement, the saved results having kept scores rather than per-token statistics. OpenStack, six months each side, hunks with three context lines, 1,971 eligible post-cutoff examples against 2,502 pre-cutoff.

statistic post-cutoff pre-cutoff gap
Min-K% -7.4463 -7.3167 -0.1296
Min-K%++ -1.7955 -1.7208 -0.0746
Gap-K% (arXiv:2601.19936) -1.8168 -1.7610 -0.0558
guided completion (null instrument) 0.0113 0.0078 +0.0035

The pre-cutoff side scores higher on every membership statistic, which is the direction contamination would produce, and the size is what decides whether that means anything. Gap-K% exists to be robust to distribution shift -- it reads the distance between the top-1 token's log-probability and the observed token's, smoothed over windows, so the general difficulty of a passage divides out. It returns the smallest separation of the three, 57% of Min-K%'s and 75% of Min-K%++'s.

That is the reading the earlier entry already reached by a different route: the separation these statistics show is consistent with the two windows being differently distributed rather than differently memorized, by Meeus et al.'s criterion (SoK, SaTML 2025). A shift-robust statistic shrinking the gap is what that hypothesis predicts. Contamination protection continues to rest where it always did, on the post-cutoff window postdating the checkpoint's publication -- 2024-10-01 against 2024-09-17, recorded in the run.

Guided completion sits at 0.011 and 0.008, at its floor, as registered.

A defect this run exposed, fixed for the next one. The window-cost diagnostic computed gap_k_windows for every sequence and then sliced [:1], so a field named windows reported the first example while reading as though it had certified the corpus. What it actually says is that one post-cutoff example lost none of its 61 windows and one pre-cutoff example lost none of its 37. The aggregate now sums positions, undefined positions, windows and dropped windows over a whole side and counts the examples that lost anything or scored nothing. The scores above are unaffected, since gap_k_percent was computed correctly per example and aggregated correctly; only the diagnostic was truncated. The true corpus-wide cost needs the next battery run, and is not worth two hours of GPU on its own -- it rides along with the next one.