reneeice/editlens-ood-adapter-qwen3-0.6b
editlens-ood-adapter-qwen3 — OOD adapter for EditLens
A few-MB out-of-distribution adapter that snaps onto a frozen EditLens-Qwen3 checkpoint to add an anomaly / AI-edit score with zero backbone fine-tuning.
Usage
This is a tiny adapter (mahalanobis distance to a learned center) that runs on top of a frozen `reneeice/editlens-qwen3-0.6b-repro` checkpoint — download ood_adapter.npz and score embeddings:
import numpy as np, torch
from transformers import AutoTokenizer, AutoModel
a = np.load("ood_adapter.npz")
center, inv, orient = a["center"], a["inv_cov"], int(a["orientation"])
tok = AutoTokenizer.from_pretrained("reneeice/editlens-qwen3-0.6b-repro")
enc = AutoModel.from_pretrained("reneeice/editlens-qwen3-0.6b-repro", torch_dtype=torch.bfloat16).eval()
def score(text):
t = tok(text.lower(), truncation=True, max_length=512, return_tensors="pt")
h = enc(**t).last_hidden_state.mean(1)[0].float().numpy()
d = h - center
return orient * float(d @ inv @ d) # higher = more AI-editedPerformance
Validation on pangram/editlens_iclr (held-out), no backbone training:
The score is auto-oriented so it is never reported upside-down.
The project behind this model
This model is one of a family of three, the end of a single research thread that started from a classic question — can you tell human text from machine text? — and ended at a more realistic one — how much did AI edit this text, and can we trust that judgement?
The journey, start to finish:
- Reproduce "Human Texts Are Outliers." We first reproduced the core claim of arXiv:2510.08602 (NeurIPS 2025): instead of training a binary human-vs-machine classifier, model machine text as the in-distribution and treat human text as out-of-distribution (OOD) — an anomaly to be detected by distance from a learned center (DeepSVDD). A minimal end-to-end run on the RAID dataset hit AUROC 0.94, matching the paper.
- Meet EditLens. Binary detection is the wrong frame for the common case: people lightly edit their own drafts with AI. EditLens (Thai et al., 2025) reframes detection as a continuous "extent of AI editing" score in [0,1], and the community `editlens-qwen3-*-repro` models bring it to a modern Qwen3 backbone.
- Apply the OOD idea to the edit-detection setting. The insight of this work: take the OOD framing from step 1 and apply it to the edit-detection problem of step 2, on Qwen3. We pursued three concrete ways to do that — and shipped all three as a family:
Why three? They trade off cost and integration: A is a standalone model, B is a cheap add-on to an existing EditLens deployment, and C wraps either with an abstain-on-uncertainty safety layer. Pick the one that matches how you deploy.
One thing we learned the hard way
Our first frozen-embedding run scored an AUROC of 0.32 — not random, but inverted. On the EditLens embedding space the geometry is the opposite of the original RAID setup: human/clean text is the compact in-distribution and heavily-AI-edited text is the outlier (its embeddings are organized around extent of editing, not authorship). We flipped the in-distribution definition, switched from full Mahalanobis to a shrinkage-regularized / Euclidean distance on frozen features, and added an auto-orientation step that fixes the score's sign on a held-out slice so a detector is never reported upside-down. That correction is baked into this family.
How it was made
- Frozen backbone:
reneeice/editlens-qwen3-0.6b-repro(no fine-tuning). - Detector: mean-pool embeddings → DeepSVDD center over human text + shrinkage-regularized covariance (mahalanobis distance). Score = oriented distance to the center.
- Cost: one embedding pass + a closed-form fit — seconds of compute.
License
Apache-2.0. Built on Qwen/Qwen3-*-Base. The supervision labels derive from the gated `pangram/editlens_iclr` dataset; please honor its terms. Method credit: Human Texts Are Outliers (2510.08602) and EditLens (2510.03154).
