EMNLP 2026 · Main Conference
Quickstart · Cross-value transfer · Moral Foundations Theory · Your method · Citation
Does successful steering preserve the structure of human values? Steering Geometry evaluates both the geometry of steering directions and their behavioral effects across values. We study Schwartz's 20-value circumplex, test whether steering strengthens compatible values and suppresses opposing ones, and extend geometry evaluation to the six foundations of Moral Foundations Theory (MFT).
Official code for the paper, covering CAA, SAS, SphericalSteer, ODESteer, OPT, COLD-Steer, and BiPO.
Use Python 3.11 and a CUDA-capable GPU for model experiments. Geometry analysis of saved vectors can run on CPU.
git clone https://github.com/DeepRCL/Steering_Geometry.git
cd Steering_Geometry
conda env create -f environment.yml
conda activate steering-b300For private datasets or gated models, authenticate with hf auth login using an account with access, or set HF_TOKEN.
Download the exact Schwartz experiment input from Hugging Face:
hf download DeepRCL/SteeringGeometry data/final_dataset_200.csv \
--repo-type dataset --local-dir .
export STEERING_GEOMETRY_DATASET="$PWD/data/final_dataset_200.csv"The dataset card also covers the full 26,428-example Schwartz benchmark and 1,200-example MFT set.
python reproduction/run.py --experiment qwen_base_caa --executeThis runs extraction, layer selection, steering evaluation, and geometry analysis. Omit --execute to inspect the command first.
Results are saved under outputs/paper/qwen-base/caa/Qwen__Qwen3.5-9B-Base/:
| Output | What to inspect |
|---|---|
geometry/geometry_metrics.json |
Geometry alignment scores |
geometry/mds_circumplex.png |
Recovered value arrangement |
geometry/empirical_similarity_heatmap.png |
Pairwise value similarities |
evaluation/evaluation_summary.json |
Steering performance across strengths |
python -m json.tool \
outputs/paper/qwen-base/caa/Qwen__Qwen3.5-9B-Base/geometry/geometry_metrics.jsonFor other methods and backbones, run python reproduction/run.py --list and choose an experiment from reproduction/experiments.json. SAS also requires --supplement pointing to a validated Touché supplement.
Steering one value can change behavior on many others. This evaluation tests whether those changes follow Schwartz's theory: compatible values should improve, while opposing values should decrease.
For each source value, the evaluator applies steering and measures the change from unsteered accuracy on every target value's held-out examples. The resulting 20 × 20 transfer matrix captures the effects across the full value space. Two-way centering removes overall source and target effects before computing Continuous Transfer Fidelity (TWTM) and Hierarchical Transfer Fidelity (ρHᵗʳ).
After the CAA quickstart completes, run:
python -m experiments.cross_value_transfer.run \
--model_name Qwen/Qwen3.5-9B-Base \
--caa_run_dir outputs/paper/qwen-base/caa/Qwen__Qwen3.5-9B-Base \
--eval_dataset "$STEERING_GEOMETRY_DATASET" \
--relations_path CAA/value_data/schwartz_relations-new.json \
--methods caa --output_dir outputs/cross-value-transferUnder outputs/cross-value-transfer/, inspect each method's T_heatmap.png and T_heatmap_residualized.png for the transfer pattern, and metrics.json for fidelity scores. The root-level comparison_table.json and comparison_table.png summarize the evaluated methods.
Run the methods you want to compare, then copy the provided configuration:
cp reproduction/cross_value_transfer.qwen_base.example.json \
reproduction/cross_value_transfer.qwen_base.jsonSet the saved method directories and dataset path in the copied file, then run:
python -m experiments.cross_value_transfer.run \
--config reproduction/cross_value_transfer.qwen_base.jsonKeep the backbone and held-out evaluation split fixed, and specify the appropriate steering strength for each method. To evaluate a new intervention alongside these baselines, follow Evaluate your own steering method.
The framework also evaluates the six foundations of revised Moral Foundations Theory: Care, Equality, Proportionality, Loyalty, Authority, and Purity. The benchmark contains 1,200 examples, balanced at 200 per foundation.
In the paper's family-level analysis, Care and Equality form the Individualizing family; Proportionality, Loyalty, Authority, and Purity form the Binding family. ΔMFT measures within-family versus cross-family similarity. MFT evaluation tests family separation rather than imposing Schwartz's circular ordering or opposing-value relationships.
Run a CAA example on the MFT data:
hf download DeepRCL/SteeringGeometry data/MFT.csv \
--repo-type dataset --local-dir .
python -m CAA.Geometry.run_pipeline \
--model_name Qwen/Qwen3.5-9B-Base \
--dataset_path data/MFT.csv \
--value_framework mft --steering_method caa \
--geometry_transform centered_renorm \
--modules all --output_dir outputs/mft/caaMetrics and plots are saved under outputs/mft/caa/Qwen__Qwen3.5-9B-Base/geometry/.
For Schwartz geometry, extract one direction per value using the labels in SCHWARTZ_CIRCUMPLEX_ORDER. For nonlinear or input-dependent methods, use the mean effective shift mean(steered_activation - original_activation) at a fixed layer over matched prompts, as in the paper.
Save your extracted vectors as a dictionary of 1-D tensors of the same hidden dimension:
import torch
from CAA.Geometry.config import SCHWARTZ_CIRCUMPLEX_ORDER
# vectors: your {value_name: extracted_direction} mapping for all 20 values.
assert set(SCHWARTZ_CIRCUMPLEX_ORDER).issubset(vectors)
torch.save(
{value: vectors[value].detach().float().cpu()
for value in SCHWARTZ_CIRCUMPLEX_ORDER},
"my_method_vectors.pt",
)steering-geometry --vectors my_method_vectors.pt \
--output outputs/my_method --title "My method"The CLI writes geometry_metrics.json, similarity heatmaps, and circumplex plots. Compare ρT, rT, ρH, and Δpol with the CAA results above using the same backbone, data, and extraction protocol. The default centered_renorm transform applies the paper's mean-centering and normalization. .npz banks and directories of per-value vectors are also supported.
To add your own intervention, implement SteeringMethod: name, layer, load_vectors(), apply_hook(), and remove_hook(). Use caa_method.py as an example, then add your adapter to _build_methods in run.py and provide any required configuration fields. Run both with --methods caa,my_method after registration, keeping the evaluation split fixed and specifying the appropriate steering strength for each method.
The steering-geometry CLI above evaluates the 20-value Schwartz bank. For MFT, use the framework-aware pipeline with --value_framework mft as shown above.
If you use the code or data, please cite our paper:
@inproceedings{abootorabi-etal-2026-steering,
title = "Steering Geometry: Validating Human Value Geometry in {LLM} Steering Space",
author = "Abootorabi, Mohammad Mahdi and
Saghafian, Armin and
Bazshoushtari, Ali and
Rezaei, Hamid and
Hwang, EunJeong and
Shwartz, Vered and
Mousavi, Parvin and
Abolmaesumi, Purang",
editor = "Lee, Hung-Yi and
Dev, Sunipa and
Li, Jessy and
Elliott, Desmond",
booktitle = "Proceedings of the 2026 Conference on Empirical Methods in Natural Language Processing",
month = oct,
year = "2026",
address = "Budapest, Hungary",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2026.emnlp-main.2508/",
pages = "57010--57033",
ISBN = "979-8-89176-459-0",
abstract = "As large language models (LLMs) are increasingly deployed in alignment-sensitive contexts, activation steering has emerged as a lightweight, inference-time alternative to fine-tuning methods (e.g., RLHF, DPO) for behavioral control. However, existing work typically validates steering on isolated behaviors, leaving it unclear whether steering vectors encode coherent semantic structure or merely exploit behavior-specific shortcuts. We investigate whether the latent geometry of LLM steering vectors reflects theory-specified structure in human values and morality. Using Schwartz{'}s Theory of Basic Human Values as our primary fine-grained framework, we introduce a 26K-sample benchmark covering 20 human values and analyze distribution-driven methods (e.g., CAA, SphericalSteer, ODESteer) and behavior-centric approaches (e.g., COLD-Steer, BiPO) across diverse model families and sizes. We find that distribution-driven methods recover human value topologies aligned with theoretical predictions (Spearman $\rho$ up to 0.51, $p < 10^{-13}$). In contrast, behavior-centric methods achieve comparable steering performance but show little correlation with the expected value geometry. Geometric fidelity improves with model scale but drops after instruction tuning. Finally, better geometric alignment also leads to more human-consistent transfer across values: steering one value correctly lifts compatible values and suppresses opposing ones. Code and data are available at: \url{https://github.com/DeepRCL/Steering_Geometry}."
}We thank the authors of the following open-source codebases, which supported our implementation and experiments:
Questions or contributions? Open an issue.
