生成式抄袭检测如何溯源?描述长度增益与候选来源重排序实践
2026/8/27 8:45:55 网站建设 项目流程

最近一个学期,我在处理课程论文时遇到了一件有意思的事:一篇提交上来的论文,选题和我布置的方向高度相关,但没有任何一段和我提供的资料在字面上重合。我把它丢进常规查重系统,返回的相似率低得离谱。后来我用逐句语义比对去查,才发现它像是把某篇公开博客先做了大段改写,再由生成式模型润色了一遍。

这个场景,就是典型的生成式抄袭检测:你面对的不是复制粘贴,而是“被大模型改写后的内容溯源”。它比传统查重难在一点:表示相似性已经不足以说明问题,因为改写后的文本在向量空间里可能依然近,也可能已经近到无法解释;更需要判断的是“它是不是从某个候选来源经过生成过程派生出来的”。也就是标题里那个看起来有点啃的概念:Source-Conditioned Description-Length Gain,源条件下的描述长度增益。

这个概念并不复杂,但一旦理解,你对“文本相似”这件事的看法会发生一点变化。这篇博客我会从问题拆开讲,然后再给出一个可以落地的候选来源重排序工作流。

1. 为什么表示相似性在抄袭检测里不够用了

1.1 传统检测真正衡量的,是“长得像”

传统查重系统和文本匹配算法,核心都是相似性测量。早期的做法用 n-gram 重叠、编辑距离、最长公共子串,本质上是在比较字面上的相同程度。后来文本嵌入成熟了,大家开始用语义向量相似度去度量。比如把两个句子分别过一遍编码器,得到向量后算余弦相似度。这种方式确实能抓住“换了个说法但意思相同”的情况,比如同义词替换、语序调整、简单改写。

这些方法的共同点在于:它们都在描述“两段文本在某种表示空间里的接近程度”。表示越接近,就越认为存在抄袭关系。这个假设在传统文本抄袭中基本成立,因为传统抄袭无论怎么改,都会保留相当程度的原文信息。即使是手动“伪原创”,也常常留下关键词、句法骨架和前后顺序。

但生成式模型出现后,这个假设开始松动。一个 LLM 可以把原文改写成完全不同的句式、替换掉几乎所有表面的词汇,甚至可以加入新的例子、调整段落顺序、把原文压缩成摘要,再扩展成一篇新文章。做这个过程的成本很低,一条 prompt 就能完成。结果是:改写后的文本在语义上仍然和来源有很强的关系,但在表示空间里,这种关系可能被稀释成一段无法解释的模糊信号。

1.2 生成式改写破坏的,是“可解释的对应关系”

我们可以把传统抄袭检测看成“找对应的过程”:句级对齐、关键词对齐、语义块对齐。只要能在两个文本之间建立起可解释的对应,就能给出证据链。查重报告里那些高亮的句子,就是这种对应关系的可视化。

生成式改写恰恰破坏的是“逐条可解释的对应”。比如源文档里有一句“模型在低资源语言上的表现仍然受限”,经过改写后可能变成“对于资源较少的语种,模型的性能提升并不明显”。两句话在深层语义上是同一个断言,但如果你用句向量去比对,很可能因为表述方式的差异而落在相似度阈值之下。

更麻烦的是,大模型在改写时经常会加入“合理但非原文”的信息。它可能补充背景、调整例子、改变论证顺序。这样一来,待测文本与某个来源的关系,已经不是逐句相似度的简单叠加,而更像是一种“生成路径上的可能性”。

表示相似性只能衡量结果,不能衡量过程。而生成式抄袭检测真正需要回答的问题是:给定候选来源,这段文本被生成出来的概率是否显著更高?这已经不是“像不像”的问题,而是“能不能通过生成过程解释来源”的问题。

1.3 为什么“来源”这个条件如此关键

同一个待测文本,与不同候选来源在一起时,生成难度是不一样。假设我们有一篇待测文章 T,候选来源 S1 和 S2。如果 T 实际上是基于 S1 改写得到的,那么当我们把 S1 放进上下文,让模型去描述 T 时,需要的“描述成本”会明显降低;而 S2 无法提供这种便利。

