← 返回 PaperDaily 大模型与智能体

SemEval-2026新方法:单标记分类把代码检测提到0.789

这篇论文把“AI写没写代码”这件事,硬生生压成了一个单标记生成问题。看起来很朴素,结果却在OOD榜上拿到0.789,和基线0.305相比,差距有点像“会做题”和“连题目都看不懂”。

SemEval-2026新方法:单标记分类把代码检测提到0.789
🐉 龙哥读论文知识星球来了!
公众号每日8篇拆解不够看?星球无上限更AI领域论文、资讯、招聘、招博、开源代码,一站式干货,每日2分钟刷完即赚! 👇扫码加入「龙哥读论文」知识星球,前沿干货、实用资源一站式拿捏~ xingqiu_header

龙哥导读:
这篇论文把“AI写没写代码”这件事,硬生生压成了一个单标记生成问题。看起来很朴素,结果却在OOD榜上拿到0.789,和基线0.305相比,差距有点像“会做题”和“连题目都看不懂”。


原论文信息如下:
论文标题:
Dream at SemEval-2026 Task 13: SALSA for Single-Pass Machine-Generated Code Detection
发表日期: 2026年06月
发表单位: Dream Security Ltd.
原文链接: https://arxiv.org/pdf/2606.25102v1.pdf

SALSA方法:如何简化LLM分类为单标记生成

这篇论文最有意思的地方,不是又造了一个“更大更强”的模型,而是把一个看起来很像分类的问题,硬生生改写成了单标记生成。说人话就是:别让模型写作文,别让它绕圈子解释,直接逼它在两个 token 里二选一,干脆利落。
图1:SALSA分类流程总览
图1:SALSA分类流程总览。结构化提示会把每个类别映射到一个固定输出标记,模型只需前向传播一次,就能得到目标标记位置的 logits,再从两个类别标记里选概率更高的那个。
SALSA 是 Single-pass Autoregressive LLM Structured Classification,中文可以理解为“单次前向、自回归大模型结构化分类”。它的核心思路很朴素:把“这段代码是不是机器生成的”这个问题,改造成一个只输出 0 或 1 的受限生成任务。这样做的好处也很直接,模型不会一边分类一边胡乱展开,更不会输出一大段看似聪明、实则没用的解释。
这套方法的关键,不是“让模型想得更复杂”,而是“让输出更规矩”。论文把标签直接绑定到单个 token 上,再用结构化提示词把答案位置固定住。这样一来,分类就变成了下一 token 预测问题,推理时只需要一次前向传播,速度和工程稳定性都比那种“先生成一段废话再从中抠答案”的做法靠谱得多。
图2:用于机器生成代码检测的SALSA结构化提示示例
图2:用于机器生成代码检测的SALSA结构化提示示例。提示词把代码包在明确的分隔符里,并要求模型只在 标签中输出 0 或 1;同时通过 /no_think 和空的 块压制长篇推理,避免模型“话太多”。
这里的工程味很浓。传统分类器通常要么自己学一个分类头,要么在编码器上接一层线性分类器;SALSA 则更像是把大模型原本擅长的“补全下一个词”能力,直接拧成了分类器。它没有发明新的损失函数,也没有堆奇怪的后处理规则,而是把任务表达方式改了。很多时候,模型不是不会分类,只是被喂得太别扭。
论文还强调了一个很实在的点:只监督答案位置。也就是说,训练时只在最终标签 token 的位置计算损失,模型学到的是“在这个位置该吐出哪个标签”,而不是把整段回答都学成八股文。这种做法对分类任务尤其友好,因为分类的本质本来就不是写长答案,而是做一个稳定的决策。

保守微调策略:低学习率与单轮训练如何提升OOD泛化

