hprobes
Discover and causally validate hallucination-associated FFN neurons (H-Neurons) in transformer LLMs.
Based on arXiv:2512.01797.
Install
pip install hprobes
# or
uv add hprobes
Quickstart
from transformers import AutoModelForCausalLM, AutoTokenizer
from hprobes import HProbe
model = AutoModelForCausalLM.from_pretrained("google/gemma-3-4b-it", torch_dtype="auto", device_map="auto")
tokenizer = AutoTokenizer.from_pretrained("google/gemma-3-4b-it")
# samples: list of dicts with question, options, answer
probe = HProbe(model, tokenizer)
probe.fit(samples, options_key="choices", answer_key="answer")
print(probe.n_neurons_, probe.layer_distribution_)
results = probe.score()
print(f"AUROC {results['auroc']:.3f} gap {results['auroc_gap']:+.3f}")
probe.causal_validate()
CLI
# Fit and score on an MCQ dataset
hprobes run --model google/gemma-3-4b-it --data dataset.jsonl --samples 500
# Transfer: score a saved probe on a different model
hprobes transfer --probe results/probe --model google/gemma-3-4b --data dataset.jsonl
# Fit from pre-generated responses with judge labels
hprobes responses --model google/gemma-3-4b-it --data responses.jsonl
Supported formats
Input files: .jsonl, .json, .parquet
Auto-detected dataset formats: mmlu, medqa, medmcqa. Any other format works by passing options_key and answer_key directly.
Key options
| Parameter | Default | Description |
|---|---|---|
l1_C |
0.01 |
Inverse L1 strength — lower = fewer neurons |
contrastive |
True |
3-vs-1 labeling at the generated answer token |
layer_stride |
1 |
Sample every Nth layer (2 = faster) |
validation_split |
0.2 |
Holdout fraction for scoring |
max_tokens |
1024 |
Truncation length |
Save & load
probe.save("results/gemma_medqa") # writes .json + .pkl
probe = HProbe.load("results/gemma_medqa", model, tokenizer)
probe.score_on(new_samples, options_key="choices", answer_key="answer")
Acknowledgements
This research is conducted in collaboration with the Great Ormond Street Hospital DRIVE Unit.
Contributors
- Huseyin Cavus — Core Contributor
- Pavithra Rajendran, PhD — Machine Learning Lead, GOSH DRIVE
- Sebin Sabu — Senior AI Scientist, GOSH DRIVE
- Jaskaran Singh Kawatra — ML Engineer, GOSH DRIVE
- Josh Spear, PhD — Postdoctoral Researcher, GOSH DRIVE
Release files for hprobes 0.9.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| hprobes-0.9.0.tar.gz | 251.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| hprobes-0.9.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 293.1 kB
Release files / hprobes-0.9.0.tar.gz
| Download URL | hprobes-0.9.0.tar.gz |
|---|---|
| Size | 251.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
53227482f79af49b866174125c705949d153d90c80a8486876ec35b65b18e209
|
|
BLAKE2b-256 checksum How to use checksums |
522d6af1da3554948cf7669c3d207373b5f8fdb5c3280ca7a48380bb8460f9e7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.18 {"installer":{"name":"uv","version":"0.12.18","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}
|
Release files / hprobes-0.9.0-py3-none-any.whl
| Download URL | hprobes-0.9.0-py3-none-any.whl |
|---|---|
| Size | 41.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6482693a2dbc763056c04eea8fcfc0e65316f1743b9a29b2958977983518ffc0
|
|
BLAKE2b-256 checksum How to use checksums |
839680d62e4892d8a40a65a422122af7e397a4ea6c1bbd7bf24bed0810f81511
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.18 {"installer":{"name":"uv","version":"0.12.18","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}
|