Notes · August 2026
The tell wasn't the em-dashes. It was that all 100 books had the same number.
I have a hundred AI-written novels and permission to publish the numbers. Here is what measuring them taught me, including the part where the obvious fix turned out to fix the wrong thing.
The thing everybody looks for
If you have read anything about detecting machine-written prose, you have read about em-dashes. The claim is roughly: language models love them, humans use them sparingly, count the dashes. Alongside it sits a familiar vocabulary list — delve, tapestry, a testament to, not just X but Y.
The vocabulary list is easy to defeat and mostly already has been. I checked my own library for the usual phrases and found them at essentially zero. That is not evidence of anything except that the clichés are well known enough to have been trained and prompted out.
The dash count is harder to dismiss, so I counted. A hundred novels, 9.46 million words, all from one pipeline. The result was 114 em-dashes per 10,000 words against a human sample averaging 64.
That gap is real, and it was not the interesting part.
The interesting part
I measured ten human-authored novels chosen to span a wide stylistic range. They came in at a mean of 64 per 10,000 — but the spread was enormous. Conan Doyle sat at 18. Rowling sat at 101. The coefficient of variation across the sample was 0.45.
My hundred books had a CV of 0.15.
A hundred books by a hundred notional authors, in eleven genres, punctuating at very nearly one rate.
That is the signature. Not the level — the invariance. A human corpus of a hundred books would fan out, because punctuation is a habit and habits differ. Mine clustered, because underneath a hundred voices there was one habit.
The control that convinced me: semicolons in the same hundred books have a CV of 0.85. So the corpus is perfectly capable of varying a punctuation mark. It varies the one nobody thinks to prompt about, and holds nearly constant on the one everybody discusses.
The obvious fix, and what it actually did
I did what anyone would do. I built a reduction pass: find dashes doing work a comma, a period, or a colon could do, and repunctuate. It ran across all hundred books and removed 16,919 of them, a 15.7% cut, with no integrity failures.
Mean density went from 114 to 96.
Then I remeasured the variance.
| Corpus | Mean /10k | CV | Range |
|---|---|---|---|
| Human sample (n=10) | 64 | 0.45 | 18–101 |
| Library, before cleanup (n=100) | 114 | 0.15 | — |
| Library, after cleanup (n=100) | 96 | 0.157 | 56–133 |
The cleanup moved the level and left the signature untouched. CV 0.15 before, 0.157 after. Of course it did — a uniform rule applied uniformly to a hundred books preserves uniformity by construction. I had spent the effort making the corpus less dashy and not one bit more human-shaped.
Worse, I was close to the floor. The dashes that remained weren't decoration. About 42% were inside dialogue, where the dash is a speech break and removing it flattens a voice. Another 31% were paired parentheticals containing commas, where converting to commas produces run-ons. Getting from 96 to the human mean of 64 by hand would have taken something like 750 editing batches. I stopped, and hand-edited nine of the worst narrative paragraphs instead — and deliberately left two alone, including a scene where a father breaks down and twelve of the fourteen dashes belong to the character rather than to me.
The fix that worked was upstream
If uniform post-processing can't create variance, the variance has to come from generation. So I changed the drafting instruction rather than the cleanup: a target density, and an explicit requirement that books differ from each other rather than converging.
Eighteen books have since been drafted under that rule. They are the same length, the same pipeline, the same genres.
| Corpus | Mean /10k | CV | Range |
|---|---|---|---|
| Human sample (n=10) | 64 | 0.45 | 18–101 |
| Library, after cleanup (n=100) | 96 | 0.157 | 56–133 |
| New wave, drafted to the rule (n=18) | 59 | 0.474 | 0–121 |
Mean 59, below the human mean. CV 0.474, against the human sample's 0.45. The range runs from a detective novel at 121 down to one book with a single em-dash in 95,129 words — and that one is in an epigraph attribution, so the body text has none at all. It reads fine. I would not have believed that was reachable when I was grinding the reduction pass toward 96.
It was never a cleanup problem. It was a generation problem wearing a cleanup problem's clothes.
What I think this means
Distributional tells beat lexical ones. Word-list detection is an arms race that the generator wins, because the list is public and the fix is a prompt. A statistic computed across a body of work is harder to game, because you have to know to look at the second moment rather than the first — and because most people producing at volume never check.
Volume is what exposes you. One book at 114 per 10,000 is a writer who likes dashes. A hundred books at 114 ± 15 is a machine. The tell doesn't exist in any single artifact; it only appears in the corpus. That should worry anyone mass-producing text and comfort anyone who isn't.
Reducing a signal is not the same as removing a signature. This is the part I got wrong, and it took a second measurement to see. Any uniform transformation preserves uniformity. If your corpus is too regular, post-processing cannot help you; only the generation step can.
Limits
The human sample is ten books, which is small, hand-picked, and English-language literary and commercial fiction only — it establishes that human variance is high, not what the true population value is. The new wave is eighteen books against the library's hundred, and a smaller sample makes CV noisier. All of it is one pipeline and one set of instructions, so nothing here says anything about anyone else's output. And I have not tested whether a reader notices any of it; this measures a statistical property, not prose quality, and I would not confuse the two.
I am publishing the numbers rather than the corpus. If you want to run the same measurement on your own text it is four lines of Python, and I would be interested in what the CV looks like on a body of work you know to be human.