这里的关键是“条件化”。无条件时,模型生成 T 有一个基础概率。给定 S 后,模型生成 T 的概率会发生变化。如果 S 确实是 T 的改写来源,这个概率通常会上升;如果不是,概率上升幅度有限,甚至会下降。把这个概率差异换算成一个数值,就是描述长度增益。它比单纯计算表示相似性更有解释力,因为它在做一个可验证的假设:来源对生成过程有真实的因果贡献。

2. “描述长度增益”到底是什么:把抄袭检测变成编码问题

2.1 最小描述长度与文本来源判断

描述长度这个词来自信息论。简单说,一段文本可以看作一串符号,我们总能用某种方式去描述它。描述成本越低,说明这段文本越容易被某种模型解释。

从这个角度看,来源检测可以变成一个编码问题:我用一个通用模型来描述 T,得到一个编码长度;我再把 S 作为上下文,用同一个模型去描述 T,得到另一个编码长度。两个长度之差,就是“源条件下的描述长度增益”。

如果 S 与 T 无关,那么把 S 塞进上下文,不仅不会让描述变短,还可能因为上下文干扰而变长。如果 S 与 T 有关系,尤其是 T 就是由 S 改写而来,那么 S 承担了一部分“解释责任”,描述 T 所需的额外信息就会减少。省下的长度越多,说明 S 对生成 T 的解释力越强。

这个思路的底层逻辑,和“最小描述长度”的基本思想一脉相承:能最大程度压缩某段数据的模型或前提条件,往往就是对该数据来源的最好解释。

2.2 从概率到描述长度增益:一种计算路线

在具体实现上,描述长度增益通常不是真的去做文本压缩,而是借助语言模型的概率估计。一个基于 Transformer 的自回归语言模型,会给一段文本一个对数概率。给定上下文 S 后,同一个文本的对数概率会变化。于是增益可以近似写成一个差值:

  • 无条件描述成本:对 T 计算对数概率并取负值,相当于用通用模型描述 T 的成本。
  • 有源条件描述成本:把 S 放在上下文前,计算给定 S 时 T 的条件对数概率,再取负值。
  • 增益:无条件成本减去条件成本。如果条件成本更低,增益为正;如果条件成本更高,增益为负。

实际计算时还要考虑长度。长文本天然会产生更大的概率差值,所以一般会除以待测文本的 token 数量,得到“每个 token 的描述长度增益”,也就是一个归一化的数值。

这不是一个需要定制训练的任务,也不需要微调专用模型。你只需要一个足够强的自回归语言模型,以及一组候选来源和待测文本。也就是说,这个方案在计算上是可行的,不需要独立准备一个特殊的数据集。

2.3 为什么这个结果不等于相似度

理解这个指标,很重要的一点是:它不是在测两个文本的相似度,而是在测“条件概率的下降幅度”。相似度是静态的,描述长度增益是动态的。

举个例子。两个关于天气的句子,“今天下雨”和“今天降水概率较大”,语义相似度会很高。但如果你把一个候选来源 S 放进去,再去看它们各自的生成概率变化,结果可能完全不同。如果 S 是一篇科普文章,专门讨论降水概率模型,那么“今天降水概率较大”的条件概率会上升,而“今天下雨”可能只上升一点点。

这说明:描述长度增益捕捉的是“来源对文本生成过程的影响”,而不是“文本之间的相似关系”。它能区分两种表面相似但来源不同的情况。这一点在候选来源重排序时尤其有价值,因为重排序不是在找最像的文本,而是在找最可能作为生成母本的文本。

2.4 用 MDL 视角看抄袭检测的收益

把抄袭检测变成编码问题,还有一个额外收益:它可以被解释、被审计。向量相似度只能告诉你“它们相似”,很难告诉你“为什么相似”。描述长度增益则可以追溯到具体的概率变化:你把某一句话喂给模型,给定来源后它的概率涨了多少。哪怕最终只是一个数值,中间的每一步都是可复现的。这比一个黑盒相似度分数更适合学术诚信这类需要解释证据的场景。

