DetectorScope: AI text detectors that show their work Google DeepMind researchers released DetectorScope, an open-source Python package that converts black-box AI text detectors into auditable models whose predictions are a sum of named, validated features, installable via `pip install detectorscope`. In an example run, the detector labeled a sample text 'ai' with p_ai=0.88, attributing +0.23 importance to 'the word about used as a preposition' and +0.14 to 'repeated phrases or sequences in text'. The pipeline uses sparse autoencoders on the detector's residual stream with a sparse linear head over validated features, and the authors report on the COLING F1 and RAID TPR-at-5%-FPR benchmarks that the auditable detectors stay close to the fine-tuned black-box classifiers they are built on; the work will appear at EMNLP 2026 in Budapest, Hungary. AI text detectors that show their work. DetectorScope turns a black-box AI text detector into one whose every prediction is a sum of named, validated features. It can tell you which properties of a text made it predict "AI" and where in the text they are located. Try our demo 🤗 https://huggingface.co/spaces/liamdugan/detector-scope-demo | Installation pip install detectorscope | | Example Usage | |---| | python from detectorscope import AuditableDetector Load the AI detector detector = AuditableDetector.from pretrained "liamdugan/detector-scope" Run the AI detector on some input output = detector "Like I said, this is about accuracy, about speed, and about cost." Print the results print output | | Output | | Detection label='ai', p ai=0.88, features= Feature importance=+0.23, description='the word about used as a preposition' , Feature importance=+0.14, description='repeated phrases or sequences in text' , Feature importance=-0.05, description='conversational filler phrase like i said' , ... | Using DetectorScope you can: - 🔍 Query a strong AI detector that is transparent about the features it uses - 🖱️ Hover over the text to see the specific "AI Phrases" the detector is using - 🔁 Convert your own black-box detector into an auditable one by using our pipeline - 🎓 Analyze LLM Outputs so that you understand which models have which tendencies - 25 Oct 2026 DetectorScope will appear at EMNLP 2026 in Budapest, Hungary The pipeline: SAEs on the detector's residual stream, a description and validation score per feature, a threshold on that score, and a sparse head over the features that pass. A DetectorScope detector is a concept bottleneck over interpretable sparse-autoencoder features: the language model's residual stream is encoded by SAEs, each feature gets a natural-language description that is validated against its own activations, and a sparse linear head over the validated features makes the decision. The prediction is therefore a sum of per-feature contributions, and every contribution has a description and a location in the text. F1 COLING and TPR at 5% FPR RAID against the interpretability threshold, in domain grey and out of domain white . FT-Model+SAE matches the underlying neural detector even at thresholds of 0.7 and above. Across both benchmarks applying our auditable pipeline has minimal adverse effects on performance. The auditable detectors stay close to the fine-tuned black-box classifier they are built on. The full tables are in the paper https://arxiv.org/abs/2610.30006 . From PyPI, in a fresh environment: python -m venv .venv && source .venv/bin/activate pip install detectorscope From source, with the extras for the pipeline, the experiments and the demo: git clone https://github.com/google-deepmind/detectorscope && cd detectorscope pip install -e ". all " Any released detector loads by its Hub id; the other settings of a repo are its branches. python from detectorscope import AuditableDetector detector = AuditableDetector.from pretrained "liamdugan/detector-scope-peer-review-gpt4o" detector = AuditableDetector.from pretrained "liamdugan/detector-scope", revision="base-sae" detector text returns a Detection with label , p ai , logit , bias and features , every feature active in the text with a non-zero effect, largest first. importance is how much the logit falls if the feature is silenced, and logit == bias + sum importances . A list of texts returns a list. Set return highlights=True to see where each feature is localized within the text: output = detector text, return highlights=True output.tokens the text as tokens output.features 0 .highlights token index, activation , ... You can use the tau parameter to control the tradeoff between interpretability and accuracy. Every feature has an auto-interpretation score, how well its description predicts where it fires, and tau is the score a feature must reach before the head is allowed to use it. A higher tau gives the head fewer, better-described features, so every item of evidence it reports is one you can read and check, at some cost in accuracy. A lower tau admits more features, including ones whose descriptions are loose, and the detector gets more accurate and less legible. The default is 0.85. detector = AuditableDetector.from pretrained "liamdugan/detector-scope", tau=0.95 tau runs from 0.00 every feature to 0.95 in steps of 0.05, and each branch carries a head at every step, so changing it downloads nothing. It can also be set per call, which is the easiest way to compare the same text at several settings: output = detector text, tau=0.50 more features, higher accuracy output = detector text, tau=0.95 the few best-described features detector.heads every head, tau pair the repo holds head="xgboost" , on from pretrained or on the call, selects the gradient-boosted head at the same tau instead of the logistic-regression one. We provide the following model collections for download via Huggingface https://huggingface.co/collections/liamdugan/detector-scope-6ad9ea7de8657f7da766b2b5 : | Repo | Domain and data | |---|---| | detector-scope https://huggingface.co/liamdugan/detector-scope | open domain: the COLING 2025 GenAI Detection shared task news, essays, reviews and more; 40 generators | | detector-scope-peer-review-gpt4o https://huggingface.co/liamdugan/detector-scope-peer-review-gpt4o | closed domain: machine-learning peer reviews, human vs. GPT-4o the AI Peer Review Detection Benchmark | | detector-scope-peer-review-llama https://huggingface.co/liamdugan/detector-scope-peer-review-llama | closed domain: the same reviews, human vs. Llama | Each repo holds the paper's three settings as branches. ft-model-sae fine-tunes Gemma-2-2b as a classifier and fine-tunes the SAEs on it; ft-sae keeps the unmodified Gemma-2-2b and fine-tunes only the SAEs; base-sae keeps both the unmodified Gemma-2-2b and the unmodified Gemma Scope SAEs. main is the setting that performed best on each domain: ft-sae for the open domain, ft-model-sae for peer reviews. Every branch bundles its language model, so nothing else is downloaded and no licence gate is involved. The defaults are set by hand: the logistic-regression head over features whose auto-interpretation score is at least 0.85, with the decision threshold fixed on the development split. Each branch also carries the XGBoost head and both heads at every other threshold. The pipeline that builds a detector is the package's stages, run as python -m detectorscope.