# AI 中文写作特征实测 中文 | [English](RESEARCH.en.md) 这份文档记录每一条规则的**预设与实测结果**,包括被推翻的预设。规则的依据是句式形态可定位,数字只用来决定某个句式够不够格立为规则。 一开始有一批基于 30 篇 AI 样本的倍率统计(句长 CV ×51、三连排比 ×7.3、段首序数词 29%、破折号「Claude 独有」等),后来用更大语料复测,多数对不上,已全部废弃。原因见文末「六次测量失误」。 ## 方法 ### 设计 对照实验。同一批话题,让 AI 写一遍,跟真实文章比。因变量是各个句式的出现频率,自变量是"谁写的"。 要让这个比较成立,得先控制三件事。 **话题与文体。** AI 侧 300 篇覆盖 38 个话题,话题范围和文体与人类侧对齐。如果两边写的不是一类东西,测出来的差异就分不清是模型造成的还是文体造成的。 **模型。** 用 5 个模型各 60 篇,而不是单一模型。早期只用 2 个模型 30 篇,得出的结论后来被推翻大半。比如"破折号是 Claude 独有",扩到 5 个模型后发现 DeepSeek 更重。单模型的癖好会被误读成 AI 的共性。 **生成条件。** AI 侧不联网、不给写作指令,只给话题。加了风格要求就测不出模型的默认倾向。 ### 语料 | | 篇 | 汉字 | 句 | 段 | |---|---|---|---|---| | AI | 300 | 1,179,105 | 37,642 | 14,549 | | 人类 | 329 | 1,647,867 | 57,909 | 31,172 | | 合计 | 629 | 2,826,972 | 95,551 | 45,721 | 模型:claude-opus-4-6、deepseek-v4-pro、gemini-3.1-pro、gpt-5.6-sol、kimi-k3,各 60 篇。 人类侧是真实中文作者的公开文章,分组独立统计,用来判断差异在人类内部是否稳定。某一项如果只在个别组偏高,说明那是个人风格或文体特征,不是人类共性。虚词和破折号都是这样被识别出来的。 ### 切分 分句:先按行切,丢掉标题行、表格行、代码块、引用块和列表项,再按 `。!?;` 断句,保留 4 字以上的片段。 丢掉这些行是必要的。早期版本只按 `。!?` 断句,Markdown 表格和没有句号的长列表被当成一个句子,某一组的句长标准差算成了均值的 27 倍,由此得出"AI 句长比人类均匀 51 倍"。修正后重测,0.87 倍,没有差异。 分段:按空行切,丢掉标题、表格、代码块、引用、列表项和图片行,保留 8 字以上的段落。 ### 分母 三种,按测什么选。 | 分母 | 用于 | 例子 | |------|------|------| | 每千汉字 | 词汇和标点层面的特征 | 破折号、顿号、"不是…而是" | | 每百段 | 段落层面的结构特征 | 相邻句同构、比喻起段 | | 占同类元素比例 | 依附于特定结构的特征 | 问句小标题占全部小标题的比例 | 分母选错会直接给出反向结论。AI 平均每篇 10 个小标题,人类 1-2 个。用每千字算,问句小标题是 32 倍;换成占小标题的比例,AI 2.7%、人类最高 3.6%,差异消失。前者测的是"AI 小标题多",后者才是"AI 爱用问句当小标题"。 段首类特征的分母是"非首段",因为首段没有上文可回指。 ### 判定 倍率 = AI 频率 ÷ 人类频率。 | 倍率 | 判定 | |------|------| | ≥ 2.0 | 收录为规则 | | 1.25 - 2.0 | 需人类侧稳定且量足够大才收 | | 0.8 - 1.25 | 无差异,不收 | | < 0.8 | 人类用得更多,反向也不能删 | 除倍率之外还有三个条件。 一是**人类侧稳定**,各组数值不能相差 5 倍以上。破折号在组间差了百倍(最低 0.01,最高 1.29),所以虽然倍率 3.0,仍在规则里另加了说明。 二是**触发标记可定位**,规则得能指出改哪一句、哪个词。"读起来太整齐"这种没法验收,不收。所以"比喻是否贴切""三个案例是否在凑数"这类语篇特征全部排除,哪怕感觉上很像 AI 味。 三是**改法不违反白名单**。材料密度这项人类是 AI 的 2.8 倍,方向明确,但"补数字"违反信息守恒原则,所以只取可执行的一半,也就是原文已有具体数据时不许用概括盖掉。虚词同理,AI 确实少,但"补虚词"无法验收,整条弃用。 ### 正则 每条规则一个正则,定义写在脚本顶部,可直接修改。 这是整套方法最薄的一环。正则匹配字面形态,不匹配语义,写宽了会抓进大量不该算的东西。本项目为此翻过六次车,详见文末。由此定的操作要求是,**改规则前先抽样看 20 条命中,再看频率。** ### 可复现性 语料不入库(版权与隐私),所以下面的数字第三方无法核验。能复用的是方法和脚本,换成自己的语料可以算出对应结果。 这是实质缺陷,不是免责声明。数字不可核验意味着读者只能选择信或不信。真正可检验的部分是切分规则、分母选择、判定门槛和正则定义,这些都在脚本里公开。 ## 预设 vs 实测 倍率一列统一为「AI ÷ 人类」,大于 1 表示 AI 用得多,才可能是 AI 痕迹。 ### 成立,已立为规则 | 特征 | 预设 | 实测 | 倍率 | 规则 | |------|------|------|------|------| | 段首零主语评论 | 未预设,用户指出 | AI 0.61%、人类 0.14%(占非首段) | 4.4× | 第 11 条 | | 拟人化喻体 | 预设是「比喻包装抽象概念」 | AI 0.018、人类 0.002 | 7.3× | 第 7 条 | | 冒号滥用(提示语) | 「模板感强」 | AI 0.29、人类 0.08 | 3.8× | 第 5 条 | | 冒号滥用(空转句引列表) | 未预设 | AI 0.29、人类 0.03 | 9.4× | 第 5 条 | | 翻案腔 | 「AI 最爱不是…而是」 | AI 0.73、人类 0.22 | 3.4× | 第 1 条 | | 破折号 | 「Claude 独有,×3」 | AI 2.38、人类 0.80 | 3.0× | 第 4 条 | | 起手式(说白了) | 未量化 | AI 0.025、人类 0.008 | 3.2× | 第 9 条 | | 序数词当小标题 | 「GPT 29% 段落用序数词」 | AI 0.19、人类 0.06 | 3.1× | 第 6 条 | | 材料密度(缺数字) | 未预设 | 数字 AI 6.34、人类 17.92 | 0.35×(人类多 2.8 倍) | 第 8 条 | | 相邻句结构同款 | 预设是「三连排比 ×7」 | 每百段 AI 9.41、人类 4.81 | 2.0× | 第 3 条 | | 顿号罗列过密 | 同上 | AI 3.21、人类 1.78 | 1.8× | 第 2 条 | | 翻译腔五种 | 「保留英文句法」共 18 种 | 只有 5 种够格,见下表 | 2.6-5.3× | 第 10 条 | ### 不成立,已删除 | 特征 | 预设 | 实测 | 倍率 | 结论 | |------|------|------|------|------| | 句长均匀度 | 「AI 均匀度是人类 50 倍」 | 句长 CV AI 0.58、人类 0.67 | 0.87× | 原 ×51 是切句缺陷造成的假象 | | 相邻句长差 | 同上 | AI 21.7、人类 21.7 | 1.00× | 完全无差异 | | 段落长度均匀度 | 「AI 段落也极均匀」 | 稳健离散度 AI 0.94、人类 1.00 | 0.94× | CV 3.9 倍是一个 19335 字的未分行段落造成的 | | 单字虚词(就/很/了) | 「人类多 3-7 倍」 | 就 AI 2.93、人类 6.45 | 0.45× | 方向是补不是删,且人类侧组间波动大,单组即可拉高倍率 | | 口语连接词 | 「人类多 3-6 倍」 | AI 1.01、人类 3.87 | 0.26× | 同上 | | 少用代词、反复写全称 | 「AI 反复写全称」 | 相邻句同名词开头 AI 0.02、人类 0.04 | 0.5× | 人类反而更多 | | 被动句 | 「AI 保留英文被动」 | 抽象被动 AI 0.09 | — | 远低于门槛,人类 3.2% vs AI 4.5% 也无差异 | | 设问句自问自答 | 「Claude 尤其常见」 | AI 0.13、人类 0.13 | 1.03× | 三轮测量结论都翻,见下文 | | 问句小标题 | 「AI 爱用问句当骨架」 | 占小标题比例 AI 2.7%、人类最高 3.6% | 0.75× | 每千字 32 倍是分母陷阱 | | 正文问句 | 同上 | AI 0.10、人类 1.83 | 0.05× | 人类是 AI 的 17 倍,删了更不像人写 | | 句内同构排比 | 「三连排比 GPT ×7.3」 | 同字开头两项 AI 2.35、人类 3.87 | 0.61× | 句内人类更多,只有句间成立 | | 比喻本身 | 「非虚构不用借喻」 | 比喻标记词 AI 0.16、人类 0.38 | 0.42× | 人类 2.4 倍,独立成段用比喻 8 倍 | | 抽象名词配具体动词 | 「时间保管细节、焦虑显形状」 | AI 0.001、人类 0.001 | 0.7× | 两边都几乎不写 | | 动词名词化 | 「完成了对…的优化」 | AI 0.003、人类 0.005 | 0.52× | 人类更多;改用抽象后缀词测才是 AI 多 1.6 倍 | | 正文序数词 | 「GPT 29% vs 人类 4%」 | 句首「首先,」AI 0.06、人类 0.03 | 2× | 最弱形态,且句中「第一,」1.2× 无差异 | ### 冒号:按用途分类才有意义 人类侧有一个来源的冒号用量远高于其余,占人类语料冒号总数的 77%,会主导合计结果。下表已剔除该来源,人类侧为 189 篇。 冒号总量 AI 5.30/千字、人类 3.65,1.45 倍。但人类两组是 2.39 和 6.05,其中一组高于 AI,内部差异接近人机差异,总量不可作为判据。按用途拆开: | 用法 | AI | 人类 | 倍率 | 组1 | 组2 | 组间极差 | 判定 | |------|-----|------|------|-----|-----|---------|------| | 提示语引出(核心是:) | 0.29 | 0.08 | 3.78× | 0.06 | 0.11 | 1.8× | 收录 | | 空转句引列表(几种场景:) | 0.29 | 0.03 | 9.38× | 0.03 | 0.03 | 1.1× | 收录 | | 句中总说分说(后接汉字) | 3.00 | 1.80 | 1.66× | 0.61 | 4.07 | 6.6× | 组间不一致 | | 加粗小标题+冒号 | 0.43 | 0.26 | 1.66× | 0.10 | 0.56 | 5.7× | 组间不一致 | | 引出分项(后接编号) | 0.87 | 0.62 | 1.40× | 0.80 | 0.27 | 2.9× | 差异不足 | | 定义式(名词+冒号) | 1.34 | 0.98 | 1.38× | 0.67 | 1.56 | 2.3× | 差异不足 | | 引语式(言说动词/说话人) | 1.44 | 1.54 | 0.93× | 0.93 | 2.71 | 2.9× | 无差异 | 只有前两种同时满足两个条件:倍率足够,且人类两组都接近零。这说明「人类基本不这么写」是稳定的,可以据此判断一处冒号的来源。 **句中总说分说这一类测不出来。** 1.66 倍看似有差异,但人类两组是 0.61 和 4.07,差 6.6 倍。一位写作者几乎不用,另一位比 AI 用得还多。给定一处这样的冒号,无法判断出自 AI 还是那位写作者。排除带引述线索的实例后,极差仍是 6.8 倍,不是引述结构造成的。 这一类同时是 GB/T 15834 认可的冒号用法(用在总说性话语之后,引出分说)。把它改成逗号会丢失层级关系,改成句号会切断对应关系。因此明确列入不改。 **标题冒号是分母陷阱。** 按每千字算 AI 1.07、人类 0.07,15.7 倍;但 AI 小标题总量本就是人类的 6 倍。换成占小标题的比例,AI 41.6%、人类 24.1%,只有 1.7 倍,且人类组间从 7.7% 到 62.1%,其中一组高于 AI。与问句小标题同理,不收。 引语式冒号占人类冒号总量的 41-45%,AI 只有 27.6%。两侧对冒号的用途分布不同,但引语的绝对量持平(0.93 倍)。 ## 段落级结构特征 分母是段数,不是字数。 ``` python3 scripts/check-structure.py --human <目录...> --ai <目录...> ``` | 指标 | AI | 人类 | 倍率 | 人类侧稳定性 | |------|-----|------|------|-------------| | 连续两句同构(每百段) | 9.41 | 4.81 | 1.96× | 稳定 | | 连续三句同构(每百段) | 0.84 | 0.41 | 2.03× | 稳定 | | 段首零主语评论(占非首段) | 0.61% | 0.14% | 4.38× | 稳定 | | 比喻起段(每百段,对照) | 0.03 | 0.21 | 0.13× | 波动较大 | 段首衔接词的总量无差异(AI 14.4%、人类 15.1%)。AI 并没有少用衔接词,问题出在评论句省掉了回指成分。补一个「这」字就接回来了。 句内和句间要分开看。句内的同构排比人类用得不比 AI 少: | 句内形态 | AI | 人类 | 倍率 | |----------|-----|------|------| | 同字开头两项(要…要…) | 2.35 | 3.87 | 0.61× | | 同字开头三项 | 0.34 | 0.36 | 0.95× | | 更X、更X | 0.13 | 0.15 | 0.84× | | X的A、Y的B、Z的C | 0.14 | 0.12 | 1.10× | 所以规则只处理句间重复(第 3 条),句内排比保留。 比喻独立成段人类反而多 8 倍(其中一组高达 0.43)。读着突兀通常是缺回指,不是比喻本身的问题。 案例堆砌分两个问题,结论相反。密度上 AI 确实多,含「专名+动作」案例句的段落占比 AI 9.11%、人类 3.13%,各档都是 3-4 倍。但「偏好凑三个」不成立。 | 案例数 | AI | 人类 | |--------|-----|------| | 恰好 1 个 | 91.0% | 92.6% | | 恰好 2 个 | 8.4% | 6.5% | | 恰好 3 个 | 0.6% | 0.5% | | ≥4 个 | 0.0% | 0.4% | 条件分布几乎一样。AI 只是整体案例句多 3 倍,三个并排跟着变多,不是偏好三这个数。抽样看 AI 的三案例段落,多数是叙事推进(先发生什么、怎么做、结果如何),属正常写法。所以第 3 条把这一层写成提示而非硬规则。 ## 翻译腔:18 种筛到 5 种 ``` python3 scripts/check-translationese.py ``` | 句式 | AI 每千字 | 覆盖 | 结论 | |------|-----------|------|------| | 过长前置定语 | 0.42 | 179/300 | 收录 | | 当…时 | 0.26 | 136/300 | 收录 | | 前置话题壳 | 0.22 | 137/300 | 收录 | | 句首连接词 | 0.18 | 102/300 | 收录 | | 这意味着 | 0.15 | 122/300 | 收录 | | 被动-抽象 | 0.09 | 75/300 | 删 | | 在…的过程中 | 0.07 | 64/300 | 删 | | 不仅仅是 | 0.05 | 41/300 | 删 | | 存在着/有着 | 0.04 | 29/300 | 删 | | 轻动词(进行了…分析) | 0.03 | 30/300 | 删 | | 使得…能够 | 0.03 | 26/300 | 删 | | 程度直译(在某种程度上) | 0.02 | 25/300 | 删 | | 扮演角色 | 0.02 | 22/300 | 删 | | 形式主语(值得注意的是) | 0.02 | 19/300 | 删 | | 如果…的话 | 0.01 | 9/300 | 删 | | 以一种…的方式 | 0.01 | 8/300 | 删 | | 复数硬译(一系列的) | 0.00 | 5/300 | 删 | | 受到…的关注 | 0.00 | 4/300 | 删 | 收录的五种人类侧倍率 2.6-5.3 倍。删掉的十三种低于 0.09/千字,是翻译腔但不是 AI 痕迹,现代汉语书面语本来就这么写。 其中三种是最初版本自带的(以一种…的方式、使得…能够、扮演角色),实测都在 0.03 以下,一并删除。 ## 模型差异 同一特征在模型之间差一个数量级,不要按「某个模型的味」套判断。 | 特征 | Claude | DeepSeek | Gemini | GPT | Kimi | |------|--------|----------|--------|-----|------| | 破折号 | 4.25 | **5.16** | 0.51 | 0.11 | 2.32 | | 提示性冒号 | 0.38 | **0.43** | 0.22 | 0.25 | 0.32 | | 不是…而是 | 0.61 | 0.86 | 0.29 | **1.26** | 0.51 | | 段首序数词 | **1.00** | 0.69 | 0.22 | 0.73 | 0.82 | | 过长前置定语 | 0.64 | **0.65** | 0.48 | 0.06 | 0.22 | | 问句小标题 | 0.043 | 0.086 | **0.173** | 0.008 | 0.000 | 破折号最重的是 DeepSeek 不是 Claude,GPT 几乎不用;提示性冒号最重的是 DeepSeek 和 Claude,不是 Gemini(早先记成 Gemini 是宽正则误测)。 GPT 破折号只有 0.11,有观点据此认为破折号已不算 AI 痕迹。但 Claude 4.25 是人类的 5 倍多,而写作场景里 Claude 使用广泛,所以这条保留。 ## 六次测量失误 每次都是拿宽泛的正则去测一条有精确定义的规则,或者用了错的分母。都是先看到数字、后看命中内容导致的。 1. **长前置定语 3.04/千字** → 正则把普通句子(「质量管理是从0到1阶段最容易被忽视的问题」)算成长定语。收紧后 0.35。 2. **并列连词 0.26** → 规则写的是「一句内两次以上」,正则测的是单个「而且/并且」。按规则测是 0.00。 3. **「的…的…的」连用 0.25** → 正则跨顿号匹配,把「巴西的LGPD、印度的DPDPA、日本的APPI」这种正常并列算成嵌套定语。收紧后 0.06。 4. **提示性冒号 5.97 vs 5.45(无差异)** → 正则是「汉字+冒号」,6431 处命中里标题 1266、列表 1225、对话 207,全是规则明确不改的。按定义测是 0.32 vs 0.08。 5. **问句小标题 32 倍** → 分母用每千字,而 AI 平均每篇 10 个小标题、人类 1-2 个。换成占小标题比例,AI 2.7%、人类最高 3.6%,无差异。 6. **比喻包装 0.000** → 正则是写死的 11 词表(仓库/抽屉/温度/钥匙…),而实际比喻(「像一栋楼的门禁」)一个词都不在表里。改测构式后发现人类比 AI 多 2.4 倍,方向与预设相反。 由此得出一条操作要求。**改规则前先抽样看 20 条命中,再看频率。** 涉及结构元素(小标题、段落、列表)的指标,分母必须是同类元素总数。 ## 局限 1. **人类语料规模有限**。语料内部差异已经很大(破折号相差百倍,虚词密度差 3 倍),扩充语料可能再次改变结论 2. **AI 侧无人类对照的部分**只能给绝对频率。某句式在 AI 里频率高,不等于人类不这么写 3. **正则近似**:语篇层面的特征无法用正则表达,只能退回到可定位的形态。已知测不了的有几项。问句是否解决真实疑问,三个案例是否平级,比喻是否贴切,比喻是否只在重复上文。这几项都只能靠人读,不要因为「感觉像 AI」就写成规则 4. **话题不对齐**:AI 语料是同批话题生成,人类文章跨多年多话题,部分差异可能来自话题而非风格 5. **数字有保质期**:模型每次更新都在向人类文风靠近。GPT 破折号从「几乎每句一个」到 0.11 只用了不到一年 ## 自己测 上面的数字来自不入库的语料,无法直接核验。方法是通的。换成你自己的语料重跑。 ```bash # 句级:人类 vs AI 各规则命中率 python3 scripts/compare-human-ai.py --human <人类语料目录...> --ai # 段落级:句子同构、段首零主语 python3 scripts/check-structure.py --human <人类语料目录...> --ai # AI 侧:翻译腔各句式频率 python3 scripts/check-translationese.py ``` 三个脚本都只按目录参数读 `.md`,不含任何语料,也不用目录名做标签(语料目录常带来源信息,避免输出带出身份)。正则定义在脚本顶部,可直接改。 --- **English** [RESEARCH.en.md](./RESEARCH.en.md) · **规则集** [SKILL.md](./SKILL.md) · **概览** [README.md](./README.md)