一、文本查重底层原理
查重核心目标:判断两段文本之间的字面重合程度,主流采用N-Gram滑动窗口+哈希指纹的方案。
1. N-Gram分词与指纹生成
先对原文做预处理:去除标点、空格、换行,按固定长度截取连续字符片段(N-Gram)。
伪代码逻辑
def generate_ngram(text, n=13):
clean_text = text.replace(" ","").replace(",","").replace("。","")
ngram_list = []
for i in range(len(clean_text)-n+1):
seg = clean_text[i:i+n]
ngram_list.append(hash(seg))
return ngram_list
系统会对每一段N-Gram片段计算哈希值,得到文本指纹集合。比对时,将待检测文本指纹库和海量文献指纹库做交集计算。交集数量占待检测总指纹的比例,就是重复率。
不同查重系统的N取值不一样:部分系统采用13字符窗口,部分为8~10字符窗口。除了字面指纹匹配,还会附带模糊匹配模块,对语序调换、少量同义词替换的句子,保留部分特征,防止简单调换语序直接规避查重。
二、AIGC检测底层原理
AIGC检测不是比对文献库,而是识别文本的语言分布特征。大模型生成文本,在词汇分布、句法结构、句子困惑度、熵值上,和人工写作存在统计学差异。
1. 基础特征提取模块
提取文本的多维度特征:句子长度方差、词出现概率、相邻词语义相似度、信息熵、困惑度。
伪代码:文本熵值计算(核心特征之一)
import math
def calc_entropy(word_list):
freq = {}
for w in word_list:
freq[w] = freq.get(w,0)+1
total = len(word_list)
entropy = 0
for count in freq.values():
p = count / total
entropy -= p * math.log(p)
return entropy
AI生成文本通常熵偏低,词汇选择更加平滑,句子长度波动小;人工写作熵更高,语句长短起伏更大,用词随机性更强。
2. 句法特征与语义向量校验
除统计特征外,模型会使用预训练语言模型,把句子映射到语义向量空间。
- 句法Hash:提取句子主谓宾结构,生成句法哈希。AI文本句法模板化严重,大量句子会出现相似句法Hash;人工写作句法变化更多。
- 语义向量:将句子转为向量,检测相邻句子向量相似度。AI产出的段落内句子向量往往高度接近。
3. 多特征融合分类器
把熵、困惑度、句法hash、语义向量等多个特征送入分类模型,输出AIGC概率。
伪代码:多特征融合预测
def predict_aigc_prob(entropy, perplexity, syntax_hash_sim, semantic_sim):
features = [entropy, perplexity, syntax_hash_sim, semantic_sim]
# 预训练权重做加权融合
weight = [0.3,0.35,0.2,0.15]
score = sum(f*w for f,w in zip(features,weight))
prob = sigmoid(score)
return prob
分类器存在固有局限:仅做统计学判断,不是绝对判定。经过人工深度改写,文本统计特征、句法特征会向人工文本靠拢,AIGC预测概率下降。浅层同义词替换,无法改变底层句法和概率分布,AIGC检测结果一般不会明显变化。
三、查重与AIGC检测核心差异总结
| 维度 | 文本查重 | AIGC检测 |
|---|---|---|
| 比对对象 | 待检文本 VS 文献指纹库 | 提取文本自身语言统计特征 |
| 判断依据 | 字面片段重合度 | 熵、困惑度、句法结构、语义分布 |
| 规避特点 | 调整字面连续字符可以降重 | 仅替换词语无效,需要改写句式、调整表达逻辑 |
