2026-10 · experiments

TELL, an AI-Text Detector That Shows Its Work

What the detection literature measures, what I took from it, the giveaway words, and what a 115,000-word document still gave away after the obvious tells were gone.

At the healthcare company where I used to work, the cost of writing a fourteen-page appeal with citations to the plan document, the state statute, and three prior determinations dropped to about zero in a single year. Every one of those pages still had to be read by a person with a caseload and a regulatory clock. So the AI conversation in most meetings was about using AI to detect AI, and the question was always "can we tell?" My answer was "sort of, and you won't like the error rate."

My friend Jing Xu was leading a team looking into AI detection at the time, and most of what I knew about the literature came from comparing notes with her: a new zero-shot method, a new benchmark, a new paper showing last year's detector falling over on this year's model.

I never got to build the thing there, so I built it at home. TELL (as in a poker tell, a signal the writer didn't mean to give) puts the methods from that literature into one engine with one rule: it returns evidence, never a verdict.

The TELL web UI. On the left, a 290-word productivity blog post with dozens of highlighted spans. On the right, an evidence report headed Substantial tell density in the flagged spans, total LLR +9.43, with a list of signal contributions.
The paste UI on a deliberately awful sample. Every highlight is a span some instrument flagged, and the right column is the arithmetic.

The techniques

Nearly every method rests on one fact: a language model predicts the next word, and text a model wrote is text a model finds easy to predict. Here is what each one measures and where it came from.

Perplexity
measuresHow surprised a reference model is, word by word. Feed it the text, record the probability it gave the word that actually came next, average the surprise, exponentiate. A perplexity of 8 means the model was as uncertain as a choice among eight equally likely words.
reads machineLow. The model that wrote the text was picking its own most likely words.
weak spotCareful technical prose and second-language writing are also low. Seven commercial detectors flagged 61% of human-written TOEFL essays as AI and almost none written by US eighth graders.
sourceGLTR, Gehrmann, Strobelt and Rush, ACL 2019, which colored each word by its rank in GPT-2's prediction. GPTZero productized it in 2023. The bias result is Liang, Yuksekgonul, Mao, Wu and Zou, Patterns 2023.
Burstiness
measuresHow much the surprise jumps from sentence to sentence, rather than its average.
reads machineSmooth. People write a plain sentence and then a strange one; models keep a steady hum.
weak spotNeeds enough sentences to measure variance, and a disciplined human editor flattens it too.
sourcePopularized alongside perplexity by GPTZero (Tian, 2023); the underlying idea is per-sentence perplexity variance from the stylometry literature.
DetectGPT
measuresCurvature. Make a hundred small paraphrases of the text and score every one against the original.
reads machineWhen the original sits on a peak: nearly every paraphrase scores worse. Human text sits on a slope, with paraphrases scoring better about as often as worse.
weak spotA hundred model calls per document.
sourceMitchell, Lee, Khazatsky, Manning and Finn, ICML 2023.
Fast-DetectGPT
measuresThe same curvature, estimated by sampling alternative words from the model's own next-token distribution instead of paraphrasing.
reads machineHigh conditional probability curvature; the paper reports machine text near 3 and human text near 0.
weak spotStill depends on how close the reference model is to the one that wrote the text.
sourceBao, Zhao, Teng, Yang and Zhang, ICLR 2024. One pass instead of a hundred.
Binoculars
measuresTwo models from one family, an observer and a performer. The observer scores perplexity as usual. Then: at each position, how surprising would the observer find the word the performer would have chosen? That cross-perplexity captures how predictable the text is for reasons that have nothing to do with authorship, like topic. Divide the first by the second.
reads machineA low ratio. The text is more predictable than even a model would expect it to be.
weak spotThresholds move with the model pair, and the pair has to share a tokenizer.
sourceHans, Schwarzschild, Cherepanova, Kazemi, Saha, Goldblum, Geiping and Goldstein, ICML 2024. Over 90% of generated samples caught at a 0.01% false positive rate, with no training data.
Watermarks and provenance
measuresNothing about the words. A watermark biases the model's sampling toward a secret subset of tokens so the text carries a statistical fingerprint. Content Credentials attach a signed manifest to the file.
reads machineWhen the fingerprint or the manifest is present. Near-zero false positives.
weak spotGone the moment someone pastes the text into a new document. Absence proves nothing.
sourceKirchenbauer, Geiping, Wen, Katz, Miers and Goldstein, ICML 2023; SynthID-Text, Dathathri et al., Nature 2024, deployed in Gemini. Manifests are the C2PA specification.
Stylometry
measuresThe authorship-attribution toolkit from before any of this: sentence-length distribution and its kurtosis, paragraph uniformity, punctuation habits, type-token ratio, function-word profiles, transition words at paragraph openings.
reads machineToo regular. Models under-produce very short and very long sentences and are too consistent about punctuation.
weak spotEach feature is weak alone and false-fires on restrained, careful writers.
sourceMosteller and Wallace settled the disputed Federalist Papers with function-word rates in 1964. No GPU required then or now.

What TELL does with them

Every one of those methods fails, and they fail in different ways. Perplexity fails on careful writers. Lexical tells fail the week the vendor tunes them out. Watermarks fail on copy-paste. If the failures are uncorrelated you can run all of them and let the agreement be the signal. Detection is a portfolio problem, not a model problem.

So TELL is an ensemble. Every instrument implements one small contract: take the document, return a log-likelihood ratio, a confidence, the spans that drove it, and a sentence of rationale a reviewer could argue with. A regex and a GPU scorer look identical to the fusion layer. Loaded today:

A section of the how-it-works page explaining the log-likelihood ratio. A small table maps LLR values to odds shifts: minus 1 is 2.7 to 1 toward human, 0 is nothing, plus 1 is 2.7 to 1 toward machine, plus 3 is 20 to 1, plus 6 is 400 to 1.
The unit. Every instrument reports in log-likelihood ratios, so honest witnesses can be added. The posterior is a skeptical prior plus the sum.

The unit is what makes the portfolio add up. A +1 shifts the odds about 2.7 to 1 toward machine, a +3 about 20 to 1, and independent evidence in that unit sums. TELL starts from a skeptical prior of about 7 to 1 that a document is human, adds the evidence, and shows the arithmetic.

The arithmetic has three corrections, and they are policy, not tuning. Instruments that partly measure the same thing (sentence uniformity, low perplexity, a pile of register words) are grouped, and within a group the strongest counts fully while the rest are discounted, 0.62 for the second and 0.45 for the third. No single instrument may contribute more than +3. And if only one signal fired, the total is held just under the "elevated" band no matter how loud it was. Real humans use em-dashes. A single tell is worth almost nothing; the signal is unrelated tells co-occurring. Every report also says, in the header, that false-positive rates for the profile have not been measured. Until they are, TELL answers "does my draft read like a machine wrote it, and where?" and nothing else.

The obvious giveaways

David Sedaris's Me Talk Pretty One Day is a book about being bad at French, and it is one of the funniest things I have read, because the broken grammar is the voice. Style is how a person gets through to you. So it bothers me when my AI tells me something "is the spine" or "the substrate." Me no talk like that. Nobody I know talks like that. The Claude-isms pack is where those go. Some of it:

The GPT pack carries the 2023 vocabulary everyone knows (delve, tapestry, testament, pivotal, robust, seamless, leverage), "whether you're a," emoji in headings, and the "Furthermore" that opens a paragraph. The chatbot-voice pack is tiny and nearly certain: "Great question," "I hope this helps," "Let me know if you'd like." Providers tune words faster than they tune manners.

Every rule in those packs fires in human writing. That is why the sample in the first screenshot scored +9.43 with 76 flagged spans, and a 288-word essay about rebuilding a fence scored +0.03 with two.

What a 115,000-word document gave away

The last thing I ran through all of this was a planning document I produced with a coding agent over a few days: 115,000 words in 55 Markdown files, bound into a 320-page PDF. It had been written under rules that forbid the obvious tells and had been through two cold-read reviews by agents given no context. I wanted to know what was left.

TELL's terminal evidence report for a 115,623-word document in the technical profile. Assessment: mild stylistic overlap with machine-generated text, total LLR +2.90, posterior 0.60. The contributions table lists the Claude-isms pack at +3.00, the GPT register pack at +0.15, punctuation at +0.15, burstiness at +0.05, and the rest at zero.
The terminal report, technical profile. Mild, and one hundredth of a point under elevated, which is the single-fire ceiling doing its job.

Mild, at +2.90. Only one instrument fired above the noise floor, so the ceiling pinned the total under elevated no matter how loud that pack was. The vocabulary tells were gone: zero of 2,225 sentences opened with a stock transition, the GPT pack found almost nothing, the Binoculars ratio came in at 1.043 on the human side, and perplexity at 30.9, well above the floor. What remained was structural:

what fired count rate
arrows in prose 404 3.5 per 1k words
bold spans 820 7.1 per 1k words (human p95 is about 8)
backticks around short phrases 2,878 24.9 per 1k words
sentence, then a two-word fragment for punch 204 in 2,225 sentences
lists with near-uniform bullet length 12
semicolons 26.7 per 1k words (human p95 is about 4)

Backticks around identifiers in a spec are not emphasis, and the arrows lived in tables; the report weights both low and says so. The GPT pack counted "harness," a term of art in that document, as a delve-family verb 142 times, and one rule can't move the total. But the semicolons were real, at six times the human 95th percentile, and so were the 204 punch fragments and the twelve lists where every bullet was the same length. The lexical tells had been edited out. The rhythm hadn't.

Then the part TELL couldn't see. Over a long document a model falls in love with a word. Not a tell word, usually. A plain one, used in three senses and leaned on in every section, because the model has no memory of using it 200 pages ago. So the newest check does nothing but count: the most frequent content words across a folder, and for any one word, the phrases it appears in. A word with one dominant phrase has one meaning. A word spread across many phrases is carrying several and wants a glossary entry or a rename.

"Never" is the one I would not have caught by reading. Three words from that document, with their rate against the two posts on this site I wrote by hand:

word in the document in my posts what the phrases showed
never 201, or 2.4 per 1k 0.5 per 1k "users never see," "is never stored," "never a," "never put": an absolute every 575 words
shows 204, or 2.5 per 1k 0.5 per 1k 63 of them were "figure shows"
gate 90, or 0.8 per 1k 0 "gate registry," "hard gate," "gated in," "gate pages," "date gate": one word, at least four meanings

Each "never" sentence was fine. Two hundred of them turned a plan into a list of prohibitions. "Gate" was worse, because every reader would have picked a different meaning and none of them would have known. The fix was a vocabulary rule in the document's own style guide: a gate is an external, non-code condition between code-complete and live, with an owner and a date. Merge-time conditions are checks. Latency limits are ceilings. Sign-in is access control. Then a rename pass, and the count fell to the uses that meant the one thing.

That is the tool I wanted at the healthcare company and didn't have. Not a percentage. A list of what fired, how often, where, and how much each one is allowed to count, so the person with the caseload and the clock can decide what to do about it.

I enjoy having AI as a partner, not a crutch. It helped me with this post. Can you tell?

← back to writing