Dream在SemEval-2026任务13中的方案:面向单次机器生成代码检测的SALSA方法
摘要
本文介绍了SALSA,一种单次自回归大语言模型结构化分类方法,用于检测机器生成代码,在SemEval-2026任务13中实现了强大的OOD泛化能力。
arXiv:2606.25102v1 公告类型:新
摘要:大型语言模型已经改变了代码生成,引发了对作者身份、评估诚信和软件信任的担忧。SemEval-2026任务13的子任务A将检测操作化为对代码片段的二元分类,特别强调在未见过的编程语言和应用领域上的分布外(OOD)泛化。我们提出了一种SALSA风格的公式,即单次自回归大语言模型结构化分类(Single-pass Autoregressive LLM Structured Classification),该方法将每个类别映射到一个专用的输出token,并训练模型在结构化响应中发出单一token标签。这种公式不是设计手工特征或决策规则,而是将作者身份决策委托给模型。为了提高OOD鲁棒性,我们结合了跨语言的平衡采样、参数高效微调和保守训练(低学习率、单周期),以避免过度适应训练领域。我们的最佳系统在官方排行榜上取得了OOD $F_1 = 0.789$的成绩,大幅优于CodeBERT基线($F_1 = 0.305$)。
查看缓存全文
缓存时间: 2026/06/25 05:09
# 用于单遍机器生成代码检测的 SALSA 来源:https://arxiv.org/html/2606.25102 ## Dream 团队在 SemEval-2026 任务 13 中的成果:用于单遍机器生成代码检测的 SALSA Shai Nahum-Gefen Dream Security Ltd. 以色列,特拉维夫 [email protected] Elad Ben-Zaken Dream Security Ltd. 以色列,特拉维夫 [email protected] ###### 摘要 大语言模型已经彻底改变了代码生成,但也引发了关于作者归属、评估诚信和软件信任的担忧。SemEval-2026 任务 13 子任务 A 将检测操作化为对代码片段的二分类问题,特别强调对未见过的编程语言和应用领域的分布外 (OOD) 泛化能力。我们提出了一种 SALSA 形式的公式化方法,即单遍自回归大语言模型结构化分类 (Single-pass Autoregressive LLM Structured Classification),该方法将每个类别映射到一个专用的输出令牌,并训练模型在结构化响应中发出一个*单令牌*标签。这种公式化方法不是设计手工特征或决策规则,而是将作者归属决策*委托*给模型本身。为了提高 OOD 鲁棒性,我们将跨语言的平衡采样与参数高效微调以及保守训练(低学习率、单周期)相结合,以避免对训练领域的过拟合。我们的最佳系统在官方排行榜上取得了 OOD F₁=0.789 的成绩,大幅优于 CodeBERT 基线(F₁=0.305)。 Dream 团队在 SemEval-2026 任务 13 中的成果:用于单遍机器生成代码检测的 SALSA Ruslan Berdichevsky Dream Security Ltd. 以色列,特拉维夫 [email protected] Shai Nahum-Gefen Dream Security Ltd. 以色列,特拉维夫 [email protected] Elad Ben-Zaken Dream Security Ltd. 以色列,特拉维夫 [email protected] ## 1 引言 参考标题 图 1:SALSA 分类流水线概述:结构化提示将每个类别映射到一个单令牌;一次 LLM 前向传播产生目标令牌位置的对数几率;提取类别令牌的对数几率,并通过 softmax 获得预测标签。 大语言模型 (LLM) 已经革新了代码生成,但这对于编程技能、伦理和评估诚信产生了重要影响,使得检测 LLM 生成的代码对于维护问责制和标准至关重要 (Orel 等, 2026b (https://arxiv.org/html/2606.25102#bib.bib18))。尽管已有关于机器生成代码检测的工作,但这些工作通常缺乏领域覆盖性和鲁棒性,并且通常只支持少量编程语言 (Orel 等, 2025b (https://arxiv.org/html/2606.25102#bib.bib15), a (https://arxiv.org/html/2606.25102#bib.bib16), 2026a (https://arxiv.org/html/2606.25102#bib.bib19))。SemEval-2026 任务 13 子任务 A 通过要求一个二元标签来指示代码片段是否为机器生成,提供了一个重要的测试平台。一个核心挑战是泛化到分布外 (OOD) 设置,因为实际检测器必须处理训练分布之外的未见场景。我们不是通过手工设计的特征或决策规则来解决问题,而是通过将任务指定为自然语言指令,将作者归属决策*委托*给模型本身,因为语言模型在使用任务描述进行提示时是强大的通用学习器 (Brown 等, 2020 (https://arxiv.org/html/2606.25102#bib.bib17))。然而,以这种方式使用 LLM 作为分类器通常是不稳定的:模型可能生成冗长的解释、不一致的标签格式或多令牌标签。SALSA¹¹¹我们的代码公开于 https://github.com/dreamgroupai-ai/SALSA.,即单遍自回归大语言模型结构化分类 (Berdichevsky 等, 2025 (https://arxiv.org/html/2606.25102#bib.bib2)),通过将每个类别映射到一个不同的输出令牌,并用清晰的分隔符和直接的作者归属问题来构建提示,从而将分类转化为可靠的条件性下一个令牌预测,从而解决了这个问题。 在微调过程中,模型同时学习任务对齐(遵循分类指令)和领域内专长(适应训练分布)。由于我们的主要目标是分布外 (OOD) 性能,我们将训练偏向于保留任务对齐和通用能力,而不是过拟合到源领域。为此,我们只运行一个周期,并根据验证集选择最佳检查点;先前的工作表明,较早的训练阶段倾向于改进通用特征,而后期阶段可能过度专门化到源领域,从而降低 OOD 性能 (Liu 和 Gurevych, 2024 (https://arxiv.org/html/2606.25102#bib.bib13))。我们还使用了低学习率,因为我们经验观察到,较大的学习率倾向于降低 OOD 性能,同时提高分布内指标。总之,这些选择使微调后的模型更接近基础模型,这有助于提高泛化能力。SALSA 在多种分类设置中表现出一致的效果,包括 GLUE 基准 (Wang 等, 2019 (https://arxiv.org/html/2606.25102#bib.bib24)) 和内容审核 (Sorensen 等, 2025 (https://arxiv.org/html/2606.25102#bib.bib25); Berdichevsky, 2025 (https://arxiv.org/html/2606.25102#bib.bib6));在这里我们将其应用于机器生成代码检测,并报告了强大的 OOD 性能 (F₁=0.789)。 ## 2 背景 子任务 A 是一个二分类设置:给定一个输入代码片段,系统预测 0(人类编写)或 1(机器生成)。该任务旨在对跨编程语言和应用场景的泛化能力进行压力测试:训练数据使用来自算法领域的 C++、Python 和 Java,而评估包括 (i) 已见语言与未见语言,以及 (ii) 已见领域与未见领域(研究/生产),总共产生四种设置。我们使用任务组织者发布的官方数据集分布。数据集提供了代码片段 (code)、二元标签 (label) 以及元数据,包括编程语言 (language)。子任务 A 发布的数据集大小为 500K 训练样本(238K 人类编写和 262K 机器生成)和 100K 验证样本,以及一个不提供标签或元数据的 500K 私有测试集。 ## 3 系统概述 ### 3.1 SALSA SALSA 将分类重新构建为在自回归 LLM 上的单令牌生成。每个类别映射到一个唯一的输出令牌,并且提示被结构化以在固定位置精确地引出该令牌。在推理时,一次前向传播就足够了:输出对数几率仅投影到类别令牌上,从而产生一个具有最小解码开销的高效分类器。图1 (https://arxiv.org/html/2606.25102#S1.F1) 说明了端到端流水线,图2 (https://arxiv.org/html/2606.25102#S3.F2) 显示了我们的任务的一个示例提示。 #### 类别到令牌映射。 对于子任务 A,我们使用标签令牌 "0" 和 "1"(在模型分词器下各自为一个令牌)。 #### 结构化提示。 我们将代码片段包裹在分隔符中,并询问模型代码是否为机器生成。我们要求答案以 #Number 的形式给出,其中 # 是 0 或 1。图2 (https://arxiv.org/html/2606.25102#S3.F2) 显示了用于该任务的提示结构。/no_think 标志和空的 block 在 Qwen3 中抑制了思维链推理,将输出保持在单个标签令牌 (Qwen Team, 2025 (https://arxiv.org/html/2606.25102#bib.bib21))。 <|begin_of_text|> <|im_start|> user /no_think Given the code: s = input() pal = s + s[::-1] print(pal) is the code machine generated? provide answer in format: #Number where the number is one of the following: 0 - No 1 - Yes <|im_end|> <|im_start|> assistant # <|im_end|> BOS token 任务 + 输入 类别映射 答案格式(带掩码令牌) 图 2:用于机器生成代码检测 (子任务 A) 的 SALSA 结构化提示示例。 ### 3.2 实现细节 #### 训练目标 我们通过仅监督助手响应中的标签令牌位置来实现 SALSA。具体地,使用因果语言建模目标训练模型,其中损失仅在标签令牌的最后出现处进行评估,因此梯度更新模型主要是为了改进目标类别的下一个令牌分布。 #### 参数高效微调 我们使用 LoRA (低秩适应) (Hu 等, 2022 (https://arxiv.org/html/2606.25102#bib.bib1)) 进行微调,以降低过拟合风险并加速训练。 #### 保守微调。 我们使用低学习率 (5×10⁻⁶),训练一个周期,并在验证集上选择最佳检查点。我们经验观察到,更激进的训练会降低 OOD 性能,同时提高分布内指标。特别是,训练超过一个周期会持续降低 OOD 泛化能力,这表明对源领域的过度暴露会导致模型过度专门化,损害其预训练表示。 #### 数据集划分。 表1 (https://arxiv.org/html/2606.25102#S3.T1) 显示了训练集 (500K) 和验证集 (100K) 按语言和标签的细分。数据集严重偏向 Python,占所有样本的 91.5%,而 C++ 和 Java 合计占比不到 9%。标签分布总体上是平衡的(47.7% 人类 vs. 52.3% 机器生成),这种平衡在每个语言内部也得到保持;验证集的划分与训练比例非常接近。 表 1:按划分和编程语言的标签分布。 #### 平衡采样 如表1 (https://arxiv.org/html/2606.25102#S3.T1) 所示,训练集在编程语言上高度不平衡。为了防止主要语言主导,我们通过从每个 (语言, 标签) 组中采样相等数量的样本来平衡训练数据。每组抽取的样本数量由最小组的规模决定;样本不重复抽取,因此每个训练示例最多使用一次。这会丢弃大量的 Python 训练数据,这是一种刻意的权衡:保留 Python 的主导地位会使微调偏向于 Python 特定模式的领域内专长,而损害从预训练起点继承的任务对齐。在初步实验中,不平衡的分布产生了较弱的任务对齐(较低的 OOD F₁),与这一观点一致。 #### 推理 我们的推理遵循 SALSA 的受限对数几率投影原则:我们生成单个令牌,并仅读取模型针对类别令牌的对数概率。预测标签是两个目标令牌对数几率中的 argmax。我们通过将 LoRA 适配器合并到基础模型并使用 vLLM (Kwon 等, 2023 (https://arxiv.org/html/2606.25102#bib.bib22)) 高效计算 logprobs 来实现高吞吐量推理。 ## 4 实验设置 #### 配置。 我们使用 LoRA 适配器对 Qwen3-8B、Qwen3-32B 和 Qwen2.5-72B-Instruct (Qwen Team, 2024 (https://arxiv.org/html/2606.25102#bib.bib20)) 进行微调,并使用第3节 (https://arxiv.org/html/2606.25102#S3) 中描述的 SALSA 结构化提示。完整的超参数细节在附录A (https://arxiv.org/html/2606.25102#A1) 中提供。我们训练最多 1 个周期,选择具有最佳验证 F₁ 的检查点,并使用左截断到 8192 令牌,以保留提示末尾的标签令牌。 #### 指标。 我们报告宏平均 F₁。对于分布内性能,我们在挑战中描述的官方 Kaggle 验证划分上进行评估(在我们的实验中 F₁=0.996)。对于分布外性能,我们报告竞赛 OOD 测试在 Kaggle 排行榜上的 F₁(0.789)。 ## 5 结果 表2 (https://arxiv.org/html/2606.25102#S5.T2) 总结了我们的结果。官方 CodeBERT 基线得分为 0.305 OOD F₁。我们的最佳提交,使用 SALSA 微调的 Qwen2.5-72B-Instruct,达到了 0.789 的 OOD F₁,相对于基线和该模型的零样本上界 (0.449) 都有显著提升。 表 2:SemEval-2026 任务 13 子任务 A 的结果。CodeBERT 是组织者提供的基线。测试 F₁ 表示排行榜上的 OOD 得分。零样本使用未经微调的 SALSA 提示。† *注意:* 官方 Kaggle 提交由于检查点选择不佳,测试(OOD)F₁ 为 0.73;赛后消融实验将其提高到 0.76。 #### 零样本预测偏差。 表3 (https://arxiv.org/html/2606.25102#S5.T3) 中的精确度/召回率细分揭示了表2 (https://arxiv.org/html/2606.25102#S5.T2) 中的聚合 F₁ 分数掩盖了性质不同的失败模式。Qwen3-Next-80B-A3B-Instruct 是唯一一个具有平衡精确度和召回率 (0.707 / 0.638) 的零样本模型,而 Qwen3-32B 和 Qwen2.5-72B-Instruct 则强烈偏向于预测人类编写的代码,尽管精确度高,但召回率分别仅为 0.242 和 0.035。这种几乎完全无法检测机器生成代码的现象解释了 Qwen2.5-72B-Instruct 的验证/OOD 反转(验证 F₁=0.359 vs. OOD F₁=0.449):OOD 分布中机器生成的示例显然不那么占主导地位,因此模型的保守偏差受到的惩罚较小。这一细分也直接证明了我们的平衡采样策略的动机:一个默认预测“人类”的模型在偏斜分布上得分良好,但泛化能力差。附录C (https://arxiv.org/html/2606.25102#A3) 中的按语言细分显示验证集中没有强烈的语言层面偏差。 表 3:零样本验证性能。精确度/召回率分别表示机器生成类别的精确度和召回率;F₁ 是宏平均。高精确度/低召回率的不对称性表明偏向于预测人类编写的代码;按语言细分见附录C (https://arxiv.org/html/2606.25102#A3)。 #### 验证结果。 所有微调模型都达到了接近完美的验证 F₁:0.991 (8B)、0.994 (32B) 和 0.996 (72B),基本上与其训练集的 F₁ 相匹配。没有训练-验证差距表明在分布内拟合且没有过拟合。虽然绝对数值差异很小,但得分随模型大小单调增加,与 OOD 趋势一致。我们在训练中使用验证分数来选择检查点,但鉴于范围狭窄,不从中得出跨模型比较的强结论。扩展的验证错误分析见附录D (https://arxiv.org/html/2606.25102#A4)。 #### 微调效果。 值得注意的是,所有零样本模型已经优于 CodeBERT 基线 (0.305),得分在 0.359 到 0.672 之间,这表明通用 LLM 即使没有经过任务特定训练,也为此任务携带了有用的先验知识。使用 SALSA 进行微调对于较大的模型带来了显著的进一步增益,Qwen2.5-72B-Instruct 和 Qwen3-32B 相比其零样本对应版本都有明显提升。对于 Qwen3-8B,增益可以忽略不计,这表明仅靠微调对于此设置中的小模型是不够的。 ## 6 结论 我们将 SALSA 应用于 SemEval-2026 任务 13 子任务 A,使用 Qwen2.5-72B-Instruct 取得了 0.789 的 OOD F₁,在官方排行榜上名列前茅。SALSA 非常适合此任务:通过将输出空间减少到两个令牌,并通过结构化提示和微调将作者归属决策委托给模型,它产生了稳定、高效的分类。OOD 性能随模型规模单调提升,我们将其归因于大型
相似文章
@the_osps: Paper2Code使用多智能体LLM系统自动从机器学习论文生成代码。
Paper2Code是一个多智能体LLM系统,可自动从机器学习论文生成代码。
SALSA:通过学习的引导激活向量实现语音感知LLM的自适应
SALSA提出了一种轻量级自适应方法,用于语音感知的大语言模型,通过监督目标学习逐层引导向量,在域外语音基准上取得了显著改进(相对提升高达46.8%),并表明引导编码器层(尤其是较深层)比修改LLM主干更有效。
LLMSniffer:通过GraphCodeBERT和监督对比学习检测大模型生成代码
LLMSniffer是一个检测框架,通过监督对比学习微调GraphCodeBERT来区分AI生成的代码和人工编写的代码,在GPTSniffer和Whodunit基准测试上分别达到78%和94.65%的准确率。该方法通过结合代码结构感知嵌入、对比学习和注释移除预处理,解决了学术诚信和代码质量保证方面的关键挑战。
使用“经典”机器学习检测LLM生成的文本
一位开发者探索使用经典机器学习来检测LLM生成的网络小说,创建了一个开源演示和模型,单句准确率约为85%。
SLAM:面向语言模型的结构语言激活标记
SLAM 是一种新颖的白盒水印方案,利用稀疏自编码器将标记嵌入 LLM 残差流的结构几何中,在 Gemma-2 模型上实现了 100% 的检测准确率,且质量损失极小,避免了先前方法对 token 分布的偏置。