caps-emphasis: capitalised emphasis in prompts, measured on Baguettotron - #56
Merged
Conversation
…ainst final artifacts (25 checks)
…'s polarity-blindness reading
# Conflicts: # README.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #45.
Capitalising a directive does not make Baguettotron obey it. Mid-sentence the effect is +0.003 log-odds, CI [−0.147, +0.168], t = 0.04. Measured as actual violations, every surface form matches the no-directive baseline at 42/43.
Answers to the five questions
Q1 — compliance. No effect.
none, sentence case,NEVER, token-matched lowercase andALL CAPS THROUGHOUTall violate 42/43; bold 41/43. The probability measure agrees more sharply: every directive raises the forbidden word by ~2.5 log-odds against no directive at all, reproducing the ironic rebound that Mann et al. and Rana report on models 7–20× larger.Q2 — case or token count? Token count, to the extent it is anything. Capitalising a keyword costs a variable number of extra tokens in this tokenizer (
do not→DO NOTis free;never→NE|VERcosts one;under no circumstancescosts four). Pooled by that cost, with several keywords per bin:When capitalising is free in tokens, the interval spans zero.
Q3 — dose-response. An inverted U, with the forbidden word's own case frozen so the manipulation stays a prohibition rather than becoming priming. Least rebound at 25–50% capitalised (−1.98); 100% (−2.26) is worse than 0% (−2.14). Twelve random word-subsets per level; between-draw spread 0.07–0.10 against between-level spread ~0.28.
Q4 — attention. Total mass onto the span scales with span token count, which a softmax over more keys guarantees and which is not evidence. Per token, bold and caps are near-identical (0.308 vs 0.294). Replaced with a per-layer causal knockout.
Q5 — base rate. 22,100 documents / 10.5M words of SYNTH. All-caps runs at 8.10 per 1,000 words but 96% are acronyms; caps-as-emphasis is 0.34 per 1,000.
IMPORTANT0 occurrences against 3,147 lowercase,REQUIRED0 against 4,459,NEVER5 against 957. Exactly one genuine capitalised instruction in the sample:NEVER give a baby honey.Markdown bold runs at 7.78/1,000 in 52% of documents, outnumbering emphatic caps 23:1.The bold arm, which is where the interesting part went
Bold first appeared to suppress ~20× harder than caps, matching the 23:1 corpus ratio. That was wrong twice.
Most of the raw effect was entropy — bold raises next-token entropy more than any other marker (1.927 vs 1.451 for sentence case), and raw log P cannot separate suppressing one word from flattening everything. Normalised against a control token, bold's advantage is +0.277, not 20×.
What remains is register. 93% of SYNTH's bold spans sit in reasoning traces; user turns hold one bold span per 763,630 words. Moving the same bolded directive into the reasoning register reverses its sign:
Bold helps where the corpus never puts it and hurts where the corpus always puts it — an off-distribution marker, not emphasis.
That comparison also surfaced the largest effect anywhere in the experiment, and it is not typographic: restating the constraint inside the reasoning register rather than the user turn cuts the rebound by ~0.8 log-odds, roughly 3× any surface-formatting effect measured.
Controls that changed conclusions
Added after an adversarial design review, each of which would otherwise have shipped a wrong number:
PARISgets capitalised too, which would have produced the predicted peak-then-decline curve through priming alone.Scope
A 321M model trained on synthetic reasoning traces is not evidence about frontier models and the effect sizes should not be carried anywhere. On Q1 and Q4 this is a replication under stricter controls rather than a discovery — Dillitzer et al. cover that ground across 13 models, and their finding that reasoning models show near-zero case sensitivity predicts this null. The dose-response, the within-tokenizer token-cost dissociation, the register contrast and the corpus base rate are where four searches found no prior work.
The teacher-forced frame forces the assistant turn past an empty
<think>block, which PleIAs' model card says degrades performance. The generation arms are the check and they agree, but some of the null may belong to the frame rather than the model.Contents
RESULTS.md,METHOD.md,PRIOR_ART.md,Q5_CORPUS.md,SYNTH_NOTES.md,ERRORS.md,recheck.py, plus the harness (caps_lib.py,render.py,conditions.py) and per-arm runners with their JSON artifacts.ERRORS.mdrecords two mistakes caught mid-run: an item screen that compared a whole word against a single token, and a knockout arm that silently produced NaN for its baseline becauserender()returned the uncased keyword. The second was cheap to catch only becausespan_rangereturnsNonerather than a(0, 0)a caller would happily index.Generated by Claude Code