3. 核心机制:候选来源重排序的完整工作流

3.1 先召回,再重排,最后做决策

在实际的抄袭检测流程里,我们通常不会拿待测文本直接去和所有文档做全量比较。那样成本太高,也没必要。一个成熟的流程是“召回-重排-决策”三段式。

召回阶段负责把候选来源缩小到几十个以内。可以用 BM25、TF-IDF、向量检索或搜索引擎。这个阶段允许有大量漏网之鱼,但要求不能把真正相关的来源完全丢掉。因为重排阶段只能对已有的候选集进行排序,如果真来源不在候选集里,后续所有计算都白费。

重排阶段就是描述长度增益发挥主要作用的地方。对每个候选来源 S_i,计算其与待测文本 T 的条件描述长度增益,然后按增益从高到低重新排序。这一步能得到一个新的顺序,这个顺序通常比召回阶段的原始顺序更可靠。

决策阶段要设定阈值或复核规则。比如只看增益最高的前 k 个候选,或者当最大增益超过某个经验阈值时才判定存在抄袭关系。这个阈值需要结合具体领域和文本长度来标定,不能拿着一套参数到处用。

3.2 一个最小可运行的验证流程

如果你只是想验证这个思路是否有效,不需要一开始就做一个生产系统。我建议先跑一个最小验证流程,重点观察不同候选来源的增益是否区分得开。

第一步,准备测试数据。拿一篇源文档 S,用大模型改写出一篇 T。再准备几篇和 S 无关但主题相近的干扰文档。这里其实就是一个人工构造的正负样本集。

第二步,搭建计算管线。你需要一个语言模型推理环境。开源模型比如 Qwen、Mistral、Llama 都可以尝试。推理时使用一个能输出 log probabilities 的接口,如果没有现成接口,也可以用困惑度计算工具,逻辑是一样的。注意:这里要的是“生成概率”,不是聊天回复,所以别用 chat 模板,尽量用最简单的纯文本输入。

第三步,对每个候选来源,分别计算无条件描述成本和有条件描述成本。你可以把输入组织成下面这种形式:

S = "源文档内容" T = "待测文本内容"

让模型同时感知 S 和 T,就能得到条件概率。你也可以先让模型单独看到 T,计算无条件概率,再引入 S 计算条件概率。

第四步,计算增益并按数值排序,观察正确来源是否排在最前面。把这个实验在不同改写程度下重复几次,就能初步判断这个方法对你手头数据是否有效。

# 伪代码示例:描述长度增益的常见写法 def description_length_gain(model, source, target): # 无条件:只把 target 交给模型 unconditional_nll = model.negative_log_likelihood(target) # 有条件:source 作为上下文,target 紧接其后 conditional_nll = model.negative_log_likelihood_with_context(source, target) # 增益 = 无条件成本 - 有条件成本 gain = unconditional_nll - conditional_nll # 按 token 数归一化,避免长文本影响 num_tokens = model.count_tokens(target) return gain / num_tokens

上面的代码只是一个结构示例,实际使用时要把模型封装成能返回每个 token 概率的形式。

3.3 如何把重排序结果做成可用的检测信号

当你得到候选来源的排序后,下一步通常不是直接下结论,而是把增益分数和原有检索分数进行融合。一种常见做法是把描述长度增益按 z-score 标准化,再和向量相似度得分做一个加权。这样既能保留召回阶段的速度优势,又能引入生成阶段的过程信号。

我自己做实验时,一般会这样组合:

  • 先用 BM25 和向量检索各取 top 50,合并去重。
  • 然后对合并后的 top 100 候选计算描述长度增益。
  • 最后再把增益分数与原来的召回分数做 rank fusion。
  • 观察最终排序是否把正确来源提升到第一位。

这个组合方式的价值在于:它不会完全推翻召回结果,而是用生成过程信号去修正召回阶段可能存在的误判。如果某个候选来源在语义上很像,但它并不能显著降低 T 的生成成本,那它很可能只是主题相近,而不是真正的改写母本。

3.4 重排序之后还需要人工复核

