LLM Stimulus Fidelity Benchmark — design¶
2026-08-12. Status: designed, approved for planning. Supersedes the scope sections of
research/2026-08-12-llm-stimulus-fidelity/README.md where they differ; the README's rationale
(§1–2) and failure-mode honesty (§5) carry forward unchanged.
Purpose¶
Measure how often general-purpose LLMs produce articulation and naming stimuli that violate the phonological or psycholinguistic constraints the clinician asked for, using PhonoLex as ground truth. Two consumers: preliminary data for the NIH SBIR (PA-27-100, receipt 2027-01-05) and a standalone measurement paper.
Decisions (settled 2026-08-12)¶
| Question | Decision |
|---|---|
| Artifact | Reusable benchmark + study — versioned prompt suite + deterministic scorer; the SBIR/paper numbers are its first run |
| Publication | Public suite, private scorer — prompts, taxonomy, methodology, results public; scoring runs against PhonoLex data, which never ships |
| v1 scope | All five task families (A1–A3, B1–B2) |
| Model roster | Clinician-named + tiers: ChatGPT free + paid, Gemini free, Claude free (~4–5 pinned versions) |
| Query mode | API with pinned versions + manual UI spot-check (~25 prompts) validating the tier→model mapping |
| Suite architecture | Approach 3: constraint grid core + in-the-wild subset |
| Home | Develop in research/2026-08-12-llm-stimulus-fidelity/; extract the public half to a separate repo at release |
1. Task taxonomy — the grid¶
Five parameterized families, ~30 base cells each (~150 total), every cell rendered in a naive and an expert arm. Each family has an explicit difficulty axis so results are curves, not one number.
- A1 — structural word lists. Slots: target phoneme (sampled across early-8 / middle-8 / late-8 + vocalic ɹ), word position (initial/medial/final), syllable count, list length, optional age qualifier (adjudicated against AoA). Difficulty: phoneme × position rarity.
- A2 — clusters & complexity. /s/-, /ɹ/-, /l/-blends by position; CV-shape requests (CCVC, CVCC); 3–4-syllable words containing the target.
- A3 — contrast sets. Minimal pairs for a stated contrast, maximal opposition, multiple opposition (3+ contrasts to one target). Scored against the post-PHON-154 pair table and feature distances. Predicted primary bleed zone.
- B1 — norm-banded naming stimuli. Frequency × AoA × concreteness/imageability bands, tight vs loose, adult naming-therapy framing.
- B2 — neighborhood/phonotactics. High- vs low-density neighborhoods; density × frequency crossings.
Arms. Naive-arm phrasing templates are derived from the ~38 verbatim Reddit prompts (theme injections — "Minecraft words with /s/" — are observed behavior and stay in). Expert arm is fully explicit: IPA, defined numeric bands, position stated unambiguously. For A3/B1/B2, where the corpus has no observed prompts, naive phrasings are adapted from Stratum-A patterns and labeled reconstructed.
Wild track. The ~24 verbatim stimulus prompts (paraphrased in any public release) plus whatever the public-dataset scoping pass yields, hand-annotated with implied constraints, scored by the same scorer, reported separately as ecological validation of the grid.
2. Prompt corpus provenance¶
Corpus facts (established 2026-08-12 from ~/Repos/speech-community-analysis): the true
ChatGPT-mention denominator is 233 unique posts, not 362 (mention rows ≠ units); ~30 posts
(~13%) quote verbatim prompt text, yielding ~38 distinct prompt strings (~24 stimulus
requests); ~80 more posts describe reconstructible task intents. Coverage is pediatric-heavy:
minimal pairs n=1, anomia/naming n=0, dysphagia n=0 — Stratum B cannot be ecologically grounded
from Reddit and is not claimed to be.
Three sources, every suite prompt tagged observed | adapted | constructed:
- Reddit union-recall pass — competitors.yml regex ∪ AI topic cluster ∪ broadened genAI regex (~330–350 post superset), re-tiered A/B/C.
- Public prompt datasets — WildChat-1M and LMSYS-Chat-1M searched (keyword + embedding) for SLP stimulus requests; timeboxed to one day; any hits are observed prompts with real model outputs attached.
- Team-authored grid templates.
Public-release policy: Reddit-derived prompts are paraphrased, never quoted verbatim (the corpus project's deferred IRB/mod-notification question stays deferred by not republishing identifiable content).
3. Ground truth & scorer¶
- Data. Local runtime parquets (words, pairs, norms) via polars — no D1 dependency. Run manifest pins the lexicon snapshot by seed-manifest sha256. Constraints adjudicate against primary pronunciations only (PHON-154); variant-satisfied items are a separate sensitivity row.
- Extraction. Deterministic parsers first (numbered/bulleted/comma lists). LLM fallback is extraction-only — it pulls word strings out of prose, never judges — and a hand-audited ~5% sample certifies extraction accuracy as a reported number. All scoring downstream of extraction is table lookup.
- Adjudication ladder. (1) Normalize; multiword answers to single-word requests are their
own violation category. (2) In PhonoLex → score directly. (3) Not in PhonoLex → secondary
real-word check (SCOWL/ENABLE-class wordlist) before "fabricated" is assigned; real
out-of-lexicon items get g2p phonology where structural constraints remain checkable and are
flagged
oov, killing the CMU-coverage confound. (4) Refusals, duplicates, morphological-variant padding → degenerate-output categories, never dropped. - Qualitative constraint operationalization. Every naive-arm qualitative constraint ("age-appropriate for a 6-year-old") gets a pre-registered numeric operationalization written before any model is queried.
4. Metrics & analysis¶
The six README metrics stand: constraint satisfaction rate (headline), position error rate, fabrication rate, norm-band violation rate, false minimal-pair rate, degenerate-output rate. Additions:
- Difficulty curves — every metric against the grid's difficulty axes; the SBIR figure is satisfaction falling as constraints tighten, with PhonoLex flat at ceiling by construction (stated as such — the comparator establishes satisfiability, not superiority).
- Per-list satisfaction alongside per-item — a 10-word list with 3 bad items is a failed clinical deliverable at 70% item accuracy.
CIs via cluster bootstrap, prompt cell as cluster. Arms difference = prompt-sensitivity estimate; free-vs-paid difference = the equity finding. Analysis pre-registered before the first scored run.
5. Pipeline¶
research/2026-08-12-llm-stimulus-fidelity/, staged and resumable:
mine_prompts.py— Reddit union-recall + WildChat/LMSYS scoping →prompt_corpus.parquetwith provenance.build_suite.py— grid × arms → frozensuite_v1.parquet; content hash = benchmark version.run_models.py— API calls with per-call checkpointing and resume (long-job policy); records model id, call date, temperature, raw response. Keys: ANTHROPIC/OPENAI/GEMINI in.env.extract.py→score.py— extraction + audit sample; deterministic scoring →scored.parquet.analyze.py/report.py— tables, difficulty curves, SBIR figure, bootstrap CIs.
prereg.md (hypotheses, operationalizations, exclusion rules) is committed before step 3 runs
against any real model. UI spot-check: written protocol + hand-entered results for ~25 prompts
across free tiers, reported as a mapping-validity table. Everything keyed to lexicon sha +
suite hash so drift re-runs are one command against a frozen suite.
6. Deliverables & versioning¶
- Suite v1 — frozen prompts + taxonomy + provenance (the public half).
- First-run results — scored dataset; error tables by family × model × arm × difficulty; the Specific Aims figure.
- Write-up — short measurement paper; SBIR pulls from it.
- Re-run playbook — dated, suite-pinned drift tracking on major model releases.
Failure modes (carried from README §5, still binding)¶
LLMs may be fine on easy cells (report the bounded result — the difficulty curve is the finding either way); expert arm may close the gap (finding becomes prompt-engineering burden); OOV ≠ fabricated (ladder handles it); results are snapshots (versioning handles it).
Prerequisites before building¶
- Assign the PHON ticket (README's own rule: before branching).
- Co-investigator confirms the Stratum B constraint set actually used in practice; design proceeds on frequency/AoA/imageability/density and re-weights B1/B2 cells before suite freeze if the answer differs.
- Second-coder κ on the Reddit A/B/C re-tiering if the prompt-corpus mining is reported as a result in its own right (optional for the benchmark itself).
Deferred (unchanged from README)¶
Clinical-appropriateness rating (needs blinded SLP raters → commercial IRB → Phase I aim, not pilot). Rater-independence constraint stands: co-investigator and the two collaborating SLPs are contaminated for rating purposes; their role is design feedback and letters of support.