AI 见闻
精选· 重要性 3/5

用经典机器学习检测LLM生成文本:一个周末项目的实践与发现

Hacker News (AI)··uneven9434·约 8 分钟阅读
社区热度 241
中文导读

作者通过实验发现,截至2026年初,主流LLM生成的文本存在强统计模式,使用scikit-learn的TF-IDF和LinearSVC即可实现约85%的单句检测准确率,揭示了所谓“AI查重”工具的可能原理。

本文目前是实验性机器翻译,可能包含错误。如有不清楚之处,请参阅中文原文。我正在不断努力改进翻译。TL;DR和演示\n截至2026年初,主流LLM生成的文本表现出强大的统计模式,可以使用传统机器学习模型有效地与人类编写的内容区分开来。

我怀疑这就是许多所谓的“AI抄袭检查员”实际上在引擎盖下工作的方式。在线演示:https://lyc8503.github.io/AITextDetector/\n此演示中使用的模型不是在通用数据上训练的,也没有经过严格的优化或迭代。

其在测试集中的单句检测准确率约为85%。请在使用前仔细阅读本文以了解潜在的限制。

核心代码(草案)和训练模型文件可在GitHub上获取:lyc8503/AITextDetector\n背景(又名无用的漫步)\n半年前,当我还在学校写论文时,关于检查试卷是否有AIGC(人工智能生成内容)的谣言就已经传开了。

我测试了几个平台——CNKI、Wanfang和一些第三方AIGC检测服务——发现它们确实可以以相当准确的准确性区分我的手写文本和LLM生成的文本。这激发了我对AIGC检测实际工作原理(以及如何绕过它)的好奇心。

但当时我正在处理太多事情——痴迷于广播、《我的世界》、《Touhou》——在尝试了几次失败后,我搁置了这个想法。最终,我伪造了论文,生活继续前进。但最近,在浏览Lofter时,我偶然发现整个标签上充斥着低质量、与性格完全不符的人工智能生成的同人作品。

我怎么能一眼看出它们是人工智能呢?好吧,有些人(或女孩)甚至懒得在发布之前清理Markdown格式或AI生成的部分标题,然后他们将一半文章放在付费墙后面😓\n然而,大多数人工智能生成的文本都很难发现——它们隐藏在不同的写作风格、不同的提示中,并且不会立即明显。

当你意识到事情不对劲时,已经太晚了。有些文本几乎不可能作为人工智能来证明,这让我变得偏执。在吞下了太多人工智能生成的粪便后,我终于受够了。阁楼浏览此时停止,打开VS Code!

是的,这就是我最终重新启动我的周末项目想法的方式:构建人工智能生成的文本检测器……\n研究尝试——运气不佳\n现在,在搜索AIGC检测时,互联网几乎完全被广告污染。每个结果都只是另一个论文人工智能重写服务。

当时,我在噪音中挖掘,发现了一种称为文本困惑的东西。想法很简单:使用现有的LLM来估计每个单词出现在给定句子中的概率。

如果几乎每个词在LLM的预测中排名都很高(Top-N),那么该句子很可能是人工智能生成的。相反,如果许多单词出乎意料,那么它更有可能是人类写的。听起来很有希望,对吧?我花了一些时间尝试这种方法,但结果令人失望——大量的假阳性和假阴性,并且无法设置合理的阈值。

此外,还存在一些实际问题:推理成本高、跨模型泛化性差、难以本地部署大型模型以及难以集成封闭权重模型。总的来说,这种方法并不优雅或可靠。(有点)成功的尝试——scikit-learn SVM\n既然在线资源没用,那就回到老派炼金术吧。

Scikit-learn,激活!遵循其路线图,我们可以直接选择Linear SVC和Naive Bayes作为我们分类任务的良好起点。(耳语:这也符合我的直觉——LLM有可检测的单词选择模式;

即使是朴素贝叶斯分类器也应该能捕捉到它们。我只是没想到信号会这么强。)\n数据生成\n老式的炼金术传统分类器需要标记的数据,所以我们需要人类编写的文本和确认的LLM生成的文本进行训练。

