Skip to main content

crosswise

A reliability check for Natural Language Autoencoder (NLA) explanations.

NLAs describe a model's internal activations in English, and they confabulate: on a 212-position benchmark, 40% of the phrases an NLA quoted as being "from the prompt" were not in the prompt. The model's own confidence does not detect this.

crosswise cross-checks each quoted claim against independent evidence from a sparse autoencoder reading the same activation. If the NLA quotes a word and no SAE feature at that position supports it, the word is flagged.

What it does, and doesn't

On the benchmark, flagging "no SAE support" caught 83% of fabrications at 67% precision, and SAE support separated true from fabricated words by 55 points (72% vs 17%, z = 7.84).

This is a first-pass reliability flag, not an oracle. The matcher checks whether a feature's text label or logit-lens tokens contain a content word from the quote. That is deliberately simple and it undercounts real support, so:

  • an "unsupported" or "fabricated" flag means worth a second look, not proven false
  • SAEs are lossy; absence of a supporting feature is evidence, not proof
  • numbers and some names are represented diffusely at layer 41 and check poorly
  • only claims about the input are checkable this way; claims about the model's cognition are not

Requirements

A GPU with ~55 GB (gemma-3-27b-it in bf16). Rent one if you need to; this is a research tool for people already doing mechanistic interpretability. No API key required — the NLA explanations and SAE feature descriptors both come from Neuronpedia's public endpoints.

Install

pip install torch transformers accelerate safetensors huggingface_hub
pip install -e .

Use

from crosswise import ReliabilityChecker

rc = ReliabilityChecker()          # loads gemma-3-27b-it + Gemma Scope 2 SAE (slow, ~55GB)
report = rc.score("The midwife, Hassan, delivered twins before sunrise.", position=7)

for v in report.verdicts:
    print(v.quote, v.flag)         # e.g.  'she delivered twins'  fabricated

Pass your own explanation= to score() to check text you already have, or omit it and crosswise fetches an NLA explanation from Neuronpedia for you.

Model details

gemma-3-27b-it, layer 41. NLA source kitft-l41, SAE 41-gemmascope-2-res-262k, both on Neuronpedia. Full study and method: [blog link].

Limitations and next steps

The matcher is the weak point and the obvious thing to improve: embedding similarity against the feature's max-activating examples would beat label-string matching. Extending the check to claims about model cognition (not just the input) is the direction that matters most for auditing use, and is not yet supported.

MIT licensed.

Metadata

Release files for crosswise 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for crosswise 0.1.0
File Size Uploaded
crosswise-0.1.0.tar.gz 5.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for crosswise 0.1.0
File Interpreter ABI Platform
crosswise-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 12.4 kB

Release files / crosswise-0.1.0.tar.gz

Download URL crosswise-0.1.0.tar.gz
Size 5.9 kB
Tags Source
SHA-256 checksum
How to use checksums
08371ed172887525713312835e6d9012e548d611a006ddf92f228d5fe09150d5
BLAKE2b-256 checksum
How to use checksums
3362a5fa4a427a48a47361c0d0e03c3d1e4cd5b19084da2e116ea9e7510a9383
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.3

Release files / crosswise-0.1.0-py3-none-any.whl

Download URL crosswise-0.1.0-py3-none-any.whl
Size 6.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4b98f2cbe1297d0b4d40b41fe3a95c749b8842e5d8f2fe13c521abcbb472b2a8
BLAKE2b-256 checksum
How to use checksums
f61a2f15444d4854709ae9dde1ed2951d8bb55d95be071588bbac2502159ad0a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.3

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page