Links

SurfacePrint

Typographic Fingerprints of LLMs

Same word. Different apostrophe.

don't
U+0027
UTF-8: 27
don’t
U+2019
UTF-8: E2 80 99

Same words, different formatting

Plain text
A simple answer

It doesn't change.
Markdown
**A simple answer**

It doesn’t change.

Count the formatting.

’ ’ ’ ' '
3 / 5

60% curly

SurfacePrint

97 measurements of a text’s formatting

A random forest learns formatting patterns.

Formatting features feed a random forest, producing a human-to-language-model score Raw text becomes 97 formatting features. An ensemble of 300 decision trees combines those features into a continuous score, from more human-like to more language-model-like. The trees are schematic illustrations, not specific learned rules. Raw text don’t **bold** 97 features ··· Random forest 300 trees Score Human LM

Detect AI-generated text

TRAIN

Human text
+ 17 AI models

TEST

New texts

Evaluation

Human text<Generated text

Detector score

0.5Chance
AUROC
1.0Perfect

Formatting separates these benchmark texts.

0.983

Mean AUROC

Held-out texts · 17 known model sources

Even whitespace carries a fingerprint

Raw text
First paragraph.


Second paragraph.
0.983 AUROC
Whitespace cleaned
First paragraph.

Second paragraph.
0.889 AUROC

Instruction-tuned model generations are often easier to detect

Whitespace cleaned

Base modelAUROC 0.70.80.91.0 Llama 20.810Llama 3.10.744OLMo 30.709Qwen 3.50.840Gemma 40.754 Instruction-tuned/ 0.804/ 0.880/ 0.958/ 0.978/ 0.963

Different model families have different fingerprints

Train: human + Claude Sonnet 4 · cleaned text

0.00.250.5Chance0.751.0Claude Sonnet 4.6 (same family)0.969OPT-IML 1.3B (different family)0.301

Learn a new model family’s fingerprint

Collect
examples
Human + new AI family
Retrain
SurfacePrint
Learn its fingerprint
Detect
AI-generated text
Use the updated detector

AI writing styles leave
revealing fingerprints.