怀疑大模型把考题背进了参数里,第一步就是查重,而重叠检测是怎么查污染的,核心工具是 n-gram 重合率。原理不复杂:把两段文本都切成小片段,数共有片段的比例,比例过高即标记疑似。难的是阈值、复核与边界的把握,这篇按步骤讲清。
n-gram 重叠是怎么算的
把题目文本按连续 n 个字滑动切分,得到片段集合,再与训练语料或对照文本的片段集合求交集,交集占比就是重叠率。进来的是两段文本,发生的是切分与计数,出去的是一个 0 到 1 之间的比例值。n 取小了日常用语也会撞车,取大了改写几个字就能躲过,常见做法是多档 n 并用,各看一遍。
滑动窗口的切分方式也有变体:按字切、按词切、按标点切分句再组合,各有适用场景。中文任务按字切是主流,英文任务按词切更常见,代码类任务则要按 token 切,因为变量名的改写往往发生在词法层面。无论哪种切法,都要在报告里写清楚窗口大小与切分单位,否则两个团队的重叠率没法互相比较。检测工具的输出除了比例值,再附上具体命中的片段列表,机器算出疑点、人来看内容,这条分工线在工程上一直很稳定。把切分参数随工具一起开源的团队,通常在查重可信度上也更经得起追问。
阈值定多少合适
阈值没有万能值:数学题的公式表达天然重合度高,阈值要放宽;开放问答几乎不该有大段重合,阈值要收紧。实用做法是分题型设档,先粗筛出高分段样本,再交给人工逐条看。智谱清言的语料团队在公开分享里提过类似分级筛查流程,秘塔AI搜索这类检索产品则在反向场景里用它比对网页相似度。
| 题型 | 天然重合度 | 阈值怎么定 | 定错了会怎样 |
|---|---|---|---|
| 数学题 | 高,公式表达天然重合 | 放宽 | 收太紧会把大量正常题误标成污染 |
| 开放问答 | 低,几乎不该有大段重合 | 收紧 | 放太松会漏掉真正照搬的样本 |
| 代码类 | 中,变量名与模板句式容易撞 | 按 token 切分后另设一档 | 按字切会把通用写法误判成重合 |
命中之后的人工复核
机器只负责圈出可疑样本,判定权在人:逐条比对重合片段是整段照搬还是常见表达,结合题目发布时间与语料时间先后关系下结论。复核记录要留档,后续争议时能拿得出证据链。误报多说明阈值太松,漏报多说明档位缺了,都要回调参数。
重叠检测查不出什么
改写式污染是它的盲区:同义替换、调整语序、翻译一轮再翻回来,重叠率会掉到正常区间,题目却实实在在被记住了。查不出不代表没法防,配合新题暗标、定期换题等手段一起用,具体泄漏后果与应对见题目污染;故意利用盲区的行为属于刷分操作;检测结果本身也有波动,归因时要连着评测方差一起看,而阈值卡多严才敢下结论,最终要靠显著性判定兜底。
工程实现上,n-gram 检测的性能开销也要考虑:题目量一大,逐对比较的计算量陡增,通常先建倒排索引,把候选对缩小到重合片段较多的文本对,再做精细计算。分片并行处理是标配,否则一次全库查重要跑上数天。工具链选型时,检索速度与召回完整性的平衡,比算法本身的精巧程度更影响实际效果。
查重结果的表达方式同样有讲究:直接给一个总体重合比例意义有限,细分到题目级别、给出每道题与语料的重合明细,才能支撑后续决策。明细里标注重合片段的位置与长度,人工复核的效率会成倍提升。一份没有明细的查重报告,读者只能选择信或不信;有明细的报告,读者可以自己判断,这才是检测工具的价值所在。
查重四步速查
- 切分:多档 n-gram 并用
- 粗筛:分题型设阈值
- 复核:人工判定留证据
- 回调:误报漏报反过来调参
关于重叠检测,问得最多的三个
- 重叠率高就一定污染了吗?:不一定,公式、术语、常用句式都会推高比例,要人工复核后再定性。
- 为什么用好几种长度的片段?:单档长度要么误报多要么漏报多,多档并用才能互相补位。
- 查重查语料还是查输出?:主要查训练语料与题库的重合,也有团队反过来查模型输出与题库的重合。


