经典机器学习可检测大模型生成文本
速览
一项新研究表明,使用逻辑回归、支持向量机等经典机器学习技术可以高准确率检测出大语言模型生成的文本。该方法计算成本低且易于部署,无需依赖大型AI模型。这意味着在缺乏先进AI检测工具的情况下,也能有效识别AI生成内容,对内容审核和防欺诈等领域具有实际意义。
AI 深度解读
背景
大约半年前,作者还在学校写论文时,就流传着关于检查论文是否存在AIGC(AI生成内容)的传闻。他测试了几个平台——CNKI、万方以及一些第三方AIGC检测服务,发现它们确实能以不错的准确率区分自己手写的文本和LLM生成的文本。这激发了他对AIGC检测原理(以及如何绕过它)的好奇心。但当时他忙于其他事情——痴迷于无线电、Minecraft、东方Project——在几次失败尝试后搁置了这个想法。
直到最近,他在Lofter上浏览时,发现整个标签区被大量低质量、严重偏离角色设定的AI生成同人文淹没。有些文章甚至没有清理掉Markdown格式或AI生成的章节标题就发布了,然后把一半内容放在付费墙后面。大多数AI生成的文本更难发现——它们混杂在各种写作风格、不同prompt中,并不明显。等他意识到不对劲时已经晚了。有些文本几乎无法证明是AI写的,这让他变得多疑。在吃了太多AI生成的“屎”之后,他终于受够了。Lofter浏览到此为止——打开VS Code!就这样,他重启了这个周末项目:构建一个AI生成文本检测器。
核心内容
研究尝试:无果而终
作者首先搜索了AIGC检测方法,但互联网几乎被广告污染。他找到了一个叫“文本困惑度”(text perplexity)的方法。其思路很简单:用现有LLM估计给定句子中每个单词出现的概率。如果几乎每个单词在LLM的预测中排名都很高(Top-N),则句子很可能是AI生成的;反之,如果很多单词是意料之外的,则更可能是人类写的。但作者尝试后结果令人失望——出现了大量假阳性和假阴性,无法设置合理的阈值。此外还有实际问题:推理成本高、跨模型泛化能力差、本地部署大模型困难、闭源权重模型难以集成。总体而言,这种方法既不优雅也不可靠。
成功尝试:scikit-learn SVM
既然网络资源无用,作者回归传统机器学习(“炼丹”)。他直接选择了scikit-learn中的Linear SVC和Naive Bayes作为分类任务的起点。他直觉认为LLM在词汇选择上存在可检测的模式,甚至一个Naive Bayes分类器也能捕捉到——但没想到信号会如此强。
数据生成
传统分类器需要标记数据——即人类写的文本和确认的LLM生成文本。作者使用了2023年从某个类似“福特”或“河流”的平台(推测是知乎/medium之类)爬取的数据,筛选2010-2022年间(ChatGPT之前)发布的文章,仅剔除极低阅读量或极短的文章,然后随机采样近10,000篇数千字长的文本作为人类样本。接着,他使用LLM生成这些文本的章节摘要,再将摘要喂回LLM,让它重新生成完整文章。这样就得到了数量大致相等的LLM生成样本,体裁多样且与原文内容高度匹配。
但LLM API很昂贵,他不愿在周末项目上花数千元。于是他“创造性”地利用了多个低成本或免费的API渠道:使用CLIProxyAPI将Anti-Gravity/Gemini CLI配额转为API访问(约20美元买AI Pro账户);通过qwen-coder逆向工程获取Qwen Plus API(免费);利用OpenRouter上的GLM-5免费公测(Pony Alpha);利用编程类促销活动注册Kimi、Deepseek、豆包、GLM-4.7(首月8.9美元解锁API)。作者声明这不推荐,但平台更关注营销炒作,他不想付全价。另外,许多编程类LLM API按调用次数收费,但他通过批量处理将任务合并成巨大输入,迫使LLM每次调用生成更多内容。最终,他使用gemini-3-flash生成摘要,并使用七个不同模型(gemini-3-pro、qwen-coder-plus、glm-5、glm-4.7、kimi-k2.5、doubao-seed-code、deepseek-v3.2)生成七组LLM样本。
训练
数据生成进行到一半时,作者就迫不及待开始训练。他先让Claude写分类器代码,但Claude天真地将原始文本整个扔进模型,得到了可疑的99.45%准确率——显然有问题。作者自己动手:将所有文本按中文标点分割成句子,清理掉非中英文字符,然后应用scikit-learn的TF-IDF → LinearSVC。清理噪声后,句子级别分类准确率达到了约85%!单个句子信息有限,但85%准确率意味着对于较长的文章,可以高度自信地判断是否为AI生成。这个性能远超预期。传统机器学习依然给力,远胜于那些直接问LLM“这段文本是AI写的吗?”的愚蠢在线工具。
完成所有数据后,作者尝试训练一个8类分类器(人类+7种AI),但各LLM之间似乎过于相似——可能是互相蒸馏的结果——分类效果混乱,准确率仅约50%。最终他训练了七个二元分类器,并使用多数投票:如果一个句子被≥2个模型标记为AI,则判定为AI。所有模型都达到了85%以上准确率和80%以上F1分数,效果相当不错。AI生成文本经常被多个模型标记,因此投票机制很合理。他也尝试了MultinomialNB和SGDClassifier,但准确率略有下降;BERT有微小提升但GPU时间太长,被放弃;甚至测试了AutoGluon,但二元分类准确率仅53%。作者没有深入讨论这些。
JS实现与在线Demo
作者不想每次运行Python来检测,也不想维护Python API服务器(违背其严格的Serverless哲学)。原计划是将模型导出为ONNX,通过ONNX Web Runtime在Wasm中运行推理。但他让Claude帮忙时没有明确说明,Claude跑偏了——剪枝并导出模型为JSON,然后在JavaScript中完全实现了TF-IDF + SVM。作者意外发现这个纯JS实现速度还不错,于是直接把JSON模型和推理代码打包成网页,放在了GitHub Pages上。在线Demo地址:https://lyc8503.github.io/AITextDetector/。该Demo使用的模型并非通用数据训练,也未经过严格优化迭代,测试集上单句检测准确率约85%。核心代码(草稿)和训练好的模型文件已在GitHub上开源:lyc8503/AITextDetector。
关键要点
- 传统机器学习依然有效:在面对LLM生成文本检测时,使用scikit-learn的TF-IDF结合LinearSVC等经典方法,可以在句子级别达到约85%的准确率,远超预期。
- 数据生成策略:利用2010-2022年的历史文章作为人类样本,通过LLM生成对应摘要再重写全文以获取AI样本,保证了训练数据的多样性和匹配度。
- 多模型投票提升鲁棒性:针对七个不同LLM分别训练二元分类器,使用多数投票(≥2个模型认为AI则判为AI)来综合判断,有效利用不同模型间的信号差异。
- 低成本绕过API限制:通过逆向工程、免费试用、促销活动等手段,以极低成本获取多个LLM的API访问,用于生成训练数据。
- 纯前端部署:将TF-IDF+SVM模型导出为JSON,在浏览器中用JavaScript实现完整推理,无需后端服务器,符合Serverless理念。
- 技术局限性:模型非通用训练,单句准确率85%并非完美;不同LLM之间因互相蒸馏而难以区分(8类分类仅50%准确率);部分方法(困惑度法、AutoGluon等)效果不佳。
- 开源与Demo:完整的代码、训练模型和在线Demo均已公开,便于社区验证和使用。
意义与影响
该项目的核心意义在于揭示了当前主流LLM生成文本中存在的强统计模式,而这些模式完全可以用传统机器学习模型有效捕捉。这暗示了市面上许多所谓“AI查重工具”很可能底层就是类似的方法,而非基于对LLM内部状态的深度分析。这样做的好处是计算成本低、部署简单、可解释性强。
从更广的视角看,随着LLM生成的文本越来越多,检测工具的需求日益迫切。但作者也指出,这种统计模式可能随着LLM的迭代而改变——如果未来的LLM训练中引入对抗性数据或刻意模仿人类写作的随机性,这些检测方法可能会迅速失效。然而,截至2026年初