这篇工作真正聪明的地方,不在于“把模型训到满分”,而在于知道什么时候该刹车。论文明确采用了低学习率单轮训练和验证集选 checkpoint 的保守策略,目的只有一个:别把预训练模型本来就有的通用能力,训成训练集专属记忆。
这里的背景很重要。SemEval-2026 Task 13 的重点不是普通的“训练集内谁更强”,而是OOD,也就是 Out-of-Distribution,中文叫“分布外泛化”。通俗点说,模型不是只在见过的语言、见过的场景里认人,而是要在没见过的编程语言和应用域里也能认出“这段代码是不是机器写的”。这就像让一个学生不只会做练习册上的题,还得能做陌生卷子。
论文引用了前人的观察:训练太久、步子迈太大,往往会让模型越来越贴训练域,反而把 OOD 能力磨没了。于是这里没有“训到天荒地老”,只有“点到为止”。学习率被压到 5×10-6,LoRA 只做参数高效微调,训练最多一轮,再根据验证集挑最好的 checkpoint。这个组合看似保守,实际上很符合任务本质:既要让模型学会任务格式,又不能把底层表示能力训坏。
LoRALow-Rank Adaptation,中文是“低秩适配”。它的作用不是重训整个大模型,而是在少量可训练参数上做增量适配,既省显存,也更不容易把模型训歪。对大模型微调来说,这几乎是标准答案:成本低,风险也相对可控。
论文还做了一个很关键的动作:按语言与标签做均衡采样。因为训练集里 Python 占了绝对大头,如果不处理,模型很容易学成“Python 识别器”,而不是“机器生成代码识别器”。这就像班里某一科作业特别多,老师却指望学生综合发展,结果大概率是偏科严重。
表1:按数据划分和编程语言统计的标签分布
表1:按数据划分和编程语言统计的标签分布。训练集和验证集都明显偏向 Python,但标签整体相对平衡;论文正是利用这个表,解释为什么需要均衡采样来避免多数语言主导微调方向。
这一步的代价也很明确:会丢掉大量 Python 数据。可论文的判断很务实——宁可少看一些重复的 Python 样本,也不要让模型在训练时被 Python 的模式绑架。对于追求 OOD 的任务,这种“主动舍弃一部分训练数据”的做法并不保守,反而是非常清醒。

实验结果:OOD F1=0.789,大幅超越CodeBERT基线

先看最硬的结果:官方 OOD 测试集上,最佳系统拿到 F1=0.789,而组织方给的 CodeBERT 基线只有 0.305。这个差距不是“略强一点”,而是已经到了“同一赛道,但像两个物种”的程度。
表2:SemEval-2026 Task 13 Subtask A 结果。CodeBERT 是官方基线;Zero-shot 表示不微调、直接套 SALSA 提示词;Tuned 则是加入微调后的结果。论文的最佳提交来自 Qwen2.5-72B-Instruct + SALSA,在 OOD 测试上达到 0.789。
更值得注意的是,零样本阶段几乎已经能看出大模型的底子。几种模型即使不微调,也普遍超过 CodeBERT,说明通用大模型在代码理解和风格识别上,先天就比老派编码器更有“经验值”。但零样本强,不等于任务上就够用,尤其面对分布外测试时,偏见会很快暴露。
从模型规模看,结果也很诚实:Qwen3-8B 微调后提升有限,Qwen3-32B 和 Qwen2.5-72B-Instruct 的提升更明显。这个现象说明,SALSA 不是“谁来都灵”的万能药,它还是吃模型底座的。底座越强、预训练知识越丰富,保守微调越容易把能力保留下来并转化成 OOD 表现。
论文里还给了一个很有意思的对比:Qwen2.5-72B-Instruct 的 zero-shot 表现并不算最强,但微调后却冲到了最佳。这个反差很说明问题——指令对齐强的模型,零样本更听话;而预训练知识更“杂实”的模型,在保守微调后更可能把底层能力转化为任务收益。简单说,前者像训练有素的员工,后者像底子厚的老手。
表3:零样本验证表现
表3:零样本验证表现。这里看的是机器生成类的 precision 和 recall。可以看到,部分模型 precision 不低,但 recall 低得离谱,说明它们很容易把很多机器生成代码直接判成“人写的”。
这张表是整篇论文最有“破案感”的地方之一。Qwen3-32B 和 Qwen2.5-72B-Instruct 在 zero-shot 下都表现出明显的“人类偏置”:precision 看着还行,recall 却很低,意思是模型很谨慎,谨慎到大量漏报机器生成代码。对于检测任务来说,这种偏置很危险,因为漏掉 AI 生成样本,比多报几个误伤样本更致命。
表5:500K记录的推理耗时
表5:在 2 张 B200 上处理 50 万条记录的墙钟时间。由于 SALSA 只做一次前向、只读一个标签位置的 logprob,推理速度相当干脆,8B 模型甚至能在不到一小时内跑完全量评估。
这也是 SALSA 很适合落地的一点:它不是那种实验室里看起来很美、上线后把 GPU 烧成暖手宝的方案。单标记输出意味着解码路径短,vLLM 又把推理吞吐做得比较稳,工程上更接近“能跑、好跑、跑得起”。

