
用困惑度、近重复相似度与嵌入密度筛查疑似 AI 生成文本:一次可复现的实操教程
用困惑度、近重复相似度与嵌入密度筛查疑似 AI 生成文本:一次可复现的实操教程
当数据集里混入了大模型写出的流畅文本,传统的缺失值、重复项、越界值检查都无能为力——它们判断不了「这段话是谁写的」。这篇教程整理了一套低成本的三指标筛查流程:用困惑度、近重复相似度、嵌入密度给每条文本打分,再合成一个综合分,并通过召回率与误报率的权衡来选阈值。文中还给出了一个关键的反面结论:在真实影评集合上,这套过滤器的误报率高得惊人,直接拿它删数据反而会把情感分类器的准确率拉低。
做数据清洗的人这几年遇到一个新麻烦:脏数据不再只是缺失值、重复行和越界字段,还可能是大模型写出来的、读起来像人写的流畅文本。常规的清洗规则判断不了「这段话是谁写的」,而把这类文本混进训练集,后果不只是噪声——已有研究指出,反复用模型生成的内容训练模型,会让原始数据中的稀有样本逐渐消失,输出分布变窄。
这篇教程整理一套低成本的筛查思路:给每条文本算三个分数(困惑度、近重复相似度、嵌入密度),合成一个综合分,再通过召回率与误报率的权衡挑一个阈值。同时会完整走一遍验证实验,说明这套方法在什么情况下会失效——这一点比方法本身更重要,因为实验结果显示,在真实影评集合上,为了抓到 80% 的生成文本,误报率会高到让过滤本身变成破坏。
准备工作
数据
实验使用一个公开的影评集合作为「人类撰写」的参照。该集合发布于 2019 年 3 月,描述中说明评论抽取自 IMDb,包含 10 部电影的 1000 条评论,每条都带有人工标注的正向或负向情感标签,采用 CC BY 4.0 许可。
需要提前说明一个前提:这个集合并不逐条核验作者身份。之所以把它当作人类撰写的参照,依据是它的来源(IMDb)和发布时间(早于 ChatGPT 公开发布)。这是一个基于来源与日期的推断,不是逐条的作者核验。任何依赖这个假设得出的误报率,都要带着这个前提去读。
把 1000 条评论按电影切分成三部分:
- 训练用参照集:200 条,来自 2012、A Beautiful Mind、Amadeus、Avatar、Clash of the Titans 五部电影,正负各半。
- 测试用参照集:200 条,来自另外五部电影(Les Miserables、Star Wars Episode I: The Phantom Menace、The Expendables I、The Godfather、The Matrix Revolutions),正负各半。按电影切分而不是随机切分,是为了让分类器在训练阶段完全看不到测试电影的评论。
- 审计集:下载全部 1000 条后去掉 6 条重复副本,得到 994 条不同评论;再减去训练和测试各 200 条,剩下 594 条,不参与训练也不参与测试。
生成文本
用两个语言模型生成 400 条新评论,每个模型各出 100 条正向、100 条负向。提示词只要求模型虚构一部电影并写一条指定情感的短评,不给源数据示例,也不要求模仿特定评论者的风格。这样得到的 600 行训练集就是 200 条参照评论加 400 条生成评论。
这里「合成」一词专指由语言模型写出的文本。所有结论都只适用于本次实验所用的两个模型、提示词、评论集合和这一次运行。
依赖与模型
- 困惑度计算:GPT-2。
- 句向量:all-MiniLM-L6-v2。
- 情感分类器:自行训练,用于观察过滤对下游任务的影响。
版本号、模型可用性与许可条款都可能变化,实际动手前请以各项目官网当前信息为准。
操作步骤
第一步:计算困惑度
困惑度衡量一段文本对语言模型来说有多「可预测」。生成文本常常拿到较低的困惑度,因为它倾向于使用常见的词序搭配;但人类写作同样可能很可预测。因此低困惑度只能当作警示信号,不能当作 AI 作者身份的证据。
把每条评论送进 GPT-2,得到困惑度分数。注意方向:困惑度越低越可疑,而后面两个指标是越高越可疑,所以合成之前必须先把困惑度反向。
第二步:计算近重复相似度
先用 all-MiniLM-L6-v2 把每条评论转成一个嵌入向量,也就是一串代表其部分语义与措辞的数字。近重复相似度比较的是:这条评论与它在向量空间中最接近的那一条有多像。相似度高,说明集合里存在另一条措辞或含义相近的评论。
第三步:计算嵌入密度
嵌入密度问的是另一个问题:这条评论离它最近的五个邻居有多近。如果生成文本在向量空间里聚成紧密的一团,它们到近邻的平均距离就会比风格多样的人类文本更短。这个指标衡量的是局部聚集程度,而不是与某一条的配对相似度。
第四步:合成综合分
三个分数不能直接相加,量纲不同。先把每个分数归一化到 0 到 1 之间,并且统一方向——数值越大越像 AI。困惑度方向相反,需要先反转。近重复相似度和嵌入密度本身就是越大越接近其他评论,无需反转。
然后把三个调整后的分数相加再除以三,得到综合分。要强调:这是一个警示分数,不是「模型写了这条评论」的概率。它的用途是检验「多个检查项取平均」是否比单用某一项更好。
第五步:选阈值
阈值就是分数高于它就被标记的那条线。为了比较不同方法,需要变动阈值并同时观察两个量:
- 召回率:被检测器抓到的生成评论占全部生成评论的比例。
- 误报率:被标记为疑似 AI 的参照评论占参照评论的比例。由于集合不核验作者身份,这个比率完全依赖于前面那个人类撰写的假设。
本次实验的选线规则是:在训练集的 200 条参照评论中误报尽可能少的前提下,至少抓到 80% 的生成评论。最终落在 600 条训练集上的阈值是 0.548。
阈值不能跨数据集复用。把检查应用到全部 1394 条评论(200 条测试参照 + 594 条审计 + 600 条训练)时,分数是在整个大组上重新缩放的,同一个 0.548 会标出完全不同的比例。所以必须为更大的分组重新选阈值。
一个完整示例
下面把整个流程串起来,从数据准备到得出结论。
准备阶段
- 下载影评集合的全部 1000 条记录。
- 去掉 6 条重复副本,得到 994 条不同评论。
- 按电影切出 200 条训练参照、200 条测试参照,剩余 594 条留作审计。
- 用两个模型各生成 200 条评论(正负各半),与 200 条训练参照拼成 600 行训练集。
打分阶段
对全部 1394 条评论一起打分,因为相似度和密度检查需要把每条评论与其他评论作比较。三条打分路径:
困惑度 = GPT-2(评论) # 越低越可疑,需反转
近重复相似度 = 与向量空间最近邻的相似度 # 越高越可疑
嵌入密度 = 与最近五个邻居的平均距离的倒数 # 越高越可疑
综合分 = (反转后的困惑度 + 近重复相似度 + 嵌入密度) / 3
观察结果
在「至少抓到 80% 生成评论」这个召回目标下,各检查项在 200 条训练参照评论上的误报情况:
| 检查项 | 参照评论误报率 |
|---|---|
| 嵌入密度 | 47% |
| 近重复相似度 | 52% |
| 综合分 | 73% |
| 困惑度 | 98.5% |
嵌入密度的误报率最低,但仍然有 47%——也就是说,为了抓到 80% 的生成评论,将近一半被当作人类撰写的评论也被标记了。取平均并没有解决问题,综合分反而比单用嵌入密度更差。
在后续实验所用的综合分阈值下,检测器标记了 400 条生成评论中的 320 条,以及 200 条参照评论中的 146 条。它从 600 行训练集里删掉了 466 行,只剩 134 行。所谓「80% 召回」并不意味着过滤器只删掉了生成文本。
对下游任务的影响
把三个检查项的综合分用于过滤,在一个单独的 200 条评论测试集上,情感分类准确率从 67.5% 降到 57.5%。过滤不但没有提纯数据,反而损害了模型。
审计原始集合
把同一套检查应用到 594 条审计评论上,综合分标记了其中 444 条为疑似 AI 撰写,另外 150 条在阈值之下。同一套检查还标记了 200 条测试参照评论中的 158 条。
这些数字是检测器的标记,不是「模型确实写了这些评论」的确认。它们恰恰说明,这个阈值不适合用来给档案库里的评论打标签,更不适合据此自动删除数据。
得分最高的参照评论长什么样
在参照评论中得分最高的那条,是一段事实密集的条目式文字,而不是什么打磨过的散文。它讲的是 1984 年的电影 Amadeus:导演、编剧、改编来源、故事发生的时间地点、莫扎特音乐在配乐中的使用,以及影片获得的提名与奖项数量。这类堆叠专有名词和数字的写法,在语言模型看来同样「可预测」,于是被打了高分。
这个例子很能说明问题:检测器抓到的未必是「AI 味」,也可能只是「信息密度高、句式规整」。把它当作自动删除的依据,会优先误伤这类内容。
注意事项
这些数字的适用范围
6.5% 到 16.9% 这个区间来自对四个 AI 会议同行评审的估计,它说明的是「实质性 AI 改写出现在有真实后果的同行评审中」这一事实,不能外推到产品评论、论坛帖子或问卷。本次实验的结论同样只适用于所用的两个模型、提示词、评论集合和这一次运行。
误报率依赖一个未经验证的假设
整个实验把 2019 年发布的、来源标注为 IMDb 的评论当作人类撰写。集合本身不核验每条评论的作者身份。如果这个假设不成立,所有误报率都要重新解读。
阈值不可迁移
分数是在参与比较的整个评论组上缩放的。换一个数据规模、换一批评论,同一个阈值标出的比例就完全不同。任何复用都必须重新选线。
综合分不是概率
三个归一化分数取平均得到的是一个警示分数。它不表示「这条文本有百分之多少的概率由模型生成」,也不能作为判定依据。
不要用检测结果自动删数据
这是本次实验最实际的教训。在 80% 召回目标下,误报率最低的单项检查也会标记 47% 的参照评论;综合分标记 73%。用这样的过滤器清洗训练集,会把大部分真实数据一起删掉,并让下游分类准确率从 67.5% 掉到 57.5%。检测标记应当作为人工复核的线索,而不是删除指令。
困惑度单独使用几乎无效
在同样的召回目标下,困惑度标记了 98.5% 的参照评论。它几乎把所有文本都标了一遍,不具备区分能力。
许可与合规
所用影评集合采用 CC BY 4.0 许可,允许在署名并附许可链接的前提下复用和改编。使用任何公开数据集前,请核对其当前许可条款;许可、模型可用性与配额都可能变动,以官网当前信息为准。