Download README.md from knowingly-wrong/persona-vectors: direct link, hf CLI and curl.
- Browser
- Download file 3.49 kB
-
https://huggingface.co/knowingly-wrong/persona-vectors/resolve/main/README.md
- Command line
-
hf download hf://knowingly-wrong/persona-vectors/README.md
-
curl -L -o README.md https://huggingface.co/knowingly-wrong/persona-vectors/resolve/main/README.md
base_model:
- Qwen/Qwen3.6-27B
- Qwen/Qwen2.5-7B-Instruct
tags:
- persona-vectors
- steering-vectors
- activation-steering
- interpretability
Layout
qwen3.6-27b/ directions extracted on Qwen/Qwen3.6-27B (hidden 5120)
qwen2.5-7b/ directions extracted on Qwen/Qwen2.5-7B-Instruct (hidden 3584)
directions.npz 35 traits x 64 layers
config.json extraction config (battery, read position, seed, git hash)
summary.json run summary (n samples, geometry layer, placebo gate)
geometry.json pairwise geometry of the direction set
survival.json which traits survive the permutation test
battery_report.jsonl per-trait selected layer, held-out AUROC, gap, Cohen's d
The vectors are fit separately on each base model, so a direction from one model is meaningless applied to the other, and readings are only comparable within a model.
directions.npz schema
Keys are "<trait>|<layer>|<kind>":
unit— the L2-normalized direction (use this to project or steer)gap— the un-normalized difference of means (its norm is the raw class gap)split_half— the same direction fit on a held-out half, for reliability
Layers run 1..64. The extra key n_slices (= 65) is the layer count including the
embedding slice at index 0. Each vector has length = the model's hidden size.
import numpy as np
from huggingface_hub import hf_hub_download
f = np.load(hf_hub_download("knowingly-wrong/persona-vectors",
"qwen3.6-27b/directions.npz"))
v = f["dishonesty|16|unit"] # (5120,)
score = activations @ v # project residual-stream activations onto the trait
The 35 traits, and the 8 the paper reads
All 35 traits are extracted and shipped. The paper reports only these 8 (each oriented so that a positive projection means more of the undesirable trait):
evil, dishonesty, hallucination, overconfidence, sycophancy, manipulativeness, machiavellianism, callousness.
Each trait is read at one selected layer (chosen on held-out data, in
battery_report.jsonl). The selected layer and Cohen's d differ per model:
| trait | 27B layer | 27B d | 7B layer | 7B d |
|---|---|---|---|---|
| evil | 35 | 0.72 | 15 | 0.78 |
| dishonesty | 16 | 4.16 | 26 | 1.09 |
| hallucination | 34 | 2.50 | 21 | 0.59 |
| overconfidence | 45 | 3.90 | 21 | 1.73 |
| sycophancy | 64 | 6.31 | 27 | 1.62 |
| manipulativeness | 51 | 2.78 | 21 | 1.33 |
| machiavellianism | 35 | 1.75 | 19 | 1.30 |
| callousness | 19 | 2.76 | 20 | 0.97 |
The other 27 traits (including four placebo-* controls) are present for completeness.
Caveat
The permutation-based placebo gate did not pass on either model
(placebo_gate_passed: false in summary.json): at least one placebo control trait
came out significant, so a nonzero projection on a real trait is not on its own proof
of a genuine effect. Read a fine-tuned model's shift as treatment minus its matched
control, not as drift from base alone. Treat single-trait magnitudes as exploratory.
Provenance
Extracted with the persona pipeline in the false-facts-finetuning project
(27B git hash b9313cf2, read position assistant_mean, seed 42, 500 permutations).
Source: false-facts-finetuning/persona-vectors, 27B at revision b236ea63, 7B at
36588b0.
Paper: Knowingly Wrong: Training LLMs Against Their Own Beliefs can Cause Misalignment