Method
-
A refusal direction u is estimated as the difference in mean residual-stream
activations between 30 harmful and 50 harmless instruction prompts, taken at the
last token of the chat-formatted prompt.
-
All 24 layers are swept and scored by the separation gap
cos(harmful, u) − cos(harmless, u). The best layer is 23
(gap 0.629; layers 0–2 give ~0.03–0.12, so the signal is strongly late).
-
u is projected out of the row space of every weight matrix in layers
12–23 whose output space is the residual stream:
Targets: mlp.down_proj (all 12 layers), plus self_attn.o_proj on the
full-attention layers and linear_attn.out_proj on the linear-attention
layers. Residual |Wu| after patching: 0.0000.
The vision tower (model.visual.*) and the MTP head (mtp.*) are untouched.
Results
Refusal rate on 20 harmful instruction prompts, greedy decoding, non-thinking mode:
Table with columns: refusal rate | refusal rate |
|---|
Base Qwen/Qwen3.5-0.8B | 18/20 (90%) |
| This model | 1/20 (5%) |
Quality checks against the base model:
Table with columns: Metric, Base, This model| Metric | Base | This model |
|---|
| NLL, held-out neutral prose | 2.0713 | 2.0625 |
| Repeated 4-gram rate | 0.009 | 0.009 |
| Factual spot-checks (4) | 4/4 | 4/4 |
| Arithmetic (84*3/2) | correct | correct |
Known limitations
Abliteration removes the refusal behaviour; it does not add capability. On
this 0.8B model the compliant answers to harmful prompts are frequently
incoherent or factually wrong, because the base model is too small to produce
technically correct instructions. Ablation also measurably degrades factual
precision in ordinary answers — the base model is more reliable on questions
about specific real-world details. This model is best used where over-refusal
is the bigger problem than factual accuracy.
Usage
from transformers import AutoProcessor, Qwen3_5ForConditionalGeneration model = Qwen3_5ForConditionalGeneration.from_pretrained( "xdchinza/Qwen3.5-0.8B-abliterated", dtype="auto", device_map="auto")processor = AutoProcessor.from_pretrained("xdchinza/Qwen3.5-0.8B-abliterated")
GGUF quantisation for llama.cpp / Ollama, including an i-matrix quant:
xdchinza/Qwen3.5-0.8B-abliterated-GGUF
ollama create qwen3.5-0.8b-abliterated -hf xdchinza/Qwen3.5-0.8B-abliterated-GGUF:Q4_K_M
Reproduction
Scripts used are documented in the repository README of the uploader. Summary
of parameters: 30 harmful / 50 harmless prompts, probe layer 23, strength 1.0,
layers 12–23.
License
Apache-2.0, inherited from Qwen/Qwen3.5-0.8B. Derivative of an Apache-2.0
model, redistributed under the same terms.