Text set in serif type with a dotted bar in the margin was drafted by an LLM (claude-fable-5) and sometimes reviewed by the author. The rest is the author's own. How to read this site
vocab_holdout25
20260614_215604_vocab_holdout25 · complete · published 2026-07-20 · seed 42
part of investigation scaling → vocabulary-scale
Intent
These notes and the manifest were backfilled on 2026-07-05 from runs
that predate the manifest format, so both are retroactive. The six
sweeps ran as chain scripts between 2026-06-14 and 2026-07-04 and
are archived under runs/_archive/. Four arms (vocabulary 20,
40, 80, 160) were extended
from five to ten seeds on 2026-06-15 and the other two (vocabulary 60, 120) on
2026-07-05, with seeds continuing from base 42 throughout, so every arm now
carries ten. The original commands used the pre-rebase CLI, and the arguments
in experiment.yaml are their current-grammar equivalents.
This experiment asks whether the paper's agreement result depends on the particular vocabulary size and holdout it happened to use. It runs a full Zipfian sweep (Z from 0 to 3.0 in steps of 0.2, ten seeds per point) at each of six vocabulary sizes from 20 to 160 nouns and verbs, and at every size it holds the unseen fraction of noun-verb pairings fixed at a quarter, so the holdout count rises with the vocabulary (5, 10, 15, 20, 30, 40). The model is held at the paper's architecture, 256 wide with two layers and four heads, so the only things that change across arms are the vocabulary and its matching holdout.
Background
Holding the holdout fraction fixed means a larger vocabulary gives the model more seen pairings to induce the agreement rule from.
Hypothesis
If evidence is what limits generalization, then peak unseen_mismatch should rise with vocabulary size, or at least not fall, and the peak should arrive at a lower concentration as vocabulary grows, so its Z should move left. If instead generalization degrades at the large vocabularies, that points to the fixed model capacity, 256 wide with two layers and four heads, as the binding constraint rather than the amount of evidence.
Setup
data regime (all arms): single-dataset-recycled — 1 dataset(s) × 1200 iters each = 4.0 epochs per dataset
Replicate this experiment
Get the code at this exact version:
git clone https://github.com/ClaireHobbs/imagining-syntax
cd imagining-syntax
git checkout cab1539
pip install -e ".[dev]"
Download the config (experiment.yaml) and run:
imsyn exp run experiment.yaml
Checks
PASS children_complete PASS replicate_coverage PASS instrument_consistent
Results — unseen_mismatch (mean ± sd over 10 seeds)
Evaluation data: seen_* generated at each grid point's own training α · unseen_* = held-out pairings, uniform (α-independent) · 1000 pairs per condition
- Each probe is a minimal pair: a grammatical sentence and its verb-number-flipped twin. The model scores correct when it assigns the grammatical version higher probability; accuracy = % correct over 1000 pairs per condition.
- seen_match / seen_mismatch — noun–verb pairings that occur in training, sampled at the same α the model was trained on (matched per grid point, so this eval data varies with the training α)
- unseen_match / unseen_mismatch — held-out noun–verb pairings that never occur in training, sampled uniformly (α = 0), so their difficulty is identical across all arms and training αs
- match vs mismatch — whether the prepositional objects agree in number with the subject; mismatch places attractor nouns between subject and verb (the AGREE-RECENT trap)
| arm | peak over α (end of training) | per-seed | flags |
|---|---|---|---|
| v020_h05 | 81.0 ±7.9 @ α=2.4 | ||
| v040_h10 | 88.0 ±6.0 @ α=1.4 | ||
| v060_h15 | 89.5 ±7.2 @ α=1.6 | ||
| v080_h20 | 85.4 ±12.7 @ α=1.8 | ⚠ seed_split: range 49.6-95.1 (1 low / 7 high of 10) | |
| v120_h30 | 85.5 ±15.9 @ α=1.6 | ⚠ seed_split: range 50.5-99.2 (2 low / 6 high of 10) | |
| v160_h40 | 81.5 ±12.5 @ α=1.6 | ⚠ seed_split: range 51.9-97.8 (1 low / 3 high of 10) |
Conclusions
The intermediate peak in unseen_mismatch that the paper reports appears at every vocabulary size and holdout tested here, so it is not an artifact of the default vocabulary of 40 or its holdout of 10. What does not carry over is the hypothesis that a larger vocabulary keeps raising that peak. The peak grows only up to vocabulary 60 and then falls back, and the largest vocabularies degrade in the way the hypothesis attributed to fixed model capacity.
Every arm traces the same shape (the per-arm curves are in
images/comparison_unseen_mismatch.png). At the uniform end of the
sweep, α = 0, mean unseen_mismatch sits below the 50 chance
line for all six vocabularies, which is the model
agreeing with the nearest noun rather than with the subject.
Accuracy then climbs to a peak at an intermediate α and drifts back down
across the concentrated tail. The arm that matches the paper's own
configuration, vocabulary 40 with a holdout of 10, peaks at 88.0 at α = 1.4,
so the shape the paper describes is not specific to that one choice of
vocabulary or held-out fraction.
The height of the peak rises and then falls as vocabulary grows. Mean peak
unseen_mismatch runs 81.0 at vocabulary 20, 88.0 at 40, and 89.5 at
60, then declines through 85.4 at 80, 85.5 at 120, and 81.5 at 160
(images/peak_vs_vocab-size.png). More seen pairings
help up to about vocabulary 60, after which the peak gives the gains back, so
the prediction that it should rise or at least hold describes only the first
half of the range.
Referenced by (6 direct, 1 transitive)
Direct references:
- Capacity is already binding at vocabulary 120
- The peak drops and moves right at a one-third holdout
- The peak holds its location and height at a third holdout
- Width and depth are different axes, and bigger is not better
- A robust peak whose location is set by the budget
- The peak is universal, capacity caps it, and the holdout fraction is second order
Transitive (depth 1):
The peak also does not keep moving toward lower concentration. The smallest vocabulary needs the most concentration to reach its peak, at α = 2.4, but every vocabulary from 40 upward peaks in a narrow band between α = 1.4 and 1.8. The leftward shift the hypothesis predicted therefore appears only once, between the smallest vocabulary and the rest, and not as a continuing trend. Past roughly 40 nouns and verbs, extra vocabulary buys the model no further tolerance for flatter pairing distributions.
The decline at the large vocabularies has the signature of a capacity limit
rather than a shortage of evidence, and the clearest sign is in the conditions
that are otherwise easy. From vocabulary 20 through 80, the other three
conditions sit at their ceiling: seen_match at 100.0, seen_mismatch
just above 99, and unseen_match at 100.0. At vocabulary 120 and 160 even
these fall, seen_match to 98.2 then 96.5, seen_mismatch to
97.7 then 96.5, and unseen_match to 89.8 then 85.2
(images/comparison_by_condition.png). When the easiest condition,
memory of a trained pairing with attractors that help rather than interfere,
can no longer reach 100, the model has run short of room to fit the material
it was given, which is what the hypothesis meant by capacity binding.
Referenced by (3 direct, 1 transitive)
Direct references:
Transitive (depth 1):
The spread across seeds widens the same way. Through vocabulary 60 the ten
replicates of each peak hold together, but from vocabulary 80
upward they split into seeds that learn agreement and seeds that do not. At
vocabulary 80 the peak's seeds range from 49.6 to 95.1, with seven of the ten
high and one collapsed near chance. At 120 they range from 50.5 to 99.2, with
six high and two near chance, at 50.5 and 59.9. At 160 the split is widest:
only three seeds are clearly high, one sits at 51.9, and the rest are
scattered between. The seeds near 50 have settled on the nearest-noun
shortcut, and unseen_match splits the same way at 120 and 160.
Because the mean then sits in the gap between the two groups and describes no
single run, this is seed bimodality rather than ordinary spread, and it
deepens as vocabulary grows, in step with the capacity reading.
Referenced by (6 direct, 2 transitive)
Direct references:
- Capacity is already binding at vocabulary 120
- The approach to the peak is split by seed
- At vocabulary 60 the holdout fraction changes nothing
- A split that is real at a fixed budget, and a budget that is doing much of the work
- The intermediate peak is real but it is a slice of a moving target
- The peak is universal, capacity caps it, and the holdout fraction is second order
Set against the model-size study, the two experiments meet in the middle from opposite directions. The size study shrank the model at a fixed vocabulary; this one holds the model fixed and grows the vocabulary, so the same 256-dimensional tied embedding has to span an ever larger token inventory. Both locate the ceiling at the embedding's capacity relative to the number of tokens it must represent, not at the amount of pairing evidence available. On this reading the large-vocabulary decline should ease if the model is made wider, which the follow-ups below would test.
Referenced by (2 direct, 1 transitive)
Direct references:
Transitive (depth 1):
Follow-ups this suggests:
- A width sweep at the largest vocabulary, for example a 512-wide model at vocabulary 160, to see whether the decline reverses when capacity is added.
- A comparison against the matching runs at a one-third holdout (
v60_h20andv120_h40, currently unpublished at the runs root), to separate the vocabulary axis from the holdout-fraction axis.
Referenced by (2 direct)
Comparison figures
Children
| Child | vocab-size | peak unseen_mismatch | Status |
|---|---|---|---|
| v020_h05 | 20 | 81.0 | done |
| v040_h10 | 40 | 88.0 | done |
| v060_h15 | 60 | 89.5 | done |
| v080_h20 | 80 | 85.4 | done |
| v120_h30 | 120 | 85.5 | done |
| v160_h40 | 160 | 81.5 | done |