rishanthrajendhran/IdeaLens-ModernBERT-L-NoParaphrase

Model

IdeaLens-ModernBERT-L-NoParaphrase

0

11 commits

1 linked in READMEs

updated Oct 6, 2026

See the code

README

IdeaLens-ModernBERT-L-NoParaphrase

IdeaLens-ModernBERT-L-NoParaphrase is an idea-level detector: it judges whose ideas a document contains, not who wrote its words, so a document whose ideas are a person's counts as human however much of its prose an AI wrote. It is one of the detectors released with IdeaLens and trained on the same data.

ModelModernBERT-large with a sequence-classification head
Readsthe whole role-labelled outline as extracted (trained without the paraphrasing step)
Training dataWildOutlines, train split
OutputP(human); a document is flagged as AI when P(human) is below a cut
Default cut0.06067 (global, 1% false-positive rate)
Hardwareany GPU; a CPU works for small jobs

Usage

The idealens package (PyPI) runs the whole pipeline: it assigns each document one of the eight formats, extracts the outline with the prompt, role vocabulary and worked examples the detectors were trained with, and scores it with this model and the thresholds in this repo.

pip install "idealens[hf]"
idealens run docs.jsonl -o scores.jsonl --model IdeaLens-ModernBERT-L-NoParaphrase

Input is JSONL with a text field per document. To score outlines you already have, use idealens score outlines.jsonl -o scores.jsonl --model IdeaLens-ModernBERT-L-NoParaphrase. Score outlines as extracted; the paraphrasing step is only for training data.

In Python, step by step:

import idealens as il

texts = [open("document.txt").read()]
formats = il.classify(texts)                  # one of the eight formats per document
outlines = il.extract(texts, formats)         # role-labelled outlines
with il.Detector("IdeaLens-ModernBERT-L-NoParaphrase") as det:
    records = det.score_outlines(outlines, format=formats)

r = records[0]
print(r["p_human"], r["verdict"]["ai"])       # P(human); flagged at the 1% global cut?
print(outlines[0].render())                   # the outline that was scored

Or in one call: records = il.run(texts, det). classify and extract use Gemini 3.7 Flash, the extractor the thresholds were fitted with (GEMINI_API_KEY); pass provider=idealens.providers.make(...) to use Vertex, OpenAI, Anthropic, OpenRouter or a local server. The package README covers the other ways to run it.

Thresholds

thresholds.json holds this model's cuts at 0.1%, 0.5%, 1%, 2% and 5% false-positive rates, fitted on the 80,000 human documents of WildOutlines' calibration split: one global cut per rate, plus per-format and per-topic cuts. The package applies them. A cut fitted for one model does not transfer to another model's scores. For documents unlike English web text, fit cuts on human documents from your own domain with idealens calibrate.

License

CC BY-NC-SA 4.0: free to share and adapt for non-commercial purposes, with attribution and under the same license. Built on answerdotai/ModernBERT-large (Apache 2.0).

Citation

@article{idealens2026,
  title         = {IdeaLens: Detecting AI Ideas in Long-form Writing},
  author        = {Rajendhran, Rishanth and Choi, Minjoon and Russell, Jenna and Namuduri, Ramya and B{\"o}l{\"o}ni-Turgut, Deniz and Karpinska, Marzena and Wieting, John and Iyyer, Mohit},
  journal       = {arXiv preprint arXiv:2610.06778},
  year          = {2026},
  eprint        = {2610.06778},
  archivePrefix = {arXiv},
  primaryClass  = {cs.CL},
  url           = {https://arxiv.org/abs/2610.06778}
}
ai-text-detection
endpoints_compatible
idea-provenance
modernbert
safetensors
text-classification
text-embeddings-inference
transformers

rishanthrajendhran/IdeaLens-ModernBERT-L-NoParaphrase

Model

IdeaLens-ModernBERT-L-NoParaphrase

0

11 commits

1 linked in READMEs

updated Oct 6, 2026

See the code

README

IdeaLens-ModernBERT-L-NoParaphrase

IdeaLens-ModernBERT-L-NoParaphrase is an idea-level detector: it judges whose ideas a document contains, not who wrote its words, so a document whose ideas are a person's counts as human however much of its prose an AI wrote. It is one of the detectors released with IdeaLens and trained on the same data.

ModelModernBERT-large with a sequence-classification head
Readsthe whole role-labelled outline as extracted (trained without the paraphrasing step)
Training dataWildOutlines, train split
OutputP(human); a document is flagged as AI when P(human) is below a cut
Default cut0.06067 (global, 1% false-positive rate)
Hardwareany GPU; a CPU works for small jobs

Usage

The idealens package (PyPI) runs the whole pipeline: it assigns each document one of the eight formats, extracts the outline with the prompt, role vocabulary and worked examples the detectors were trained with, and scores it with this model and the thresholds in this repo.

pip install "idealens[hf]"
idealens run docs.jsonl -o scores.jsonl --model IdeaLens-ModernBERT-L-NoParaphrase

Input is JSONL with a text field per document. To score outlines you already have, use idealens score outlines.jsonl -o scores.jsonl --model IdeaLens-ModernBERT-L-NoParaphrase. Score outlines as extracted; the paraphrasing step is only for training data.

In Python, step by step:

import idealens as il

texts = [open("document.txt").read()]
formats = il.classify(texts)                  # one of the eight formats per document
outlines = il.extract(texts, formats)         # role-labelled outlines
with il.Detector("IdeaLens-ModernBERT-L-NoParaphrase") as det:
    records = det.score_outlines(outlines, format=formats)

r = records[0]
print(r["p_human"], r["verdict"]["ai"])       # P(human); flagged at the 1% global cut?
print(outlines[0].render())                   # the outline that was scored

Or in one call: records = il.run(texts, det). classify and extract use Gemini 3.7 Flash, the extractor the thresholds were fitted with (GEMINI_API_KEY); pass provider=idealens.providers.make(...) to use Vertex, OpenAI, Anthropic, OpenRouter or a local server. The package README covers the other ways to run it.

Thresholds

thresholds.json holds this model's cuts at 0.1%, 0.5%, 1%, 2% and 5% false-positive rates, fitted on the 80,000 human documents of WildOutlines' calibration split: one global cut per rate, plus per-format and per-topic cuts. The package applies them. A cut fitted for one model does not transfer to another model's scores. For documents unlike English web text, fit cuts on human documents from your own domain with idealens calibrate.

License

CC BY-NC-SA 4.0: free to share and adapt for non-commercial purposes, with attribution and under the same license. Built on answerdotai/ModernBERT-large (Apache 2.0).

Citation

@article{idealens2026,
  title         = {IdeaLens: Detecting AI Ideas in Long-form Writing},
  author        = {Rajendhran, Rishanth and Choi, Minjoon and Russell, Jenna and Namuduri, Ramya and B{\"o}l{\"o}ni-Turgut, Deniz and Karpinska, Marzena and Wieting, John and Iyyer, Mohit},
  journal       = {arXiv preprint arXiv:2610.06778},
  year          = {2026},
  eprint        = {2610.06778},
  archivePrefix = {arXiv},
  primaryClass  = {cs.CL},
  url           = {https://arxiv.org/abs/2610.06778}
}
ai-text-detection
endpoints_compatible
idea-provenance
modernbert
safetensors
text-classification
text-embeddings-inference
transformers