humanize-chinese

humanize-chinese · open source · pure Python

Don't rush to lower that AI score.

We measured six Chinese genres against five current models. The detector is still useful on short explainers, already weak on academic abstracts, and on long-form blogs the direction inverts — human writing scores higher than the machine's.

So the goal here is text that reads like a person wrote it,
not a smaller number.
Genres measured
6
Models used
5
Human papers misflagged
35%
API key for offline tier
None

Say it plainly

An "AI score" may mean nothing for the genre you write in

August 2026. Claude Opus 5, GPT-5.6, DeepSeek V4, GLM-5.3 and Kimi K3 each produced 50–100 samples per genre, set against 50 public human texts, recomputed after matching length on both sides.

GenreSeparationVerdict
Short explainer / news0.837still useful
Social posts0.771usable
Academic abstracts0.621already weak
Fiction0.479a coin flip
Long-form blogs0.155inverted

Read it as: pick one machine text and one human text at random — this is the probability the machine one scores higher. The tick is 0.5, a coin flip. Below that, the direction is reversed: asked to pick "the one that looks AI-written", it picks the human more often. The long-form row has a thinner sample (15 machine vs 22 human) than the others, but the direction is unambiguous.

Human-written papers get flagged too

60 real CNKI abstracts published before large language models existed average 60/100, and 35% land in the "almost certainly AI" band. Chinese academic prose is full of set connectives; the detector cannot tell convention from generation.

So don't screen long text with it

Short expository writing is a genuine exception — don't throw that out. But using it to judge whether a long blog post or a novel chapter was machine-written gives you answers that are wrong in a systematic direction.

Still readable afterwards

The usual failure isn't rewriting too little — it's emitting sentences that aren't Chinese

Every rewrite passes two gates, and failing them means the text comes back untouched.

  • Fact gate — numbers, names, proper nouns and paragraph count from the original; lose one and the rewrite is rejected.
  • Fluency gate — three models each score it and quote back any sentence they find broken. Two flagging the same sentence sends it back.
  • Three failures and it returns your text unchanged — better no edit than a broken sentence.
Measured (1–5, three judges; a second round when the first is not clean-cut, unioned)FluencyBroken sentences found
This tool · five exaggerated in-repo samples4.0 – 5.0none found
Previous rule-only rewriter · same samples2.05 – 17
This tool · real model output, 3 texts4.0 – 5.01 total

Two of the three real-model texts came back with nothing flagged; one had a single unbalanced coordination. The table says none found rather than zero on purpose — review misses real defects some of the time, so “none found” reports what this round caught, not what exists. Three samples is not a pass rate — but the direction is clear: real text is harder to rewrite than caricatured text, and the tool is not defect-free.

Install

Clone and run — no pip install

git clone https://github.com/swaylq/humanize-chinese.git
TierCommandAPI key
Offline./humanize rewrite file.txtnone
Boilerplate removal./humanize rewrite file.txt --llmrequired
Draft from scratch./humanize write "…"required

Pure Python standard library, zero dependencies. Also installs as a Claude Code skill. Licence is MIT Non-Commercial — free to use, modify and redistribute; commercial use excluded.