自动检测不是终点。学术诚信检测、内容版权追踪这类场景,必须要有人工复核环节。描述长度增益可以作为筛选器,把需要人工查看的文档数量从几万降到几十;但最终判定是不是抄袭,仍然需要看具体证据。

在做人工复核时,你可以把条件概率最高的句子高亮出来,看看这些句子在给定来源后概率提升明显。这种“证据可视化”也是这个方法的优势。它不是给一个模糊得分,而是能定位到哪些片段受来源影响最大。

4. 实际落地中最容易踩的几个坑

4.1 源文档预处理不到位,条件概率会被噪音掩盖

描述长度增益的核心是条件概率差异。如果源文档 S 里混入了大量无关内容,比如页眉页脚、广告、参考文献列表、网页噪声,那么模型在给定 S 时,可能把注意力放在这些无关部分,导致增益被稀释。

所以在计算前,源文档要尽量做清洗和切分。如果 S 是一篇长文章,最好按段落切分后分别计算,再取最好的段落结果,而不是整篇塞进去。长文本还会带来另一个问题:超出模型的上下文长度。现在很多模型支持 8k、16k 甚至更长上下文,但过长文本会不稳定,计算成本也会直线上升。

更稳妥的做法是,把待测文档也切成若干片段,逐段寻找最有可能的来源片段。这更像是对“来源片段”重排序,而不是对整篇文档做单一判断。

4.2 长度归一化没有做对,长文本会主导一切

如果不做长度归一化,一段 1000 词的文本自然比一段 50 词的文本更容易产生大的概率差值。这会导致排序结果被长文本主导。常见的归一化方式是除以待测文本的 token 数,得到“每个 token 的增益”。但也不是所有情况都需要严格归一化。

有些场景下,我们会保留部分长度信息,因为长文本本身就是证据量更大的一个重要特征。更合理的方法通常是:在做排序时使用归一化增益,在做最终判定时,同时参考原始增益和长度信息,而不是一刀切。

4.3 模型上下文长度和概率输出稳定性

不同模型的概率估计存在偏差,同一个模型在不同 prompt 格式下也会产生不同的 logit。实际落地时要注意:

  • 尽量使用可以返回 logits 或 log probabilities 的模型,而不是只能生成文本的 API。
  • 所有候选来源和待测文本的输入格式要保持一致,不要对某个来源加特殊前缀,另一个不加。
  • 如果模型是面向对话训练的,最好不要使用带 system prompt 的聊天框架,直接用 base model 进行概率计算。
  • 如果条件概率不稳定,可以多次采样取均值,但要注意计算成本。

注意:条件概率计算中最常见的错误,是模型在“看到”候选来源和待测文本时,使用了不同的系统提示词或长度限制。背景变了,结论可信度就大打折扣。

4.4 召回阶段漏掉了正确来源,重排序无法挽回

描述长度增益是一个重排序信号,不是一个召回信号。如果候选来源列表里根本没有真正的源文档,不论增益计算得多准确,都无法把它排到前面。

因此,在召回阶段要尽量保证覆盖率。我一般会把多种检索方式的结果合并起来:BM25 看重字面匹配,向量检索看重语义匹配,如果条件允许,再用关键词变体、翻译查询等扩展候选集。宁可多召回一些无关文档,也不要漏掉正确的来源。

4.5 阈值怎么定:不要凭直觉

确定抄袭关系时,阈值没有一个放之四海而皆准的标准。它取决于:

  • 待测文本的类型:新闻、论文、代码、博客,改写方式和程度都不同。
  • 改写的方式:摘要式改写比逐句改写更难检测,增益数值也会更小。
  • 语言和领域:不同语言模型的概率分布不同,阈值需要重新标定。

实际操作中,建议先准备一批已知来源的正样本和一批不相关或主题相近的负样本,画出增益分布的直方图,找到区分度最好的阈值。如果分布重叠严重,说明这个指标在你当前数据上不够强,需要结合其他信号,不要硬用一个不合适的阈值。

4.6 排查链路:先看哪一层出了问题

