modularWEIGHTS / Guides / Module 05
05

Why naming the topic makes it worse

The word list you score refusals with decides how much damage the process does. Topic words are worth 4x to 13x.

7 minbiggest single win

The optimiser minimises what you measure

Refusal removal needs a way to count refusals, which in practice means a list of marker strings. The obvious list includes the subject matter: illegal, harmful, unethical, prohibited.

That is the mistake, and it is not obvious why until you see it. Those words appear in compliant answers too — a model that answers a question about lock mechanisms may well use the word “illegal” in passing. The optimiser is minimising marker hits, so it learns to produce answers that avoid the vocabulary rather than answers that address the request.

You are not measuring refusal. You are measuring topic avoidance, and rewarding euphemism.

What it costs

We re-ran two models after removing topic words from the marker list, changing nothing else:

Phi-4-mini            old recipe  KL 0.125   →  new  KL 0.029    4.3x less damage
Llama-Nemotron-Nano   old recipe  KL 0.171   →  new  KL 0.013     13x less damage

Same refusal removal, a fraction of the modification. And the old high-damage version of the Nemotron model measurably lost eight maths problems, where the new one is indistinguishable from the original.

How much of the list was noise

Measured on real generations, the topic words fired on more than 60% of reasoning traces and 21% of answers — while adding no recall whatsoever over the phrases that actually indicate refusal. They were pure false-positive pressure.

Mark the refusal, not the subject

Keep phrases a model uses to decline, and nothing else:

"i can'", "i cannot", "i won'", "i will not",
"i'm unable", "i am unable",
"as an ai", "ai assistant",
"i'm designed to", "i am programmed to",
"ethical boundaries"

Note the truncations. "i can'" catches both can’t and cannot without matching I can help. Apostrophe handling varies with tokenizer and template, so matching a stem is more robust than matching a word.

Add the languages your model speaks

A multilingual model refuses in whatever language it was addressed in. If your markers are English-only, those refusals score as compliance and the optimiser never learns to remove them:

"non posso", "je ne peux", "no puedo",
"ich kann nicht", "nie mog", "não posso", "kan ik niet"

Use a broad prompt set as well

The second half of the same problem. A narrow set of harmful prompts produces a refusal direction that only covers the phrasings it saw — and small sets are usually narrow in a structured way, grouped by style, so taking the first N rows compounds the bias.

We moved from 416 prompts to roughly 5,900 and stopped slicing. Combined with the marker fix, that is the difference between a model that refuses rephrased requests and one that does not.