失败模式分析:零样本模型的偏见与微调后的提升

如果只看总分,很容易以为“模型都挺强”。但论文没有停在总分上,而是继续拆失败模式,这一点很加分。真正决定一个检测器能不能用的,往往不是它最好的时候,而是它最容易翻车的时候。
表6:Qwen3-32B验证集混淆矩阵
表6:Qwen3-32B 验证集混淆矩阵。整体已经接近“看不出错”的程度,但仍能看到一点点偏向预测 human 的倾向,这说明模型虽强,边界并非绝对平滑。
表7:Qwen3-32B按语言划分的验证表现
表7:Qwen3-32B 按语言划分的验证表现。Python 的错误率最低,C++ 和 Java 略高,说明尽管训练做了语言均衡采样,预训练阶段对 Python 的覆盖优势仍然会在细节上留下痕迹。
表8:Qwen3-32B按生成器划分的验证错误率
表8:Qwen3-32B 按生成器划分的验证错误率。最难识别的来源集中在 IBM Granite 系列和部分 CodeLlama、deepseek-coder 变体上,说明“机器生成代码”并不是铁板一块,不同生成器的风格差异会直接影响检测难度。
这里能看出一个很现实的问题:检测器不是在识别“AI 这个抽象概念”,而是在识别一堆具体模型留下的风格痕迹。生成器越像人、越少模板味,检测就越难;反过来,某些指令微调过的模型输出更规整,反而更容易被抓住。这也解释了为什么论文强调不同生成器的误差差异,而不是把所有 AI 代码混成一锅粥看。
微调后的提升并不只是“分数更高”这么简单,而是偏置被纠正了。零样本阶段模型常常过于保守,宁可把 AI 代码判成人类代码;经过 SALSA 和均衡采样后,模型更愿意在保持高 precision 的同时把 recall 拉起来。对于检测任务,这才是更健康的状态。

未来方向:改善任务指令对齐与支持MoE模型

这篇论文的结尾没有装腔作势地说“已经解决一切”,反而很克制地指出了下一步:继续提升任务指令对齐,同时探索 MoE 模型的微调支持。MoE 是 Mixture of Experts,中文常叫“混合专家模型”。它的计算和路由机制更复杂,当前实现没法直接照搬,所以未来还有工程空间。
从方法论上看,这篇工作真正值得借鉴的,不是某个单点技巧,而是它对“分类任务怎么喂给大模型”这件事给了一个可复用模板:结构化提示 + 单标记输出 + 保守微调 + 均衡采样。这套组合拳不一定适合所有任务,但对需要高吞吐、低解释噪声、强调分布外泛化的场景,确实很有参考价值。
如果把这篇论文放到实际业务里看,它更像一个“检测器设计范式”的小样板,而不是单纯刷榜工具。它告诉人们:当任务本身只需要二分类时,别急着把系统做得花里胡哨;让模型稳定地产生一个标签,往往比让它讲一堆道理更重要。这个道理听起来简单,做起来其实很考验工程克制。

龙迷三问

下面是龙哥对于大家可能的一些问题的解答:

这篇论文到底解决什么问题?它解决的是“如何稳定识别机器生成代码”这个二分类任务,重点不在训练集,而在没见过的语言和场景里还能不能认准。

