nano-gpt-data-curation
claude-opus-4-8
nano-gpt-data-curation — graded by the task's verifier against a measured baseline.
- backend
- modal
- variant
- claude claude-opus-4-8
- metric
- held-out multi-domain perplexity
- actions
- 61
- duration
- 43m
- recorded
- 2026-08-04
run iddclm-nano-curation__iADFZ4p
Score
reward
330.960
Summary
All deliverables are complete and validated. Final summary:
Result
Curated the 182k-doc web pool down to the best 12M-token training set, cutting held-out dev perplexity from 458 (random baseline) → 345 — a 25% reduction.
Deliverables
- `/workspace/submission/selection.json` — 60,000 priority-ordered ids (unique, in-range, packs the full 12M-token budget).
- `/workspace/submission/curate.py` — reproduces the selection from a stated criterion; uses deterministic crc32 hashing so a fresh run reproduces the file bit-for-bit.
- `/workspace/claim.md` — Hypothesis / Mechanism / Falsification / Transfer.
Method (DSIR-style importance selection + prose gate + dedup)
- Target-likeness score — estimate a target word n-gram distribution by decoding the disclosed dev sample (
multi_dev.npy), a background distribution from the raw pool, and rank each doc by its mean per-feature log-likelihood ratio (hashed unigram+bigram features, K=2²²). - Prose quality gate — this was the decisive fix. Bare log-ratio ranking puts degenerate junk (prime-number tables, plant-name galleries, hashtag spam) at the very top, because a doc repeating a few target-like tokens gets a near-perfect mean. Gating on function-word ratio, digit ratio, type-token ratio, and word length removes the 23.9% of the pool that is non-prose.
- Near-duplicate removal — dropping repeated docs (360→349).
What I verified along the way
- Random baseline 458 → gated DSIR 360 → +dedup 349 → +larger deterministic hash 345.
- A length-blended variant was worse (353) — quality-per-token beats raw length.
- Observable grounding the mechanism (independent of final PPL): selection function-word ratio 0.408 vs random pool 0.356; 24% of the pool fails the prose gate.
The one caveat worth stating plainly: dev PPL is measured on multi_dev.npy; the official score is a hidden disjoint sample of the same domain, so the absolute number will move slightly, but the selection is built to match the broad target distribution, not the dev sample specifically.