[控场AI]
· 6 分钟阅读· 3,009 字

从Token到文件:多粒度检测AI参与代码的新框架

从Token到文件:多粒度检测AI参与代码的新框架

双LoRA在token级计算似然比,实现行、块、文件多粒度AI代码溯源。

文章介绍了一种在token级别建模AI作者身份的代码溯源框架。传统方法将整个文件压缩为单一分数,当仅少数代码块由AI生成时证据会被平均稀释,且依赖表面风格特征易受格式化干扰。新框架冻结代码语言模型,配备分别在人写与机器写数据上训练的两个LoRA适配器,对每个token计算对数似然比作为局部证据,再由轻量预测头在行、块、文件三个粒度聚合,并利用上下文修正。训练数据通过续写和填充中间方式构造混合作者文件。内部测试在1%假阳性率下达到72.4宏F1;外部基准HybridCodeAuthorship零样本行级F1达62.5,超过原最佳结果;在19,445个真实人类文件上假阳性率稳定在0.55%-0.81%。文章也讨论了计算开销、跨语言泛化及微小重构检测等局限。

从Token到文件:多粒度检测AI参与代码

大语言模型生成代码已成常态,但如何区分纯人类编写的代码与AI参与过的代码(即文件中任何部分——哪怕极小——由模型生成或大幅修改)仍是难题。更棘手的是,我们不仅需要标记出这类文件,还要定位到具体哪些行或代码块由AI贡献。现有方法往往将整个文件压缩成一个分数,依赖表面风格特征或全局代码表示,当只有少数代码块涉及AI时,这种平均化处理会稀释证据。最近一篇论文提出了一种新框架,在token级别建模AI作者身份,并能在行、块、文件三个层级进行预测,为代码溯源提供了更精细的视角。

现有方法的局限:全局分数为何失效

传统AI代码检测方法通常将整个文件作为输入,输出一个二分类结果或概率分数。这种“文件级”判断在AI参与度较高时或许有效,但当一份文件只有几行由AI生成(例如补全或填充中间部分),全局特征会被大量人类代码淹没。论文指出,压缩为单一分数会“平均掉”关键证据,导致漏报。此外,基于表面风格特征(如变量命名、注释风格)的方法容易受到代码格式化工具或开发者习惯的干扰,鲁棒性不足。

另一个问题是,许多检测器在训练时使用完全由AI生成或完全由人类编写的文件,缺乏混合作者场景的样本,导致在实际协作编辑中表现不佳。论文作者认为,需要一种能够捕捉局部AI痕迹的方法,而不是依赖全局摘要。

核心思路:token级证据与多粒度聚合

该框架的核心是“在token级别建模AI作者身份”。具体来说,研究者使用一个冻结的代码语言模型,并为其配备两个低秩适配器(LoRA),分别在人写文件和机器写文件上单独训练。对于每个token,计算两个适配器下的对数似然比,这个比值提供了该位置由AI生成或修改的局部证据。

得到token级信号后,轻量级预测头在行和块级别聚合这些证据,并利用周围代码上下文进行修正。最终,局部预测被聚合为文件级决策。这种设计允许模型在多个粒度上输出结果:文件是否涉及AI、哪些行涉及AI、哪些代码块涉及AI。论文强调,这种层次化聚合避免了全局平均的弊端,尤其适合混合作者文件。

训练数据方面,研究者构建了混合作者文件:以人类原始代码为基础,生成对应的AI生成或AI修改版本,覆盖续写(continuation)和填充中间(fill-in-the-middle)等场景。这种数据构造方式更贴近真实开发中AI辅助编程的形态。

LoRA(低秩适配) 是一种参数高效微调技术,它冻结预训练模型的大部分权重,只在每一层注入少量可训练的低秩矩阵。具体做法是将权重更新分解为两个小矩阵的乘积,使可训练参数量降到原来的千分之一量级。在本框架中,两个LoRA适配器分别在人写代码和机器写代码上训练,共享同一个冻结基座模型,因此能以较低成本获得两套「作者风格」的参数化表示。推理时对每个token分别计算两个适配器下的对数似然,其差值即构成该位置的局部证据。相比训练两个独立模型,双LoRA方案显存占用小、切换灵活,也便于在同一基座上做受控对比。