SALSA 里的单标记生成是什么意思?就是把分类标签直接映射成单个 token,让模型只输出 0 或 1,不生成长篇解释;这样既快,又更容易控制输出格式。

为什么要均衡采样和保守微调?因为训练集里 Python 太多,模型很容易学偏;而 OOD 任务最怕过拟合,所以低学习率、单轮训练、LoRA 和均衡采样一起上,目的是尽量保住泛化能力。

如果你还有哪些想要了解的,欢迎在评论区留言或者讨论~

龙哥点评

论文创新性分数:★★★★☆ 不是发明全新模型,而是把分类任务重新表述成单标记生成,这个思路足够实用,也有方法论价值。

这种“改任务形式而不是硬堆模块”的做法,虽然不炫,但很有效。

实验合理度:★★★★☆ 对比清楚,OOD 结果也有说服力;不过更强的结论仍依赖具体模型和任务分布,不能把结果泛化得太满。

实验设计整体克制,尤其是对零样本偏置和语言分布的分析比较到位。

学术研究价值:★★★★☆ 对“如何让大模型做可靠分类”有启发,尤其适合需要稳定输出格式的任务。

它不是理论大突破,但对后续做结构化分类、OOD 检测很有参考意义。

稳定性:★★★★☆ 单标记输出和保守微调让系统更稳,至少比“生成一大段再抽答案”靠谱得多。

但稳定性仍受底座模型和数据分布影响,不是开箱即满血。

适应性以及泛化能力:★★★★☆ 在跨语言、跨域 OOD 上表现不错,说明方法确实抓住了泛化问题的关键。

不过它仍然很吃预训练底座,弱模型不一定能靠微调补回来。

硬件需求及成本:★★★☆☆ 训练用了 2 张 B200,72B 级模型并不便宜;好在推理路径短,实际部署压力比大多数长文本生成任务小。

对普通团队来说,成本不算低,但也不是那种离谱到完全碰不了的方案。

复现难度:★★★☆☆ 方法本身不复杂,但大模型权重、算力和任务数据都不是随手就能配齐的。

如果没有对应底座和显卡,复现会比较吃力。

产品化成熟度:★★★☆☆ 作为代码检测器的原型很有希望,尤其适合高吞吐场景;但面对新生成器、新语言时仍需持续校准。

离“全场景无脑上线”还有距离,适合做核心模块,不适合当唯一防线。

可能的问题:方法依赖强底座和特定提示格式,面对更隐蔽的生成器或更强分布漂移时,性能仍可能下滑;此外,72B 规模的成本也限制了普适部署。

论文写得扎实,但顶会级别还差一点“更普适、更独立”的味道。

主要参考文献

Ruslan Berdichevsky, Shai Nahum-Gefen, and Elad Ben Zaken. 2025. Salsa: Single-pass autoregressive LLM structured classification. arXiv preprint.
Daniil Orel, Dilshod Azizov, Indraneil Paul, Yuxia Wang, Iryna Gurevych, and Preslav Nakov. 2026. SemEval-2026 task 13: Detecting machine-generated code with multiple programming languages, generators, and application scenarios.
Edward J. Hu et al. 2022. LoRA: Low-rank adaptation of large language models.
Qwen Team. 2024. Qwen2.5 technical report. Qwen Team. 2025. Qwen3 technical report.

end
欢迎加入龙哥读论文粉丝群,扫描下方二维码或者添加龙哥助手微信号加群:kangjinlonghelper。一定要备注:研究方向+地点+学校/公司+昵称(如 图像处理+上海+清华+龙哥),根据格式备注,可更快被通过且邀请进群。
『龙哥读论文』微信群目前包含:图像处理、大模型及智能体、自动驾驶及机器人、AI医疗及AI金融5个群。
这篇论文讲的是“让模型只吐一个字就完成判断”。如果也想把读论文这件事压缩到最短路径,来群里一起拆。
wechat_helper dianzan
转发文章 微博 X LinkedIn Facebook
龙哥读论文 · PaperDaily

本文基于龙哥读论文 PaperDaily 数据库整理,结合论文原文与工程视角进行解读。