我的做法:我从一个类似福特和河流的平台上提取了我在2023年收集的数据,过滤了2010-2022年(ChatGPT之前)发表的文章。

我只过滤掉参与度极低或非常短的文章,然后随机抽样了近10,000个数千字符的文本作为人类书写的样本。然后,我使用LLM生成这些文本的章节摘要,将摘要反馈给LLM,并让它重新生成完整的文章。这给了我大致相同数量的LLM生成的样本,类型多样,并且与原始的人类内容密切匹配。

至少在理论上是这样。但是LLM API是昂贵的,我不打算在一个周末项目上花费数千美元。

因此,我发挥了创造性,利用多个低成本或免费的API渠道绕过规则:\n- Gemini:使用CLIProxyAPI将Antigravity/Gemini CLI配额转换为API访问权限——只需支付约20美元即可获得AI Pro账户\n- Qwen:

qwen-code让你反向工程Qwen Plus API——免费\n- GLM-5:

幸运的时机——OpenRouter提供免费的GLM-5公开测试版(Pony Alpha)\n- Kimi,Deepseek,Doubao,GLM-4.7:在促销编码计划期间注册——首月8.9美元,API访问解锁\n声明:这不是建议。

这些行为违反了平台ToS,并可能会导致您被禁止。但这些平台太忙于营销炒作,无暇顾及,我也不打算支付全价。许多以编程为中心的LLM API奇怪地对每次调用收费,但我们可以通过将任务批处理为大量输入来滥用优化这一点,迫使LLM每次调用生成更多内容。

所以……\n最终,我使用了gemini-3-flash生成摘要,以及七种不同的模型(gemini-3-pro,qwen-coder-plus,glm-5,glm-4.7,kimi-k2.5,doubao-seed-code,

deepseek-v3.2)生成七组LLM生成的样本。训练\n当我数据生成完成一半时,我迫不及待地开始训练。我要求Claude编写分类器代码,它天真地将整个原始文本倾倒到模型中——获得了可疑的99.45%准确率……等等,真的吗?

Claude没用。我自己来。为了训练,我使用中文标点符号将所有文本分成句子,清理非中文/英文字符,然后应用scikit-learn的TF-IDF → LinearSVC。清除一些噪音后,句子级分类的准确率仍然达到约85%!

单个句子包含的信息有限,但每个句子85%的准确率意味着对于较长的文章,我们可以高度自信地判断它是否是人工智能生成的。这个表现远远超出了我的预期。老式的ML仍然很厉害——比那些愚蠢的在线工具好得多,那些工具只是问LLM:“嘿,这是人工智能生成的文本吗?

”\n在完成所有数据后,我尝试训练一个8类模型(人类+7个AI),但LLM似乎太相似了——可能是从彼此中蒸馏出来的——所以分类很混乱,准确率只有约50%。最后,我训练了七个独立的二分类器,并使用多数投票:如果一个句子被≥2个模型检测为AI,则标记为AI。

所有模型的准确率超过85%,F1超过80%——非常可靠!我还注意到人工智能生成的文本通常被多个模型标记,因此投票非常有意义。我尝试了MultinomialNB和SGDClassifier,但准确率略有下降。

BERT提供了一个小的提升,但需要太多的GPU时间——丢弃了。甚至测试了AutoGluon,它的二分类准确率只有53%。这些就不深入了。JS实现Web演示\n在这一点上,我可以只是发布仓库并收工了。

但是每次启动Python都太不方便了。我本可以托管一个Python API,但这意味着服务器维护——违反了我严格的无服务器理念。我最初的计划是:将模型导出到ONNX,通过Wasm中的ONNX Web Runtime运行推理。

但是当我让我的硅仆人Claude帮忙时,我没有明确说明,它就偏离了脚本,修剪并将模型导出为JSON……然后完全用JavaScript实现了TF-IDF + SVM。

原文出处
Detecting LLM-Generated Texts with “Classical” Machine Learning

本文为机器翻译辅以 AI 润色,仅供参考。原始事实以原文为准。

相关阅读