对数似然比 是统计假设检验中的经典量,等于「AI模型下该token概率的对数」减去「人类模型下该token概率的对数」。取正说明该token更符合AI生成分布,取负则更符合人类分布。用比值而非绝对概率的好处是:它对代码中高频token(如括号、关键字)的基准概率做了抵消,从而突出真正具有判别性的位置。多个token的似然比可以累加为行级或块级分数,这也是后续轻量预测头做多粒度聚合的数学基础。

实验表现:内部测试与外部基准

在内部测试集上,该方法在11,773个AI参与文件(涵盖六种生成模式)和2,541个人类文件上评估,在1%假阳性率(FPR)操作点达到72.4的宏F1。这一结果说明,在严格控制误报的前提下,模型仍能保持较高的综合检测能力。

更值得关注的是跨数据集泛化能力。在HybridCodeAuthorship这一外部人机协作基准上(该基准没有训练集),该方法无需任何适配即达到62.5的行级F1,超过了原论文报告的56的最佳行级结果。这表明token级证据具有较强的迁移性,不依赖特定数据集的训练。

在真实人类代码上的误报控制同样关键。研究者在2022年之前创建的仓库中选取了19,445个人类编写文件,在迁移的1%阈值下,假阳性率保持在0.55%到0.81%之间。这一结果说明,该操作点在真实人类代码上能够稳定保持,不会因域偏移而大幅波动。

宏F1(macro-F1) 是先分别计算每个类别(此处的「AI参与」与「人类编写」)的F1分数再取算术平均,因此对类别不平衡不敏感,不会被数量占优的一方主导。论文在1% FPR操作点报告72.4的宏F1,意味着在把人类代码误判为AI的比例压到1%的前提下,两类判别的综合调和平均仍达到72.4(百分制)。假阳性率(FPR) 指人类编写却被判为AI参与的比例,在代码溯源场景中它直接关系到对开发者的误指风险,因此业界普遍采用固定低FPR、再看召回或F1的评价方式。外部基准HybridCodeAuthorship没有训练集,属零样本迁移评估,其行级F1达到62.5,说明token级信号学到的是较通用的作者痕迹,而非对特定数据集的过拟合。

多粒度检测的意义与挑战

多粒度检测的价值在于,它不仅能回答“这份文件是否涉及AI”,还能指出“哪里涉及AI”。对于代码审查、学术诚信、开源许可证合规等场景,定位到具体行或块比文件级标记更有用。例如,在代码审查中,审查者可以重点关注AI参与的部分,提高效率;在学术作业中,教师可以更精确地判断学生是否过度依赖AI。

然而,该方法也存在局限。首先,它依赖一个冻结的代码语言模型和两个适配器,训练和推理成本高于简单分类器。其次,token级似然比信号可能受到代码上下文和模型本身偏差的影响,对于某些编程语言或领域(如低资源语言)可能表现下降。此外,论文中的评估主要在Python等主流语言上进行,跨语言泛化仍需验证。

另一个挑战是AI修改与AI生成的区分。论文将“AI参与”定义为任何部分由模型生成或大幅修改,但实际中AI可能仅做微小重构(如重命名变量),这类修改的痕迹更弱,检测难度更大。论文的混合作者数据构造覆盖了续写和填充中间,但未明确讨论微修改场景。

未来方向与行业影响

这项研究为AI代码溯源提供了新思路:从全局分数转向局部证据,从单一粒度转向多粒度聚合。随着AI编程助手(如GitHub Copilot、Cursor)的普及,代码 authorship 的透明性将越来越受关注。多粒度检测框架有望集成到代码托管平台或CI/CD流程中,自动标记AI参与的部分,辅助开发者、审查者和合规团队。

未来工作可能包括:扩展到更多编程语言和领域;降低计算开销,使其适用于大规模代码库;结合其他信号(如编辑历史、提交模式)提升鲁棒性;以及探索对抗性场景,即开发者故意混淆AI生成痕迹的情况。

论文地址与代码尚未公开,但该框架的提出无疑推动了AI代码检测从“文件级二分类”向“细粒度定位”的演进。对于关注AI编程工具治理的研究者和工程师,这一方向值得持续跟踪。

#AI代码检测#多粒度定位#token级建模#LoRA适配器#代码溯源#AI参与代码#混合作者文件
分享:

相关推荐