On this page
01 / The finding
Machine prose repeats itself less, and that is the axis the detector reads
Deleting every word and phrase on the “AI vocabulary” list from a machine document costs the detector 0.8 percentage points. Making the same document repeat itself more costs it 33.
Share of content words repeated from the neighbouring sentence. The median human document shares 6.3%, three times as much.
A detector that could be beaten by find-and-replace is a different detector from this one.
188 of 432 flagged, against 69.4% for ordinary short-form and 95.8% for long-form.
The median machine document shares 2.1% of its content words with the sentence beside it; the median human document shares 6.3%. That single property, read through several instruments, is what the detector keys on. A person introduces a term and keeps using it. A model introduces a term and reaches for a synonym, a pronoun, a rephrasing.
The commercial consequence is awkward and belongs on the page rather than in a footnote. Deliberately keyword-dense copy is the condition the detector handles worst. At the shipped operating point it flags 188 of 432 such documents, 43.5%, against 566 of 816 ordinary short-form documents at 69.4% and 883 of 922 long-form documents at 95.8%.
02 / Reading the figures
Three lines of evidence, at three different operating points
This page reconciles measurements taken at three points in the project’s history. The honest way to present them is to label each one rather than to average them into a single narrative, so every figure below carries the point it was taken at, in its prose, in its caption and in a stamp above it.
| Line | What it is | Corpus | Runtime | Operating point |
|---|---|---|---|---|
| Descriptive | 122 interpretable features over labelled documents | 670 fresh long-form pairs, drawn from a 25,723-document study corpus | None — feature statistics, computed without a model | None applies |
| Causal | One-at-a-time alterations re-scored through the deployed artefact | 400 machine and 400 human long-form documents | fp32, deployed artefact | 0.984 single threshold — retired |
| Observational | Detection binned by achieved type-token ratio | 432 generated samples, two models, lengths held constant | fp32 server | 0.9845 maximum-only — retired |
| Shipped | The keyword-repetition arm re-scored at the pair that runs today | 432 machine documents | Python onnxruntime 1.29.0, CPU, fp32, segments-v3 | 0.9855 / 0.9763, T = 0.8324 — ships today |
The two retired points are quoted because the experiments were run there and have not been repeated. A figure taken at 0.984 or at 0.9845 is not a description of the tool as it runs today. Only the last row describes current behaviour.
- The shipped pair, 0.9855 / 0.9763
- A document is flagged when its strongest section reaches 0.9855, or its second-strongest reaches 0.9763, at a fitted temperature of 0.8324. Two pieces of evidence, either of which is enough on its own.
- 0.984, retired
- A single threshold on the strongest section, with no second-evidence route. The ablation in section 04 was run against it and has not been re-run.
- 0.9845, retired
- A maximum-only candidate rule the segmentation work was scored against. The type-token-ratio bins in section 05 were measured there.
- Wilson interval
- The 95% confidence interval printed on every rate. It is asymmetric near 0 and 100, which is why it is used here in place of the textbook normal interval that would run past both.
03 / The property
The property itself, read six ways
On 670 register-matched fresh long-form pairs, eight of the ten strongest interpretable signals measure one behaviour.
| Signal | AUROC | Detection at a 1% human false-positive budget | Median machine | Median human |
|---|---|---|---|---|
| Content-word overlap between neighbouring sentences | 0.912 | 23.1% | 0.021 | 0.063 |
| Vocabulary variety in a 100-word window (MATTR) | 0.911 | 47.3% | 0.776 | 0.694 |
| Type-token ratio, first 400 words | 0.876 | 17.0% | 0.595 | 0.503 |
| Distinct word triples / word triples | 0.839 | 16.4% | 0.979 | 0.938 |
| Distinct word pairs / word pairs | 0.830 | 19.7% | 0.878 | 0.797 |
| Word-unigram entropy | 0.788 | 11.8% | 8.28 | 7.78 |
| Share of vocabulary used exactly once | 0.782 | 3.9% | 0.675 | 0.618 |
Measurement conditions
- Corpus
- 670 machine and 670 human fresh long-form pairs, register-matched, drawn from a 25,723-document study corpus.
- Runtime
- No model and no runtime. Every value in the table above is a statistic computed over text.
- Measured
- Re-verified against source 30 August 2026
- Also
- The detection column is single-feature detection at a fixed 1% human false-positive budget, not anything the product does. Source: SIGNAL-SCIENCE.md §2.
Wider vocabulary per unit length, and less overlap between neighbouring sentences. That is the same behaviour observed six ways, and it inverts the popular belief. Machine writing is widely called repetitive; on published long-form prose the opposite is measurably true. What people are noticing when they call it repetitive is structural sameness, parallel paragraph shapes and similar sentence openings, which is not lexical repetition.
04 / The causal test
What actually moves the score
400 machine and 400 human long-form documents were each altered one way at a time and re-scored through the deployed artefact. These figures were measured at the retired 0.984 single threshold, so the absolute rates describe a configuration that no longer runs. The deltas are the point.
Measured at a rule that no longer ships
- Corpus
- 400 machine and 400 human long-form documents, each altered one way at a time and re-scored. Unaltered baseline: 90.0% of machine documents flagged, 2.25% of human documents.
- Retired flag point
- 0.984
- Detector
tier3-cycle2-e5small-fp32.onnx, SHA-256e313ab00de1fffd2…4d2788d- Runtime
- fp32, deployed artefact
- Measured
- Re-verified against source 30 August 2026
- Also
- A single threshold on the strongest section, with no second-evidence route. Source: SIGNAL-SCIENCE.md §4.1.
The rule that ships today is 0.9855 / 0.9763. The figures under this stamp answer the same question at a flag point this tool no longer uses, and they are not a description of the tool as it runs now.
| Change applied | Machine flagged | Change | Human false positives |
|---|---|---|---|
| Unaltered | 90.0% | — | 2.25% |
| Lowercase everything | 90.0% | 0.0 pp | 2.25% |
| Delete every “AI vocabulary” word | 89.2% | −0.8 pp | 1.50% |
| Drop the first paragraph | 89.0% | −1.0 pp | 1.75% |
| Shuffle the paragraphs | 87.0% | −3.0 pp | 1.75% |
| Strip all markdown | 85.2% | −4.8 pp | 2.00% |
| Shuffle the sentences | 85.0% | −5.0 pp | 1.50% |
| Normalise all punctuation | 85.0% | −5.0 pp | 2.25% |
| Strip markdown and normalise punctuation | 73.2% | −16.8 pp | 2.50% |
| Truncate to 200 words | 59.8% | −30.2 pp | 0.75% |
| Make the text repeat itself more | 57.0% | −33.0 pp | 0.25% |
| Flatten the rhythm | 46.8% | −43.2 pp | 0.00% |
| Truncate to 100 words | 8.5% | −81.5 pp | 0.00% |
SIGNAL-SCIENCE.md §4.1. Two further conditions in that table are quoted in the prose rather than plotted: truncating to 400 words costs 0.2 points and reducing repetition further costs 6.8. The human column is reproduced for the twelve conditions plotted here.
The keyword list is not what the model is reading. Removing every one of those words and phrases costs 0.8 points. Two further conditions in the same table make the same case from the other side: truncating to 400 words costs 0.2 points, and reducing repetition further costs 6.8.
Replacing a quarter of content words with the document’s own most frequent content words changes nothing about length, sentence structure or function words. It only makes the text repeat itself more, and it drops detection by 33 points. That is the manipulation aimed directly at the descriptive finding above, and the two lines agree.
The half of the table that is easy to skip
The human column matters as much as the machine one. Under the repetition manipulation human false positives fall from 2.25% to 0.25%, and under truncation to zero. The model goes quiet rather than reckless: the alterations that stop it finding machine text also stop it accusing people.
Show the numbers this was drawn from
| Condition | Human documents flagged | Rate |
|---|---|---|
| Unaltered | 9 / 400 | 2.25% |
| Text made to repeat itself more | 1 / 400 | 0.25% |
| Truncated to 100 words | 0 / 400 | 0.00% |
SIGNAL-SCIENCE.md §4.1, human column. The full column for all twelve alterations is in the table under Figure 1.
05 / The cliff
Repetition, tested deliberately rather than observed
432 samples were then generated with repetition as the only variable: two models balanced, lengths held identical to an existing pilot, and one instruction style in two strengths telling the model to repeat an exact keyword phrase and keep a narrow vocabulary. That is ordinary search-optimisation practice rather than an evasion technique. These figures were measured at the retired 0.9845 maximum-only threshold.
Measured at a rule that no longer ships
- Corpus
- 432 generated samples, two OpenAI models balanced, pooled across every condition and binned by achieved type-token ratio at 400 and 600 words only.
- Retired flag point
- 0.9845
- Detector
tier3-cycle2-e5small-fp32.onnx, SHA-256e313ab00de1fffd2…4d2788d- Runtime
- fp32 server
- Measured
- Re-verified against source 30 August 2026
- Also
- A maximum-only candidate rule, with no second-evidence route. Source: SHORT-FORM-RETRAIN.md §10.3.
The rule that ships today is 0.9855 / 0.9763. The figures under this stamp answer the same question at a flag point this tool no longer uses, and they are not a description of the tool as it runs now.
| Type-token ratio | n | Detected | Rate [95% CI] |
|---|---|---|---|
| 0.00–0.42 | 49 | 10 | 20.4% [11.5–33.6] |
| 0.42–0.46 | 44 | 7 | 15.9% [7.9–29.4] |
| 0.46–0.50 | 33 | 19 | 57.6% [40.8–72.8] |
| 0.50–0.55 | 112 | 89 | 79.5% [71.1–85.9] |
| 0.55–0.60 | 168 | 148 | 88.1% [82.3–92.2] |
| 0.60–0.65 | 148 | 129 | 87.2% [80.8–91.6] |
| 0.65–1.00 | 89 | 77 | 86.5% [77.9–92.1] |
SHORT-FORM-RETRAIN.md §10.3, pooling every condition and binning by achieved type-token ratio. The 0.568 sub-label on the 0.55–0.60 column is the baseline 600-word median from §10.4.
Detection is flat at 86–88% all the way down to 0.55, then falls away. The knee is bracketed between 0.55 and 0.46, and not located: the 0.46–0.50 bin holds 33 documents, which is barely above the floor this project applies, and one bin cannot pin a threshold. Below 0.46 the model is effectively blind.
06 / The correction
The correction the source made to itself
An earlier write-up of this work claimed that routine keyword repetition pushes machine text onto the human side. That claim is recorded as overstated, and the correction is worth more than the original claim.
At routine doses it does not happen. The moderate instruction strength, which produced genuinely realistic keyword-optimised copy, came in at 146/209 = 69.9% against a baseline of 582/816 = 71.3%, with confidence intervals overlapping — [63.3, 75.7] against [68.1, 74.3] — and only one of four length bands reaching p < 0.05. The heavy condition reached 31/194 = 16.0%, and getting there took an instruction to repeat a phrase 17 to 25 times in 400 to 600 words, which degraded the output badly enough that 19% of generations came back empty or too short to keep, against 13% in the moderate condition. It is an adversarial condition rather than a sample of ordinary copy.
Detection is unaffected by keyword repetition until type-token ratio falls below roughly 0.55, and collapses below roughly 0.46.
Two things stop that being reassuring. Type-token ratio falls with length on its own, and the baseline 600-word median is already 0.568, just above the knee, so longer commercial copy drifts towards the cliff without anyone trying. At the ratio a real keyword-briefed article occupies the effect is measurable: pooled at 400 and 600 words in the 0.48–0.55 band, 103/136 = 75.7% against a matched-length baseline of 363/415 = 87.5%, z = −3.29, p = 0.001.
07 / The shipped pair
At the operating point that ships today
The whole keyword-repetition arm was re-scored at the shipped pair, so this section — and only this section — describes the tool as it runs now.
Measurement conditions
- Corpus
- 432 machine documents in the keyword-repetition arm, fenced separately from ordinary short text in the source file for the same reason it is fenced here.
- Operating point
- 0.9855 / 0.9763 · contract segments-v3 · T = 0.8324
- Detector
tier3-cycle2-e5small-fp32.onnx, SHA-256e313ab00de1fffd2…4d2788d- Runtime
- Python onnxruntime 1.29.0, CPU, fp32
- Measured
- 30 August 2026
- Also
- Compared against 816 ordinary short-form and 922 long-form machine documents scored at the same pair, on the same runtime, on the same day.
| Corpus | Flagged | Rate [95% CI] | What it is |
|---|---|---|---|
| Keyword-repetition arm | 188 / 432 | 43.5% [38.9–48.2] | Generated to an instruction to repeat a keyword phrase. No matched human corpus exists. |
| Ordinary short-form | 566 / 816 | 69.4% [66.1–72.4] | Machine short-form with no repetition instruction. |
| Long-form | 883 / 922 | 95.8% [94.3–96.9] | The long-form machine corpus, which is longer than either arm above. |
DETECTION-BY-LENGTH-AND-MODEL.md, Table 1 keyword-repetition arm and Table 2 short-form. No false-positive rate is printed for the keyword-repetition arm, because there is no matched human keyword-repetition corpus.
The length gradient survives the condition. Within the keyword arm detection rises from 14.0% at 100–199 words to 62.2% at 600–849, and every band sits well below its ordinary-text counterpart. Which model wrote the text makes no material difference: gpt-5.6-sol 88/199 = 44.2% [37.5–51.2], gpt-5.6-luna 100/233 = 42.9% [36.7–49.3].
| Words | Machine flagged | Detection rate [95% CI] |
|---|---|---|
| Under 100 words | 2 / 16 | n below 30, no rate quoted |
| 100–199 | 8 / 57 | 14.0% [7.3–25.3] |
| 200–299 | 3 / 9 | n below 30, no rate quoted |
| 300–399 | 61 / 136 | 44.9% [36.7–53.2] |
| 400–599 | 58 / 124 | 46.8% [38.2–55.5] |
| 600–849 | 56 / 90 | 62.2% [51.9–71.5] |
| All lengths | 188 / 432 | 43.5% [38.9–48.2] |
432 machine documents, flagged at 0.9855 / 0.9763, T = 0.8324, segments-v3, Python onnxruntime 1.29.0, CPU, fp32, measured 30 August 2026. Bands holding fewer than 30 documents get their count and no rate.
The human side of this axis has never been generated. Everything above reports machine detection under the condition and says nothing at all about false positives under it, so no false-positive rate for keyword-dense copy is printed anywhere on this page. That is a gap in the measurement, not an omission from the write-up, and it is the single figure a reader is most likely to want and least able to get here.
08 / Who is at risk
Which human writers the model leans towards
The same probe run from the other direction answers the question for the human population. Correlating the deployed model’s raw margin against each interpretable feature within human documents only, so the result is not simply restating the label, across 4,184 documents.
| Feature | Spearman ρ |
|---|---|
| Discourse markers | +0.368 |
| Short words | −0.362 |
| Mean word length | +0.359 |
| Long words | +0.300 |
| Burstiness of sentence length | −0.264 |
4,184 human documents. Source: SIGNAL-SCIENCE.md §4.3.
That column describes formal, long-worded, evenly paced prose that signposts itself: academic and corporate writing.
09 / Limits
What this does not prove
Ablation shows sensitivity, not mechanism. A large score shift proves the model responds to the property that was manipulated; it does not prove that property is the model’s reason. Flattening the rhythm is the clearest case. It moves the score furthest at −43.2 points, and it also produces text unlike anything in any training distribution, so the shift may be a distribution-shift artefact rather than evidence about rhythm. The source declines to draw the obvious conclusion from it, and so does this page.
The repetition arm used two models, both from one provider, and was not tested across providers. The descriptive finding underneath it is weakest on Meta’s models, with MATTR at 0.562 and adjacent-sentence cohesion at 0.561, and only moderate on Nvidia’s at 0.633 and 0.694. By register it is weakest on creative writing (0.668) and social posts (0.658).
Every figure on this page is fp32 through Python onnxruntime. The repetition findings have not been confirmed on the browser runtime, and no browser figure is quoted here.
The keyword-repetition corpus is a generated adversarial condition. Its absolute rates describe documents written to an instruction to repeat a phrase, not a sample of published commercial copy, and the two should not be conflated even though the second drifts towards the first as it gets longer.
268 of its 922 machine documents also sit in the cycle-2 training dataset, 168 of them in the train split. The human half is effectively clean at 11 of 4,636. That matters for the detector measurements on this page, which are model outputs rather than feature statistics, and it is the reason no figure here is described as being drawn from documents no model has seen.
Two of the three lines of evidence on this page were measured at flag points that no longer ship.
10 / The commercial consequence
What follows commercially
The tool degrades on precisely the kind of copy its commercial users produce on purpose, once that copy is long enough and keyword-focused enough to push type-token ratio below about 0.55. That weakness is published here with its denominator rather than buried, under the same rule that governs every other weakness in this project.
It will also be shared by competitors, because it follows from the signal the whole field relies on rather than from anything specific to this implementation. Any detector reading under-repetition as its principal axis has the same cliff underneath it, whether or not it has been measured.
11 / Provenance
Where every figure came from
| Figure | File | Section |
|---|---|---|
| 2.1% against 6.3% adjacent-sentence overlap; MATTR 0.911 / 47.3%; the seven-signal table | signal-science/SIGNAL-SCIENCE.md | §2 |
| Ablation table, 400 + 400, at the retired 0.984 single threshold | SIGNAL-SCIENCE.md | §4.1 |
| Within-human correlations, n = 4,184 | SIGNAL-SCIENCE.md | §4.3 |
| Meta 0.562 / 0.561, Nvidia 0.633 / 0.694, creative 0.668, social 0.658 | SIGNAL-SCIENCE.md | §2.3, §2.5 |
| Type-token-ratio bins at the retired 0.9845 point; 69.9% against 71.3%; 103/136 against 363/415, p = 0.001; 0.568 median; 19% unusable; the two-model limit | docs/measurements/SHORT-FORM-RETRAIN.md | §10.2, §10.3, §10.4, §10.5, §10.8 |
| 188/432 = 43.5% and every length band, at 0.9855 / 0.9763; 566/816; 883/922; per-model 88/199 and 100/233 | docs/measurements/DETECTION-BY-LENGTH-AND-MODEL.md | Table 1 keyword-repetition arm, Table 2 short-form |
| Academic discussion 8/420, fiction 23/260, at the shipped pair | docs/measurements/DETECTION-BY-LENGTH-AND-MODEL.md | Table 3 |
Every file named above ships with the open measurement repository, so any figure on this page can be re-run rather than taken on trust — including the two that were taken at retired flag points, which is how a reader can establish for themselves what the shipped pair would do with them.