UCSC-NLP at SemEval-2026 Task 13: Multi-View Generalization and Diagnostic Analysis of Machine-Generated Code Detection
UCSC-NLP 团队通过 UniXcoder-base 的多视图微调框架实现了对机器生成代码的强二元检测,从而应对 SemEval-2026 第 13 项任务,同时证明了类别加权训练对于克服因严重数据不平衡导致的多类归因灾难性失效至关重要。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象你是一名教师,正试图批改一叠作业。你面临两大挑战:
- “谁写的?”测试:你能分辨出是学生自己写的文章,还是他们用了机器人代写吗?
- “哪个机器人?”测试:如果确实是机器人写的,你能准确判断出具体使用了哪个机器人模型(例如:机器人 A、机器人 B、机器人 C)吗?
本文介绍了一支来自加州大学圣克鲁兹分校(UC Santa Cruz)的团队,他们构建了一个系统来解决计算机代码领域的上述问题。他们参加了一项竞赛(SemEval-2026 第 13 项任务),以评估其系统检测 AI 生成代码的能力。
以下是他们如何应对这两大挑战的简明解释:
挑战一:“谁写的?”测试(二元检测)
问题:团队使用 Python、C++ 和 Java 编写的代码训练了他们的系统。但在测试时,他们让系统处理它从未见过的语言(如 Go 或 PHP)以及不同风格的代码(如研究论文或生产软件)。通常,AI 检测器在此处会失败,因为它们只是死记硬背特定的词汇或语言,而没有学会代码的“神韵”。
解决方案:“三镜头”相机
团队没有只让系统看一次代码,而是教导系统同时通过三个不同的镜头观察每一段代码:
- 原始镜头:按代码原本的样子进行观察。
- “蒙眼”镜头(去词化):想象把一句话中所有的人名、地名和数字替换为通用词,如“人物”、“地点”和“数字”。这迫使系统忽略具体的变量名(这些会因语言而异),转而关注逻辑结构。
- “混合”镜头:他们在代码片段中随机混入了一些纯英文文本。这教会了系统处理那些格式不完美、混乱的现实世界代码。
类比:这就像保安在检查背包。
- 旧方法:保安死记硬背“红色手提箱 = 坏”。如果你带了一个蓝色手提箱,他就会漏掉。
- 新方法:保安从三个角度查看手提箱:外部、内部(忽略品牌标志)以及混入了一些随机物品的版本。如果背包的结构在所有三个视角下都显得可疑,他们就会将其标记。
结果:效果出奇地好。即使代码是用新语言或新风格编写的,他们的系统也能以约 84.5% 的准确率正确将其识别为“人类”或"AI"。
挑战二:“哪个机器人?”测试(多类归因)
问题:这要困难得多。团队必须识别出是 10 种不同的 AI 模型中的哪一种写了代码。
- 数据偏差:想象一个有 500 名学生的班级。其中 442 名是人类,其余 58 名是机器人,但这 58 名机器人分布在 10 种不同的机器人类型中。有些机器人类型在班里只有 2 名学生。
- 陷阱:如果你基于这个班级训练一名教师,他们会学会一个非常简单的技巧:“如果我猜所有人都是‘人类’,我就能在 88% 的情况下猜对!”
- 失败:当团队尝试这样做时,系统获得了 88% 的“准确率”分数,但这是一种谎言。它完全忽略了机器人。它几乎 100% 的时间都无法识别少数类的机器人。这就像是一个金属探测器,虽然对一切东西都报警,但只对硬币报警,而忽略了所有的黄金。
解决方案:“加权分数”
为了解决这个问题,他们改变了游戏规则。他们告诉系统:“如果你猜对了‘人类’,你得 1 分。但如果你正确猜出了一个稀有机器人,你得 200 分。”
这迫使系统停止偷懒,真正学会识别稀有机器人。
结果:
- 之前:系统是一个“人类猜测者”,得分为 0.08(在寻找机器人方面表现极差)。
- 之后:有了新规则,系统识别特定机器人的能力跃升了 301%。它并没有变得完美,但它终于开始关注少数类,而不是忽略它们。
他们学到了什么?(“为什么”)
团队通过一种名为 t-SNE 的可视化技术,查看了系统“大脑”的内部,发现了一些有趣的现象:
- 任务 1(人类 vs. AI):“人类”代码和"AI"代码形成了两个截然不同、相互分离的岛屿。系统可以轻松地将它们区分开来。
- 任务 2(哪个 AI?):所有不同的 AI 模型(OpenAI、Meta、IBM 等)都挤在一起,形成了一大堆混乱的堆积物,并且与人类代码相互重叠。
为什么?
- 共享饮食:所有这些机器人都是在相同的互联网数据(GitHub、StackOverflow)上训练的,因此它们都学会了编写看起来非常相似的代码。
- 相同的架构:它们都使用相似的大脑结构(Transformer),因此它们的“笔迹”几乎完全相同。
- 数学就是数学:通常只有少数几种正确的方法可以解决编程问题,所以每个人(无论是人类还是机器人)最终都会写出相同的解决方案。
结论
- 我们能分辨代码是否由 AI 生成吗? 是的,即使语言发生变化,只要教导系统关注结构而非仅仅是词汇,我们就能非常准确地做到这一点。
- 我们能分辨出是哪个 AI 写的吗? 这极其困难。不同的 AI 如此相似,且数据如此不平衡,以至于标准方法会失效。你必须使用特殊的“加权”技巧来迫使系统关注稀有情况。
警告:作者指出,他们的系统并不完美。有时它会将非常简洁的人类程序员误判为 AI,或者将冗长的 AI 误判为人类。因此,他们说此工具绝不应单独用于做出改变人生的决定(例如解雇某人或让学生不及格);必须由人类对结果进行双重检查。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。