AI News HubLIVE
站内改写2 分钟阅读

CodeSpectra:轻松编码的幻象——为什么AI仍然需要努力

本文介绍了CodeSpectra,一个用于检测AI辅助代码抄袭的四阶段级联工具。它通过精确匹配哈希、盲归一化加最长公共子序列、抽象语法树片段加随机森林机器学习,以及语义相似性检测,逐步识别从直接复制到语义克隆的各种抄袭类型,特别针对AI生成代码的挑战。

来源Hacker News AI作者: sikandarejaz

AI编程助手彻底改变了游戏规则。一个曾经需要数小时复制并重写同学代码的学生,现在可以通过ChatGPT快速获得结构相同的解决方案,并因变量名不同而问心无愧地提交。传统的抄袭检测器将文件作为字符串进行比较,一旦重命名变量或改变循环风格,它们就会失效。为此,我们开发了CodeSpectra工具,采用四级级联检测技术,每级都旨在捕捉前一级遗漏的作弊手段。

“自动化应辅助教育者,而非取代他们的判断。”

CodeSpectra对每份学生提交的代码进行级联处理:每个阶段针对特定类别的抄袭进行优化。阶段之间不会重复检查已捕获的内容,因此即使面对大量学生,性能也能保持线性。所有四个阶段的结果会合并为一份针对每个学生的报告,包含最终相似度分数和扣分建议。

第一阶段:精确匹配哈希(类型1) 每个源文件首先去除注释和空白,然后使用MD5进行哈希。不同学生提交的哈希匹配立即标记为完全相同的克隆,无需进一步处理。这处理了最常见的情况:学生直接将文件发送给同学。我们采用了多语言正则表达式去除注释,并在哈希前进行空白标准化。该阶段时间复杂度为O(n),可扩展至数千份提交。对于此克隆类型,零误报。

第二阶段:盲归一化加最长公共子序列(类型2) 在精确匹配阶段之后,每个文件经历两个层次的标准化。友好标准化去除注释并折叠空白,同时保留标识符名称。盲标准化更进一步,将每个非关键字标识符替换为通用令牌(如VAR_0、VAR_1……),使得重命名的变量与原始变量无法区分。然后使用Python的SequenceMatcher(最长公共子序列)计算相似度。友好标准化后的原始相似度≥0.95提示类型1;盲标准化后的归一化相似度≥0.95提示类型2。

第三阶段:AST片段加随机森林机器学习(类型3) 这正是大多数检测器失效的地方,也是CodeSpectra的主要研究重点。类型3克隆是那些共享结构但语句被添加、删除或重排的片段。例如,学生重写排序函数,用临时变量交换,产生类型3克隆。

第四阶段:语义相似性(类型4) 这是最困难的问题:两个程序功能相同但语法完全不同。递归斐波那契和迭代斐波那契是类型4克隆。AI生成的解决方案和人为编写的相同任务解决方案也可能是类型4克隆。类型4检测器使用代码嵌入——程序语义的密集向量表示——并计算它们之间的余弦相似度。归一化相似度低于0.45(对于类型3来说差异太大)但嵌入相似度高的配对被标记为语义克隆。这在AI提交时代尤其相关,因为GPT生成的解决方案共享语义而非结构。