AI生成内容检测方法
统计特征分析法
AI生成文本往往存在某些统计上的规律性,这些规律可能与人类自然书写的模式有所不同,统计特征分析法就是基于这一原理进行检测的。最基本的统计特征包括词频分布、句长变化、词汇多样性等指标。例如,我们可以使用Zipf定律来分析文本中词频的分布情况。对于人类文本,词频通常遵循以下规律:
f ( r ) ∝ 1 r α f(r) \propto \frac{1}{r^α} f(r)∝rα1
其中 f ( r ) f(r) f(r)是排名为 r r r的词的频率, α α α接近于1。研究表明,AI生成的文本中,高频词和低频词的分布可能与这一规律存在细微偏差。我们可以通过计算Zipf曲线拟合误差来量化这种偏差:
E Z i p f = 1 N ∑ i = 1 N ( log f ( r i ) − ( − α log r i + log C ) ) 2 E_{Zipf} = \sqrt{\frac{1}{N}\sum_{i=1}^{N}\left(\log f(r_i) - (-\alpha\log r_i + \log C)\right)^2} EZipf=N1i=1∑N(logf(ri)−(−αlogri+logC))2
其中 N N N是词汇量, C C C是常数项。
进一步,我们可以引入频谱分析来检测词频分布的周期性特征。对词频序列 F = { f ( r 1 ) , f ( r 2 ) , . . . , f ( r N ) } F = \{f(r_1), f(r_2), ..., f(r_N)\} F={f(r1),f(r2),...,f(rN)}进行离散傅里叶变换:
F ^ ( k ) = ∑ n = 0 N − 1 f ( r n ) e − i 2 π k n / N \hat{F}(k) = \sum_{n=0}^{N-1} f(r_n)e^{-i2\pi kn/N} F^(k)=n=0∑N−1f(rn)e−i2πkn/N
然后计算功率谱密度:
P ( k ) = 1 N ∣ F ^ ( k ) ∣ 2 P(k) = \frac{1}{N}|\hat{F}(k)|^2 P(k)=N1∣F^(k)∣2
人类文本的功率谱通常呈现 1 / f 1/f 1/f噪声特征,而AI生成文本可能存在特定频率的异常峰值。
词汇多样性是另一个重要指标,可以通过Type-Token比率(TTR)来测量:
T T R = 不同词汇数量 总词汇数量 TTR = \frac{不同词汇数量}{总词汇数量} TTR=总词汇数量不同词汇数量
对于较长的文本,我们通常使用更为复杂的标准化TTR(STTR)或MTLD(Measure of Textual Lexical Diversity):
M T L D = 总词数 ∑ i N 达到阈值 T T R 次数 MTLD = \frac{总词数}{\sum_{i} N_{达到阈值TTR次数}} MTLD=∑iN达到阈值TTR次数总词数
为了捕捉词汇使用的动态特性,我们可以引入词汇复杂性指数(LCI):
L C I = ∑ i = 1 N p i log ( 1 p i ) ⋅ ( 1 + ∑ j = 1 i − 1 ∑ k = j + 1 N d ( w j , w k ) N ( N − 1 ) / 2 ) LCI = \sum_{i=1}^{N} p_i \log\left(\frac{1}{p_i}\right) \cdot \left(1 + \sum_{j=1}^{i-1}\sum_{k=j+1}^{N} \frac{d(w_j, w_k)}{N(N-1)/2}\right) LCI=i=1∑Npilog(pi1)⋅ 1+j=1∑i−1k=j+1∑NN(N−1)/2d(wj,wk)
其中 p i p_i pi是词 w i w_i wi的概率, d ( w j , w k ) d(w_j, w_k) d(wj,wk)是词 w j w_j wj和 w k w_k wk之间的语义距离,通常通过词嵌入余弦相似度计算:
d ( w j , w k ) = 1 − v ⃗ j ⋅ v ⃗ k ∣ ∣ v ⃗ j ∣ ∣ ⋅ ∣ ∣ v ⃗ k ∣ ∣ d(w_j, w_k) = 1 - \frac{\vec{v}_j \cdot \vec{v}_k}{||\vec{v}_j|| \cdot ||\vec{v}_k||} d(wj,wk)=1−∣∣vj∣∣⋅∣∣vk∣∣vj⋅vk
此外,文本的句法结构复杂性也是区分AI和人类文本的重要指标。可以通过句法树深度分布的统计矩来量化:
M n = 1 T ∑ t = 1 T ( d t − d ˉ ) n M_n = \frac{1}{T}\sum_{t=1}^{T}(d_t - \bar{d})^n Mn=T1t=1∑T(dt−dˉ)n
其中 d t d_t dt是句子 t t t的句法树深度, d ˉ \bar{d} dˉ是平均深度, M n M_n Mn是 n n n阶矩。AI生成的文本在 M 3 M_3 M3(偏度)和 M 4 M_4 M4(峰度)上通常与人类文本存在显著差异。
熵和复杂度分析
从信息论的角度看,人类和AI生成的文本在熵和复杂度上存在差异。信息熵可以用以下公式计算:
H ( X ) = − ∑ i = 1 n P ( x i ) log 2 P ( x i ) H(X) = -\sum_{i=1}^{n} P(x_i) \log_2 P(x_i) H(X)=−i=1∑nP(xi)log2P(xi)
其中 P ( x i ) P(x_i) P(xi)是事件 x i x_i xi的概率。在文本分析中,事件可以是字符、词或短语的出现。
研究发现,AI生成文本的条件熵可能低于人类文本,这反映了AI在生成时的确定性较高。我们可以计算n-gram的条件熵:
H ( X n ∣ X 1 , X 2 , . . . , X n − 1 ) = − ∑ P ( x 1 , x 2 , . . . , x n ) log 2 P ( x n ∣ x 1 , x 2 , . . . , x n − 1 ) H(X_n|X_1, X_2, ..., X_{n-1}) = -\sum P(x_1, x_2, ..., x_n) \log_2 P(x_n|x_1, x_2, ..., x_{n-1}) H(Xn∣X1,X2,...,Xn−1)=−∑P(x1,x2,...,xn)log2P(xn∣x1,x2,...,xn−1)
为了更全面地捕捉文本的熵特性,我们可以引入多尺度熵(MSE)分析,计算在不同尺度下的样本熵:
M S E ( X , τ , m , r ) = { S a m p E n ( X 1 τ , m , r ) , S a m p E n ( X 2 τ , m , r ) , . . . , S a m p E n ( X s τ , m , r ) } MSE(X, \tau, m, r) = \{SampEn(X^\tau_1, m, r), SampEn(X^\tau_2, m, r), ..., SampEn(X^\tau_s, m, r)\} MSE(X,τ,m,r)={SampEn(X1τ,m,r),SampEn(X2τ,m,r),...,SampEn(Xsτ,m,r)}
其中 X j τ X^\tau_j Xjτ是尺度因子为 τ \tau τ的粗粒化时间序列, m m m是嵌入维度, r r r是相似性阈值。样本熵定义为:
S a m p E n ( X , m , r ) = − ln A m ( r ) B m ( r ) SampEn(X, m, r) = -\ln\frac{A^m(r)}{B^m(r)} SampEn(X,m,r)=−lnBm(r)Am(r)
其中 A m ( r ) A^m(r) Am(r)和 B m ( r ) B^m(r) Bm(r)分别是在 m + 1 m+1 m+1维和 m m m维相空间中,距离小于 r r r的点对数量。
我们还可以引入排列熵(PE)来捕捉文本中的序列模式:
P E ( X , m , τ ) = − ∑ π ∈ Π p ( π ) ln p ( π ) PE(X, m, \tau) = -\sum_{\pi \in \Pi} p(\pi) \ln p(\pi) PE(X,m,τ)=−π∈Π∑p(π)lnp(π)
其中 Π \Pi Π是所有可能的 m ! m! m!种排列, p ( π ) p(\pi) p(π)是排列 π \pi π在时间序列中出现的概率。AI生成文本通常具有较低的排列熵,反映其序列模式的多样性不足。
从复杂度角度,我们可以使用更精确的Kolmogorov复杂度近似方法。标准Lempel-Ziv复杂度是:
L Z 复杂度 = 文本压缩后的大小 原始文本大小 LZ_{复杂度} = \frac{文本压缩后的大小}{原始文本大小} LZ复杂度=原始文本大小文本压缩后的大小
这个指标可以通过考虑多种压缩算法的组合进行增强,得到归一化压缩距离(NCD):
N C D ( x , y ) = C ( x y ) − min ( C ( x ) , C ( y ) ) max ( C ( x ) , C ( y ) ) NCD(x,y) = \frac{C(xy) - \min(C(x), C(y))}{\max(C(x), C(y))} NCD(x,y)=max(C(x),C(y))C(xy)−min(C(x),C(y))
其中 C ( x ) C(x) C(x)表示序列 x x x的压缩大小, C ( x y ) C(xy) C(xy)表示序列 x x x和 y y y连接后的压缩大小。对于文本自我相似性的测量,我们可以定义:
N C D s e l f ( x ) = 1 n − 1 ∑ i = 1 n − 1 N C D ( x 1 : i , x i + 1 : n ) NCD_{self}(x) = \frac{1}{n-1}\sum_{i=1}^{n-1}NCD(x_{1:i}, x_{i+1:n}) NCDself(x)=n−11i=1∑n−1NCD(x1:i,xi+1:n)
人类文本通常具有更高的 N C D s e l f NCD_{self} NCDself值,表明其内部结构的不可预测性更强。此外,我们还可以引入条件复杂度测度(CCM)来捕捉文本的非线性动态特性:
C C M ( X → Y ) = 1 E ∑ i = 1 E ρ ( y i , y ^ i ( X ) ) CCM(X \rightarrow Y) = \frac{1}{E}\sum_{i=1}^{E}\rho(y_i, \hat{y}_i(X)) CCM(X→Y)=E1i=1∑Eρ(yi,y^i(X))
其中 ρ \rho ρ是相关系数, y ^ i ( X ) \hat{y}_i(X) y^i(X)是基于 X X X的近邻信息预测的 y i y_i yi值, E E E是时间序列长度。CCM值越高,表示文本元素之间的因果关系越强,AI生成文本通常表现出更高的CCM值,反映其元素间的强相关性。
语言模型困惑度分析
困惑度(Perplexity)是评估语言模型对文本预测能力的指标,也可用于检测AI生成内容。对于一个长度为N的文本序列,困惑度定义为:
P P L = 1 P ( w 1 , w 2 , . . . , w N ) N = ∏ i = 1 N 1 P ( w i ∣ w 1 , w 2 , . . . , w i − 1 ) N PPL = \sqrt[N]{\frac{1}{P(w_1, w_2, ..., w_N)}} = \sqrt[N]{\prod_{i=1}^{N}\frac{1}{P(w_i|w_1, w_2, ..., w_{i-1})}} PPL=NP(w1,w2,...,wN)1=Ni=1∏NP(wi∣w1,w2,...,wi−1)1
也可以表示为:
P P L = 2 H ( W ) PPL = 2^{H(W)} PPL=2H(W)
其中 H ( W ) H(W) H(W)是文本的交叉熵。
在实际计算中,为了避免数值下溢问题,我们通常使用对数形式:
log P P L = 1 N ∑ i = 1 N − log P ( w i ∣ w 1 , w 2 , . . . , w i − 1 ) \log PPL = \frac{1}{N}\sum_{i=1}^{N}-\log P(w_i|w_1, w_2, ..., w_{i-1}) logPPL=N1i=1∑N−logP(wi∣w1,w2,...,wi−1)
对于未见词汇的处理,我们可以采用带平滑的交叉熵估计:
H smooth ( W ) = − 1 N ∑ i = 1 N log ( ( 1 − λ ) P ( w i ∣ w 1 , . . . , w i − 1 ) + λ P backoff ( w i ) ) H_{\text{smooth}}(W) = -\frac{1}{N}\sum_{i=1}^{N}\log\left((1-\lambda)P(w_i|w_1,...,w_{i-1}) + \lambda P_{\text{backoff}}(w_i)\right) Hsmooth(W)=−N1i=1∑Nlog((1−λ)P(wi∣w1,...,wi−1)+λPbackoff(wi))
其中 λ \lambda λ是平滑参数, P backoff P_{\text{backoff}} Pbackoff是回退概率分布。现代检测系统通常采用多层次的平滑策略:
P interp ( w i ∣ w i − n + 1 i − 1 ) = ∑ j = 0 n − 1 α j P j ( w i ∣ w i − j i − 1 ) P_{\text{interp}}(w_i|w_{i-n+1}^{i-1}) = \sum_{j=0}^{n-1}\alpha_j P_j(w_i|w_{i-j}^{i-1}) Pinterp(wi∣wi−n+1i−1)=j=0∑n−1αjPj(wi∣wi−ji−1)
其中 α j \alpha_j αj是插值权重,满足 ∑ j α j = 1 \sum_j \alpha_j = 1 ∑jαj=1, P j P_j Pj表示不同阶的n-gram模型。
为了更精确地区分AI和人类文本,我们可以定义困惑度比率:
P P L ratio ( T ) = P P L human ( T ) P P L AI ( T ) PPL_{\text{ratio}}(T) = \frac{PPL_{\text{human}}(T)}{PPL_{\text{AI}}(T)} PPLratio(T)=PPLAI(T)PPLhuman(T)
其中 P P L human PPL_{\text{human}} PPLhuman和 P P L AI PPL_{\text{AI}} PPLAI分别是使用人类文本训练的模型和AI文本训练的模型计算的困惑度。这种比率通常在AI生成文本上低于1,在人类文本上高于1。
对于不同领域的文本,我们可以引入归一化困惑度差:
N P D ( T ) = P P L target ( T ) − P P L source ( T ) P P L target ( T ) + P P L source ( T ) NPD(T) = \frac{PPL_{\text{target}}(T) - PPL_{\text{source}}(T)}{PPL_{\text{target}}(T) + PPL_{\text{source}}(T)} NPD(T)=PPLtarget(T)+PPLsource(T)PPLtarget(T)−PPLsource(T)
其中 P P L source PPL_{\text{source}} PPLsource是使用来源域模型计算的困惑度, P P L target PPL_{\text{target}} PPLtarget是使用目标域模型计算的困惑度。
我们还可以通过引入序列预测概率分布的统计特性来增强检测:
D KL ( P human ∣ ∣ P AI ) = ∑ i = 1 N P human ( w i ∣ c i ) log P human ( w i ∣ c i ) P AI ( w i ∣ c i ) \mathcal{D}_{\text{KL}}(P_{\text{human}} || P_{\text{AI}}) = \sum_{i=1}^{N} P_{\text{human}}(w_i|c_i) \log\frac{P_{\text{human}}(w_i|c_i)}{P_{\text{AI}}(w_i|c_i)} DKL(Phuman∣∣PAI)=i=1∑NPhuman(wi∣ci)logPAI(wi∣ci)Phuman(wi∣ci)
其中 c i c_i ci是单词 w i w_i wi的上下文, D KL \mathcal{D}_{\text{KL}} DKL是KL散度。基于此,我们可以构建更复杂的判别器:
log P ( T is human ) P ( T is AI ) = ∑ i = 1 N log P human ( w i ∣ c i ) P AI ( w i ∣ c i ) + log P ( human ) P ( AI ) \log\frac{P(T\text{ is human})}{P(T\text{ is AI})} = \sum_{i=1}^{N}\log\frac{P_{\text{human}}(w_i|c_i)}{P_{\text{AI}}(w_i|c_i)} + \log\frac{P(\text{human})}{P(\text{AI})} logP(T is AI)P(T is human)=i=1∑NlogPAI(wi∣ci)Phuman(wi∣ci)+logP(AI)P(human)
这是一个贝叶斯最优分类器,其中 P ( human ) P(\text{human}) P(human)和 P ( AI ) P(\text{AI}) P(AI)是先验概率。通过构建困惑度分布模型,我们可以设定自适应阈值来区分AI和人类文本:
τ ( c ) = arg min τ { α ⋅ F P R ( τ , c ) + ( 1 − α ) ⋅ F N R ( τ , c ) } \tau(c) = \arg\min_{\tau} \left\{ \alpha \cdot FPR(\tau, c) + (1-\alpha) \cdot FNR(\tau, c) \right\} τ(c)=argτmin{α⋅FPR(τ,c)+(1−α)⋅FNR(τ,c)}
其中 F P R FPR FPR是错误接受率, F N R FNR FNR是错误拒绝率, α \alpha α是平衡参数, c c c是文本的上下文信息。最终的分类决策为:
文本类别 = { A I 生成 , 如果 P P L < τ ( c ) 人类撰写 , 如果 P P L ≥ τ ( c ) 文本类别 = \begin{cases} AI生成, & \text{如果 } PPL < \tau(c) \\ 人类撰写, & \text{如果 } PPL \geq \tau(c) \end{cases} 文本类别={AI生成,人类撰写,如果 PPL<τ(c)如果 PPL≥τ(c)
这种自适应阈值方法能够有效处理困惑度分布的重叠区域,降低分类误差。
水印检测技术
水印是一种主动防御策略,在AI生成内容时嵌入特定的统计特征,以便后续识别。典型的水印方法如基于随机种子的词汇选择偏好。假设我们有一个词汇表 V V V和一个哈希函数 h h h,对于文本中的每个位置 i i i和上下文 c i c_i ci,我们可以确定一个绿色词集 G c i G_{c_i} Gci:
G c i = { w ∈ V ∣ h ( w , c i , k ) m o d m < τ } G_{c_i} = \{w \in V | h(w, c_i, k) \mod m < \tau\} Gci={w∈V∣h(w,ci,k)modm<τ}
其中 k k k是密钥, m m m是模数, τ \tau τ是阈值。在生成过程中,模型会略微提高绿色词集中词汇的选择概率:
P ′ ( w ∣ c i ) = { ( 1 + δ ) P ( w ∣ c i ) , 如果 w ∈ G c i ( 1 − δ ′ ) P ( w ∣ c i ) , 如果 w ∉ G c i P'(w|c_i) = \begin{cases} (1+\delta)P(w|c_i), & \text{如果 } w \in G_{c_i} \\ (1-\delta')P(w|c_i), & \text{如果 } w \notin G_{c_i} \end{cases} P′(w∣ci)={(1+δ)P(w∣ci),(1−δ′)P(w∣ci),如果 w∈Gci如果 w∈/Gci
这里 δ \delta δ和 δ ′ \delta' δ′是小的偏移量,需要满足归一化条件:
δ ′ ∑ w ∉ G c i P ( w ∣ c i ) = δ ∑ w ∈ G c i P ( w ∣ c i ) \delta'\sum_{w \notin G_{c_i}} P(w|c_i) = \delta\sum_{w \in G_{c_i}} P(w|c_i) δ′w∈/Gci∑P(w∣ci)=δw∈Gci∑P(w∣ci)
实际实现中,我们可以通过修改logits直接操作:
logits ′ ( w ∣ c i ) = { logits ( w ∣ c i ) + γ , 如果 w ∈ G c i logits ( w ∣ c i ) , 如果 w ∉ G c i \text{logits}'(w|c_i) = \begin{cases} \text{logits}(w|c_i) + \gamma, & \text{如果 } w \in G_{c_i} \\ \text{logits}(w|c_i), & \text{如果 } w \notin G_{c_i} \end{cases} logits′(w∣ci)={logits(w∣ci)+γ,logits(w∣ci),如果 w∈Gci如果 w∈/Gci
其中 γ \gamma γ是调整参数,通常设置为小值以确保水印不影响生成质量。
检测时,我们构建一个假设检验框架。零假设 H 0 H_0 H0是文本不包含水印,备选假设 H 1 H_1 H1是文本包含水印。检验统计量为:
z = 1 n ∑ i = 1 n ( I ( w i ∈ G c i ) − τ m ) z = \frac{1}{\sqrt{n}}\sum_{i=1}^{n}\left(I(w_i \in G_{c_i}) - \frac{\tau}{m}\right) z=n1i=1∑n(I(wi∈Gci)−mτ)
其中 I I I是指示函数, τ m \frac{\tau}{m} mτ是绿色词的期望比例。在 H 0 H_0 H0下, z z z近似服从标准正态分布 N ( 0 , 1 ) \mathcal{N}(0, 1) N(0,1),而在 H 1 H_1 H1下, z z z服从 N ( μ , 1 ) \mathcal{N}(\mu, 1) N(μ,1),其中:
μ = δ ⋅ E [ ∑ w ∈ G c i P ( w ∣ c i ) ] n \mu = \frac{\delta \cdot \mathbb{E}[\sum_{w \in G_{c_i}} P(w|c_i)]}{\sqrt{n}} μ=nδ⋅E[∑w∈GciP(w∣ci)]
对于显著性水平 α \alpha α,决策规则为:
拒绝 H 0 如果 z > z α \text{拒绝 } H_0 \text{ 如果 } z > z_{\alpha} 拒绝 H0 如果 z>zα
其中 z α z_{\alpha} zα是标准正态分布的 α \alpha α分位数。检验的功效为:
Power = 1 − Φ ( z α − μ ) \text{Power} = 1 - \Phi(z_{\alpha} - \mu) Power=1−Φ(zα−μ)
其中 Φ \Phi Φ是标准正态分布的累积分布函数。
为了增强水印的鲁棒性,我们可以引入多层次水印策略。对于每个词位置 i i i,我们定义 K K K个独立的绿色词集:
G c i ( j ) = { w ∈ V ∣ h j ( w , c i , k j ) m o d m j < τ j } , j = 1 , 2 , . . . , K G_{c_i}^{(j)} = \{w \in V | h_j(w, c_i, k_j) \mod m_j < \tau_j\}, j = 1,2,...,K Gci(j)={w∈V∣hj(w,ci,kj)modmj<τj},j=1,2,...,K
然后综合检测统计量:
z combined = 1 K ∑ j = 1 K z j z_{\text{combined}} = \frac{1}{\sqrt{K}}\sum_{j=1}^{K} z_j zcombined=K1j=1∑Kzj
这使得水印更难被去除,因为攻击者需要同时破坏所有层的水印。
对于部分编辑的文本,我们可以采用滑动窗口检测策略:
z ( a , b ) = 1 b − a + 1 ∑ i = a b ( I ( w i ∈ G c i ) − τ m ) z(a, b) = \frac{1}{\sqrt{b-a+1}}\sum_{i=a}^{b}\left(I(w_i \in G_{c_i}) - \frac{\tau}{m}\right) z(a,b)=b−a+11i=a∑b(I(wi∈Gci)−mτ)
并计算最大窗口统计量:
z max = max a , b : b − a + 1 ≥ l min z ( a , b ) z_{\text{max}} = \max_{a,b: b-a+1 \geq l_{\text{min}}} z(a, b) zmax=a,b:b−a+1≥lminmaxz(a,b)
其中 l min l_{\text{min}} lmin是最小窗口长度。这使我们能够检测出文本中含有水印的片段。
为了评估水印的安全性,我们定义未检测概率(PUD)和未察觉概率(PUP):
PUD
=
P
(
z
≤
z
α
∣
H
1
)
\text{PUD} = \mathbb{P}(z \leq z_{\alpha} | H_1)
PUD=P(z≤zα∣H1)
PUP
=
E
[
KL
(
P
′
∣
∣
P
)
]
\text{PUP} = \mathbb{E}[\text{KL}(P'||P)]
PUP=E[KL(P′∣∣P)]
安全性要求PUD和PUP同时较低,这需要在水印强度和隐蔽性之间取得平衡。
水印技术的优势在于高准确性和低误报率,但缺点是只能检测使用了该水印技术的AI系统生成的内容,对非水印内容无效。