从零开始构建 AI 文本检测器
本文介绍了如何从零构建一个 AI 文本检测器,涵盖数据集构建、模型训练、本地部署以及使用强化学习与验证器(RLVR)训练小语言模型规避检测。项目以 Substack 的 AI 检测功能为灵感,详细解释检测器的工作原理,并探讨其局限性与实际应用。
Substack 最近在界面中上线了 AI 检测功能,这引起了广泛关注。与此同时,很多人向我咨询适合本地演示的自制 LLM 项目,以展示小语言模型(SLM)的能力。将这两件事结合起来,我认为展示如何实现一个 AI 检测器会很有意思。我还会进一步把它作为验证器,训练一个小语言模型生成能避开检测的文本。这是一个小型的教育项目,旨在研究 AI 检测器的局限性,并探索基于验证器的 LLM 应用——这类应用并不局限于在数学和代码上训练的传统推理模型。
这个教程的核心目标是解释 AI 检测器的工作原理,并通过构建一个简易版本来说明。实际部署中,这类检测器可以用来过滤垃圾内容,也可以帮助写作者在不改变原创性的前提下优化文本。例如,你写了一篇很长的文章,想改进拼写和语法,使用语法检查工具(包括 ChatGPT 这样的通用大模型)确实很有用。但风险在于,这些工具可能让你的文本被过度润色,即使内容仍然是你自己写的,听起来却变得很 AI,可能被检测为垃圾内容。借助 AI 检测器,你就可以提出这样的要求:“修正我的语法,但确保我的文本仍然保持 0% 的 AI 生成概率。”
需要提前说明的是,AI 检测本质上是一场猫鼠游戏。检测器可能学会识别某种 AI 生成内容的典型模式,而下一代 LLM 可能有意或无意地不再表现出这种模式,从而避开检测。于是检测器必须不断更新以识别新的模型,如此循环。此外,误报也很常见——人类撰写的文本可能被标记为 AI 生成,后文会详细讨论。
项目有多个目标。首要目标是阐明 AI 检测器的工作原理,并展示一个完整的端到端 LLM 项目,包括评估、训练和本地部署,使其能够应用于真实场景。最终成果是一个 AI 检测 API,可供人类用户和智能体使用,并附带友好的用户界面。项目界面上会显示整篇文本的 AI 评分,同时高亮显示各个文本块的分值。
在方法上,该项目将开发一种类似于 Pangram 模型的检测方法。据我所知,Substack 的 AI 检测功能正是基于 Pangram 模型。早在 2023 年,我就写过一篇关于 AI 文本检测的简要文章,介绍了检测方式的不同流派,从监督分类器、扰动概率测试到困惑度测量和水印技术等。本教程将构建一个返回 0-100 分的模型,本质上是带估计概率分数的分类器,该分数表示分类器判定文本为 AI 生成的可能性。不过需要注意,这个分数只是分类器基于训练分布对 AI 生成类别的估计概率,不应理解为一个通用的“AI 生成概率”。
具体实现上,我们将微调一个 DistilBERT 分类器,这类似我在早期文章《Finetuning Large Language Models》中描述的方法。后续文章会详细介绍数据集构建、模型训练、本地部署以及如何用这个检测器作为验证器进行强化学习(RLVR)训练。整个过程是一个完整的实践案例,既展示了 AI 检测器的能力边界,也为构建可配合 LLM 使用的评分器或验证器提供了一个通用范本。