Measuring what a corpus installs

Austin Wagner

A seven-arm ablation on two published corpus-design interventions, run against real cited prose. One survived, one was inert under every condition its source specifies, and a third contrast came out decisively negative. Three of five results are nulls, and they are the reason the other two mean anything.

Problem
Perplexity cannot grade a corpus intervention. A model can memorise text word for word and extract none of the facts in it.
Instrument
2,627 four-way cloze items generated from a wiki's own citation apparatus, masking only numeric values.
The floor, set first
An unexposed model already scores 52.3% against a 25.0% chance baseline, because surrounding prose constrains the answer. Every result is lift over that floor.
Design
Seven arms, three seeds each, exact McNemar over the items each pair disagrees on, run per seed and deliberately not pooled.
Stack
Python, PyTorch, GPT-2, Slurm on a university cluster.

The floor is the finding nobody publishes

Establishing that an unexposed model already answers 52.3% of the items, against 25.0% by chance, is what makes every later number interpretable. Surrounding prose constrains a masked value far more than the chance baseline suggests, so an intervention that lifts raw accuracy to sixty percent has done almost nothing.

A floor established after the results is a floor chosen with knowledge of the answer.

What survived and what did not

ContrastMeanVerdict
Dilution with web text−6.14decisive, every seed
Sentence-permuted copies+2.94decisive, every seed
Domain marker+0.36not distinguishable from noise
Marker with cooldown−0.22null
Marker with loss-masking+0.06null, seeds disagree on sign

The marker intervention is inert here under all three conditions its source specifies, supplied individually and together. That is a published result failing to replicate on a different corpus type, and reporting it plainly is the point.

The error I corrected in my own analysis

An earlier version of this reported markers as a real effect, on a one-sample t of 14.0 over three per-seed differences. That was an artifact. The arms share one deterministic item set, so the same items are consistently easy or hard, and the small spread was measuring that correlation rather than the effect.

The paired test over all 2,627 items finds nothing. The finding was retracted and the page rewritten. This is precisely the failure mode paired testing exists to prevent, and I walked into it before catching it.

A suspiciously clean t-statistic is a reason to check the independence assumption, not a reason to celebrate.

What the controls turned up

Writing the controls section surfaced a real defect in the training service: the corpus splitter divides by file, and its single-file branch returns the same file as train, validation and test. Every arm's corpus is a single file, so every validation and test loss in every run manifest is a training-set loss, and so is every end-to-end training test in that service, 91 fixtures deep.

The published results are unaffected, and that is checkable rather than asserted: no arm uses validation loss for anything, and the cloze set is the only cross-arm metric. The defect was pinned with a test that declared it known, so a fix would turn the test red; the fix landed three days later, splitting a one-file corpus by line, and that test became the fix's own:

def test_split_corpus_single_file_partitions_its_lines_disjointly(tmp_path: Path) -> None:
    """The headline fix: one file yields a real holdout, not itself three times.

    (...) Asserted as the exact three tuples, because the defect
    this replaces -- returning the whole corpus as all three partitions -- also
    satisfies "validation is non-empty".
    """

services/Model-Trainer/tests/test_corpus_and_dataset_edges.py, one sentence elided; the fix is commit 3ce75c2f0.

Record

Every figure above is bound to a named section of the wiki page extraction-ablation and checked mechanically before this page can deploy. The underlying experiment has its own page in a second wiki carrying the per-arm data and the primary sources the interventions come from.

Known limits. The scale question is answered further than this page goes and not in the direction it looks: a four-rung arm has since run to 1.5 billion parameters, where the marker contrast turns negative rather than staying null. That is not evidence the effect emerges at scale, because the instrument sharpens by a factor of thirteen down the ladder, so the largest rung may simply be the first with the power to see something present throughout. A claim about statistical power, not about models, and unresolved. The augmentation arm is reported as a lower bound rather than as the intervention, because coverage was measured rather than assumed: of the prose sentences available, only 6.21% admit a deterministic rewrite. There is no public repository to link for the corpus, which is the author's own wiki. Until 2026-09-14 this page described the split defect as pinned and open; it had been fixed on 2026-08-20.

Sources

  • The corpus, the generator and the per-item outcome files are in the author's private research wiki; every accuracy and contrast above was recomputed from those files on 2026-09-14 and matched to two decimals.
  • The training and scoring service: API/services/Model-Trainer; the splitter, dataset_builder.py; the defect's pin, 1278c605.
  • The interventions tested: metadata conditioning, Gao et al. 2025; the extraction-versus-memorisation result the instrument rests on, Allen-Zhu and Li 2024.
  • This article's manifest: provenance.json.