惊!“经典”机器学习竟能高效检测大语言模型生成的网络小说
简而言之与演示截至2026年初主流大语言模型生成的文本呈现出很强的统计规律可以使用传统机器学习模型将其与人类撰写的内容有效区分开来。这或许就是很多所谓 AI抄袭检测器 的底层工作原理。在线演示地址为https://lyc8503.github.io/AITextDetector/ 。本演示使用的模型并非基于通用数据训练也未经过严格的优化和迭代。在测试集上其单句检测准确率约为85%。使用前请通读本文了解潜在的局限性。核心代码草稿和训练好的模型文件可在GitHub上获取lyc8503/AITextDetector 。背景也就是无用的闲聊半年前作者还在学校写论文时就有关于检测论文是否为AIGCAI生成内容的传言。作者测试了知网、万方等平台还有一些第三方AIGC检测服务发现它们确实能以相当高的准确率区分手写文本和大语言模型生成的文本。这激起了作者对AIGC检测实际工作原理的好奇以及如何绕过它。但当时作者要处理的事情太多经过几次失败的尝试后就把这个想法搁置了。最终作者糊弄过了论文生活继续。但最近作者在浏览Lofter时偶然发现整个标签下充斥着低质量、风格严重不符的AI生成同人文。作者一眼就能看出是AI生成的因为有些作者甚至在发布前都不清理Markdown格式或AI生成的章节标题还把文章的一半内容设置成付费阅读。不过大多数AI生成的文本更难察觉它们隐藏在多样的写作风格、不同的提示词中并不容易一眼看穿。等意识到哪里不对劲时已经晚了。有些文本几乎无法证明是AI生成的这让作者变得疑神疑鬼。在读了几篇AI生成的垃圾文章后作者受够了决定构建一个AI生成文本检测器。研究尝试——无果现在在网上搜索AIGC检测几乎全是广告。作者在这些噪音中找到了一种叫做 [文本困惑度] 的方法。这个方法的原理很简单使用现有的大语言模型来估计每个单词在给定句子中出现的概率。如果几乎每个单词在大语言模型的预测中排名都很高Top - N那么这个句子很可能是AI生成的。反之如果很多单词都在意料之外那么它更可能是人类撰写的。听起来很有希望对吧但作者花了一些时间尝试这种方法结果令人失望有大量的误报和漏报而且无法设置合理的阈值。此外还存在实际问题推理成本高、跨模型泛化能力差、难以在本地部署大模型以及封闭权重模型难以集成。总体而言这种方法既不优雅也不可靠。一次还算成功的尝试——scikit - learn SVM既然网上的资源没什么用那就回到传统方法。激活scikit - learn根据其路线图我们可以直接选择线性支持向量分类器Linear SVC和朴素贝叶斯作为分类任务的良好起点。悄悄说这也符合作者的直觉——大语言模型在选词上有可检测的模式即使是朴素贝叶斯分类器也应该能捕捉到这些模式。作者只是没想到信号会这么强。数据生成传统分类器需要有标签的数据所以需要人类撰写的文本和确认是大语言模型生成的文本进行训练。作者从2023年从某个类似福特和河流的平台上抓取的数据中筛选出2010 - 2022年ChatGPT出现之前发布的文章。只过滤掉了参与度极低或非常短的文章然后随机抽取了近10000篇数千字的文本作为人类撰写的样本。然后作者使用大语言模型生成这些文本的章节摘要再将摘要反馈给大语言模型让它重新生成完整的文章。这样就得到了大致相同数量的大语言模型生成的样本这些样本体裁多样与原始人类内容非常匹配。但大语言模型API的成本很高作者不想为一个周末项目花几千美元所以发挥了创意利用了多个低成本或免费的API渠道Gemini使用CLIProxyAPI将Antigravity/Gemini CLI配额转换为API访问权限只需花20美元左右购买一个AI Pro账户。通义千问Qwenqwen - code可以让你逆向工程通义千问Plus API免费使用。GLM - 5运气不错OpenRouter当时提供免费的GLM - 5公开测试版Pony Alpha。Kimi、Deepseek、豆包、GLM - 4.7在促销编码计划期间注册首月8.9美元即可解锁API访问权限。需要说明的是这并非推荐做法。这些行为违反了平台的使用条款可能会导致被封禁。但平台忙着搞营销噱头根本无暇顾及而作者也不想付全价。许多专注于编程的大语言模型API奇怪地按调用次数收费但可以通过将任务批量处理成大量输入来优化这一点迫使大语言模型每次调用生成更多内容。最终作者使用gemini - 3 - flash生成摘要使用七个不同的模型gemini - 3 - pro、qwen - coder - plus、glm - 5、glm - 4.7、kimi - k2.5、doubao - seed - code、deepseek - v3.2生成了七组大语言模型生成的样本。训练在数据生成进行到一半时作者就迫不及待地开始训练了。作者让Claude编写分类器代码它直接把整个原始文本扔进模型结果准确率达到了可疑的99.45%。Claude没什么用作者还是自己来吧。训练时作者使用中文标点将所有文本拆分成句子清理非中文/英文字符然后应用scikit - learn的TF - IDF → LinearSVC。清理掉一些噪音后句子级别的分类准确率仍达到了约85%单个句子携带的信息有限但每个句子85%的准确率意味着对于一篇较长的文章可以非常有信心地判断它是否是AI生成的。这个性能远超作者的预期。传统机器学习仍然很厉害比那些只会问大语言模型 嘿这段文本是AI生成的吗 的愚蠢在线工具好多了。完成所有数据处理后作者尝试训练一个8类模型人类 7种AI但大语言模型似乎太相似了可能是相互蒸馏的结果所以分类效果很混乱准确率只有约50%。最终作者训练了七个单独的二元分类器并使用多数投票法如果有≥2个模型检测到某个句子是AI生成的就将其标记为可疑AI并高亮显示。所有模型的准确率都超过了85%F1值超过了80%相当不错作者还注意到AI生成的文本经常会被多个模型标记所以投票法很有意义。作者尝试了MultinomialNB和SGDClassifier但准确率略有下降。BERT有一点提升但需要太多GPU时间所以放弃了。作者甚至测试了AutoGluon但它的二元分类准确率只有53%。用于网页演示的JS实现到这一步作者本可以直接发布代码库但每次都启动Python太不方便。作者本可以托管一个Python API但这意味着要维护服务器这违背了作者严格的无服务器理念。作者原本的计划是将模型导出为ONNX格式通过Wasm中的ONNX Web Runtime进行推理。但Claude偏离了计划将模型修剪并导出为JSON格式然后完全用JavaScript实现了TF - IDF SVM以便在浏览器中进行推理。作者在一篇100万字的文本上进行了测试在机器上大约需要10秒还可以接受。对于典型的几千字的输入几乎是瞬间完成。既然这只是个演示而且JS方法更透明作者就保留这个实现。至于准确率作者测试了不同的特征限制。最终为了优先考虑性能保留了50万个特征。以JSON格式存储文件大小达到了107MB不过在服务器端压缩后约为38MB。较小的版本5万 - 8万个特征准确率只下降了3 - 4%但最终的AI检测率差异很大尤其是在人类撰写的文本上相对差异达到了±50%导致误报。所以作者还是选择了50万个特征。最终准确率下降了约1%。测试性能以下所有测试均使用修剪后的网页版本其性能应与完整的joblib模型相似。当前逻辑将输入文本拆分成句子使用所有7个二元模型进行清理和分类。如果≥2个模型标记某个句子就将其标记为可疑AI并高亮显示。最终AI得分是标记字符的比例。分类规则如下50%人类撰写50 - 70%可能是人类撰写 70%可能是AI生成首先测试对常见模型如豆包和Deepseek的检测率这两个模型都在训练数据中。提示词为给我写一篇3000字的故事。很容易就检测出来了。现在测试未见过的模型泛化能力如何呢作者测试了Claude Sonnet 4.6、GPT 5.2等检测率都在70%左右有些甚至超过了90%很可靠。作者还测试了更复杂的提示词例如提供20章人类撰写的文本让大语言模型模仿风格并继续创作。检测率略有下降降至67.8%但要记住训练时也使用了复杂的提示词。然后作者从订阅列表中挑选了10部已完结的网络小说2022年之前的这些小说体裁多样、作者不同、年代各异且很可能不在训练数据中。它们的AI检测率分别为22.7%、24.2%、25.0%、24.5%、19.0%、13.7%、29.1%、4.9%、27.3%、19.2%都低于30%。作者还随机抽取了一些Lofter同人文由于这些文章比较随意检测率通常低于10%。但当作者输入怀疑是AI生成的文本时检测率飙升至83.4%强烈表明这些文本在未披露的情况下使用了大语言模型。[2026年3月5日更新] 为了进行更严格的测试作者从Lofter上随机抽取了10000篇高参与度浏览量 5000、长篇字数 2000的同人文这些文章均在2022年之前发布。以60%为阈值误报率为0.04%以70%为阈值误报率为 0.01%几乎为零。然后作者从Lofter安卓端的前20个热门标签每周榜单中抓取了所有文章按长度进行过滤后进行检测32.22%的文章AI得分超过50%很可能部分或全部是AI生成的而且没有一篇文章主动声明是AI生成的内容。攻击与防御——绕过检测好了已经构建了一个AIGC检测器。现在来测试一些常见的反AIGC检测技巧。经典翻译方法谷歌翻译往返翻译中文→英文→中文89.9% → 85.0%有道翻译中文→英文→中文89.9% → 79.2%搜狗翻译中文→英文→中文89.9% → 86.0%。检测率略有下降但仍然能明显检测出来。大语言模型提示方法使用 神奇 提示词让大语言模型输出不那么 像AI 的内容从一开始就听起来很荒谬测试单行提示词重写上述文章尽量减少AI痕迹89.9% → 83.0%。作者还尝试了更复杂的提示词89.9% → 79.3%。有一点改进但在实际应用中仍然没有意义。这种检测方法太强大了如果真的想绕过它唯一能想到的办法是在大量人类文本上微调大语言模型或者构建一个庞大的基于规则的系统来精确破坏支持向量机匹配的特征。但这超出了本文的范围也不确定是否可行也许还有更好的方法就留给读者去探索吧。结语说实话作者没想到这个分类任务会这么简单简单到一个scikit - learn的 Hello World 脚本只需进行最少的迭代和一些硬编码规则就能构建出一个相当强大和准确的检测器。大部分时间都花在等待大语言模型生成数据上了。有雄心的读者可以按照这个方法为其他领域训练检测器比如学术论文AIGC检测。再加上一个炫酷的前端就可以把这个工具卖给急需的大学生了。另一个想法是检测AI生成的图像。但由于Stable Diffusion和简单的LoRA微调视觉风格比文本更加多样化这个任务会困难得多。作者写完这篇文章后三分钟热情已经耗尽了也许下次吧。最后作者认为AI生成的娱乐内容不是真正的创意作品。AI生成的文本、图像和音频乍一看可能还不错但仔细检查就会发现问题——重复、肤浅、可预测甚至通过词频统计就能检测出来。这种模式从根本上不适合真正的创作作为读者作者深感不满。作者开始怀疑大语言模型所谓的 创意写作 只是对训练后的数据进行无休止的重组和重复。但话说回来世界应该是怎样 从来都不等于 世界实际是怎样。虽然大语言模型带来了创新和生产力的提升但滥用和误用现象在各个行业都在不断蔓延。而且由于大语言模型是经过微调以利用人类感知的谁知道它们是真的 理解 了什么还是只是记住了模式呢每个人都陷入了争论大语言模型到底是什么它将如何颠覆行业AI将把人类带向何方没有人有答案。至少作者很高兴在AI时代之前学会了编程。否则可能意识不到如今那些靠感觉编写的软件有多愚蠢。至于未来要么生成式AI彻底摧毁人类社会秩序要么AI泡沫破裂内存变得免费。不管怎样对作者来说似乎都还不错不是吗