Library for extracting and analyzing persona vectors
Project description
Persona Vectors
Extract persona vectors from language models, then probe, project, or steer with them.
A persona vector is the mean hidden-state activation a model produces while answering as a given persona. Extraction saves one (num_layers, hidden_size) tensor per persona, prompt variant, model, and mask strategy; everything downstream reads those tensors back.
personas + QA pairs -> prompts -> token masks -> hidden states -> saved vectors -> analysis
Install
uv sync
cp .env.example .env
Requires Python >=3.12. Set NDIF_API_KEY in .env for remote extraction.
Dataset loading comes from persona-data; the
Quickstart
# Extract — one (num_layers, hidden_size) vector per persona/variant/mask
uv run python main.py extract --model google/gemma-2-9b-it --backend remote
# Analyze — normalized PCA/UMAP, similarity, clustering, scree plots
uv run python main.py analyze --model google/gemma-2-9b-it --variant biography
# Probe — linear probes per persona attribute
uv run python main.py probe --model google/gemma-2-9b-it --variant templated
# Steer — biography minus templated direction
uv run python main.py steer --model google/gemma-2-9b-it --persona-id <UUID> --layer 20
# Push extracted vectors to the Hub
uv run python main.py push --model google/gemma-2-9b-it --repo implicit-personalization/synth-persona-vectors
Notebooks under notebooks/ cover the same flows interactively.
Extraction scripts
# Steering: train split, push to Hub, refresh the dataset card
MODEL=google/gemma-2-9b-it scripts/extraction_train_split.sh
# All-questions (explicit only): first 100 personas under artifacts/persona-vectors/,
# then push and refresh the dataset card
MODEL=google/gemma-2-9b-it scripts/extraction_all_questions.sh
What gets saved
artifacts/activations/<model_dir>/<mask_strategy>/<prompt_variant>/
├── manifest.json
└── <persona_id>.safetensors
<model_dir> is the HF id with / → __. Each safetensors file holds one activations tensor — the persona vector for that variant, averaged across QA pairs and selected tokens.
scripts/extraction_all_questions.sh writes under artifacts/persona-vectors/ to keep all-questions runs separate from train-split runs; pass --activations-dir artifacts/persona-vectors to read it back.
See the artifacts docs for the full layout.
Layout
src/persona_vectors/
├── activations.py # low-level hidden-state extraction
├── extraction.py # prompt formatting, masks, persona extraction flow
├── preview.py # token-mask preview for --verbose
├── artifacts.py # PersonaVectorStore (local) + HFPersonaVectorStore (Hub)
├── hub.py # push to / discover Hub vector datasets
├── analysis.py # aligned dataset loading, PCA, cosine similarity, clustering
├── plots/ # Plotly figures
├── attributes.py # attribute schema + color helpers for plots
├── probes.py # linear probes over saved persona vectors
├── steering.py # experimental steering vectors
└── parser.py # CLI parser
See the docs for API details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file persona_vectors-0.8.9.tar.gz.
File metadata
- Download URL: persona_vectors-0.8.9.tar.gz
- Upload date:
- Size: 44.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
84056f4b0cfacc068d05ffff9349384f773717477e347680a2c685a312aac462
|
|
| MD5 |
d5268cee08fe442948a909fc0d3c23bc
|
|
| BLAKE2b-256 |
b82fa7ac3d5c3b9bfa2150dba19b4317d5e74c1e284a4e43c55d75f8fe140444
|
File details
Details for the file persona_vectors-0.8.9-py3-none-any.whl.
File metadata
- Download URL: persona_vectors-0.8.9-py3-none-any.whl
- Upload date:
- Size: 53.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5abe0f97787a21c6fd747aa3cf5213214ba18e4cf92a89159e986c7547beef79
|
|
| MD5 |
4d15d2a058b2fca958c8769aa323e1c3
|
|
| BLAKE2b-256 |
c9c32322bd2c341fcb175db5e946e51b8a91c6b25b41b299dd7b6eaa70d50e86
|