当你跑出一个不理想的结果时,不要第一时间调阈值。我建议按下面的顺序排查:

  1. 检查输入:待测文本和源文档是否清洗干净,是否有乱码、格式干扰、错误切分。
  2. 检查召回:正确来源是否在候选集里。如果不在,重排序做得再好也没用。
  3. 检查概率计算:输入格式是否一致,模型是否真的在按条件生成而非随机输出,长度归一化是否正确。
  4. 检查阈值:在人工构造的正负样本上,增益分布是否可分。
  5. 检查场景适用性:如果待测文本太短,或改写程度太高,增益信号可能很弱,需要结合其他证据。

注意:如果你发现正确来源排不上来,先去看 top-10 里有没有它的影子。如果完全没出现,这通常不是重排序的问题,而是召回阶段漏了。

5. 这个方法适合谁、不适合谁,以及下一步最该做什么

5.1 适合的场景:有明确候选集的溯源任务

描述长度增益最擅长的场景,是“给一段待测文本,从一批候选文档里找最可能的生成来源”。学术论文查重、博客内容溯源、版权追踪、数据库里的数据血缘分析,都属于这类场景。因为它们通常都有可以枚举的候选集,重排序问题非常自然。

在学术诚信场景下,这个方法还有一个优势:它不依赖已有的“相似度报告”,而是使用生成模型自身的概率信号。如果一个文本确实由某篇候选来源改写而来,无论改写程度多高,模型在给定来源后生成该文本的成本通常都会下降。这比纯向量相似度更贴近“改写”这一动作的本质。

5.2 不适合的场景:没有候选来源、超短文本、高噪声文本

如果候选来源是开放的互联网,且没有初始检索器,那么第一步召回本身就非常困难。描述长度增益无法扫描整个互联网,它更多是辅助判断和排序。另一个明显不适用的情况是超短文本,比如一句话、一个标题。短文本的 token 数太少,增益计算不稳定,很难形成可靠的统计信号。

还有一类场景是高噪声文本,比如从 PDF 里提取出来的乱序文本、OCR 错误较多的内容。它们会干扰模型对条件概率的估计。这种情况下,先把文本清洗到可读状态,比直接跑增益计算更有效。

5.3 一个可复用的决策框架

我平时处理这类问题,会遵循一个“四步框架”,你也可以直接用:

  1. 先问自己:需要的是相似文本查找,还是来源归属判断。如果是前者,用向量检索就足够;如果是后者,才需要引入描述长度增益。
  2. 再做候选召回:保证正确来源在候选集内有足够高的覆盖率。召回宁可宽,不要窄。
  3. 然后用描述长度增益重排:按归一化增益排序,观察 top 位次是否稳定。
  4. 最后融合阈值与人工复核:把自动检测结果变成可解释的证据,而不是直接当成最终结论。

这个框架的核心是:不把单一模型当唯一决策者,而是让生成概率、检索相似度、人工复核各司其职。

5.4 更重要的是:把“过程”变成可复用的检测线索

从一个更长远的视角看,生成式抄袭检测会越来越依赖“生成过程的可追溯性”。描述长度增益只是其中一种方式。未来可能会看到更多类似的方法:用多个模型交叉验证、结合水印信息、利用模型对改写方式的偏好统计。

但对于普通开发者和研究者来说,最重要的不是追最新指标,而是理解一个底层变化:当文本可以由模型自动改写时,任何只依赖最终表示的方法都会面临瓶颈。只有回到生成过程,去问“这个来源到底多大程度上解释了这个文本”,检测才会变得更可靠、更可解释、更经得起质疑。

如果你开发了一个自己的文本溯源系统,我最想提醒你的第一句话是:先别急着堆模型和参数,把召回、重排、阈值、复核四层流程的边界画清楚。先跑通最小流程,再一步步加复杂度。因为真正决定检测系统能不能长期使用的,往往不是单次效果提升多少,而是它在你手里的数据上,能不能稳定地复现、排错和解释。

生成式抄袭会随着大模型的普及变成一个更常见的常态化问题。而检测它的逻辑,也会从“看它像谁”走向“看它能否被谁更好地生成出来”。这个转变值得真正做文本挖掘和内容安全工具的人多花一点时间。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询