合成语义监督用于小型Transformer中的对比代码表示学习:一项实证研究

arXiv cs.AI 论文

摘要

本文通过实证研究了使用合成语义监督对小型Transformer中的代码嵌入进行对比预训练,结果显示相比基线有显著提升,并且与大型模型具有竞争力。

arXiv:2609.03702v1 公告类型:新 摘要:通用代码嵌入为代码搜索、分类和检索等工具提供动力。用于代码的紧凑型Transformer编码器通常依赖于人工编写的文档字符串(劳动密集且不一致)或挖掘的结构信号,如执行轨迹(特定于设置且收集成本高)。我们通过实证研究了一种替代方案:使用合成生成的自然语言描述对小型编码器进行对比预训练,强调代码的功能和意图,在双编码器框架中与代码配对用于训练,并在推理时丢弃。我们在C、C++和Java的八个检索、分类和生成任务上,将该方法与基于预训练的基线、通用LLM和嵌入专用模型进行基准测试。合成语义监督在五个任务上相比相同推理时间大小的预训练基线产生了统计显著的增益,在另外两个任务上达到同等水平;经过微调后,它在分类任务上匹配或超越了两个数量级更大的零样本模型,并且在匹配的预训练数据下与执行感知监督保持同等水平,这表明它是一种可扩展、有效的替代现有代码表示范式的方法。
查看原文
查看缓存全文

缓存时间: 2026/09/04 06:09

# 小型Transformer中对比代码表示学习的合成语义监督:一项实证研究
来源:https://arxiv.org/html/2609.03702

###### 摘要
通用代码嵌入驱动着代码搜索、分类和检索工具。面向代码的紧凑型Transformer编码器通常依赖于人工编写的文档字符串(劳动密集且不一致)或挖掘的结构信号(如执行轨迹,特定于场景且收集成本高昂)。我们通过实证研究了一种替代方案:通过合成生成的、强调代码功能和意图的自然语言描述,对小型编码器进行对比预训练,在训练时将这些描述与代码配对形成双编码器框架,而在推理时则丢弃这些描述。我们在C、C++和Java的八项检索、分类和生成任务上,将该方法与基于预训练的基线模型、通用LLM和专门的嵌入模型进行了基准测试。合成语义监督在五项任务中产生了相对于相同推理时规模预训练基线的统计显著提升,在另外两项任务上达到了同等水平;经过微调后,它在分类任务上匹配或超越了规模大两个数量级的零样本模型,并且在匹配的预训练数据下,它保持与执行感知监督相当的水平,这表明它是一种可扩展的、有效的替代现有代码表示范式的方案。

## 1 引言
参见标题图1:跨八项下游任务的比较。方法按范式分组(左侧带状区域)。单元格颜色表示其在每个面板和任务列中的排名:第一(深色)、第二(中等)、第三(浅色);仅评估了一种方法的列中的单元格未着色;破折号表示该方法未被评估。
(a) 与相同推理时规模的预训练基线相比,SyncDesc在八项任务中的五项上有显著提升,并在另外两项上达到统计上的同等水平(配对bootstrap检验见表2 (https://arxiv.org/html/2609.03702#A1.T2));ContraCode的排名带有跨语言迁移惩罚(JavaScript预训练;第3节 (https://arxiv.org/html/2609.03702#S3))。
(b) 针对每个任务进行微调后的SyncDesc,在算法检索和分类方面与零样本LLM规模模型相比仍具有竞争力。SyncDesc在单源/双源变体中表现最佳(变体细分类见附录B (https://arxiv.org/html/2609.03702#A2))。完整结果见附录A (https://arxiv.org/html/2609.03702#A1)。

近年来,越来越多的自动化工具被提出用于代码搜索、文档化、分析和编码辅助Microsoft [1] (https://arxiv.org/html/2609.03702#bib.bib1);Guo等 [2] (https://arxiv.org/html/2609.03702#bib.bib2);Huang等 [3] (https://arxiv.org/html/2609.03702#bib.bib3)。这些工具依赖于有效的代码表示:将人类编写的源代码转换为适合自动处理格式的抽象。111 代码、数据、生成的描述以及生成日志可在 https://zenodo.org/records/22130652 获取。一种常见的方法是使用从token序列或结构化程序元素学习到的嵌入Xie等 [4] (https://arxiv.org/html/2609.03702#bib.bib4)。虽然像GPT-4o miniOpenAI [26] (https://arxiv.org/html/2609.03702#bib.bib26)这样的大型语言模型可以生成此类嵌入,专门的嵌入LLM如NomicNussbaum等 [7] (https://arxiv.org/html/2609.03702#bib.bib7)也可以这样做,但它们的使用会带来高昂的计算和财务成本(例如API调用、基础设施),并且对于许多实际应用来说扩展性差。这一点尤其适用于*嵌入工作负载*(在大候选池上进行代码搜索、检索和克隆检测),其中对N个候选进行排序需要N个预计算的、相互可比较的向量,而不是每个查询N个提示,并且每个查询的API调用会增加延迟、速率限制和代码出口,而私有代码库通常禁止这些。提示式LLM保留了零样本泛化这一互补优势;我们针对的是前一类部署。相比之下,更小的、专门的Transformer模型已成为一种经济高效的替代方案,通过微调在目标编码任务上实现了强劲的性能Zeng等 [39] (https://arxiv.org/html/2609.03702#bib.bib39);Giagnorio等 [38] (https://arxiv.org/html/2609.03702#bib.bib38);Wang等 [42] (https://arxiv.org/html/2609.03702#bib.bib42)。

先前关于训练代码嵌入模型的工作通常分为两种范式。第一种是人工监督,使用手动编写的规范(例如文档字符串)作为监督信号来捕获程序语义,如UnixCoderGuo等 [2] (https://arxiv.org/html/2609.03702#bib.bib2)或CodeBERTFeng等 [6] (https://arxiv.org/html/2609.03702#bib.bib6)。虽然有效,但这种方法劳动密集,难以生成跨任务、语言或评估设置泛化的表示Li等 [21] (https://arxiv.org/html/2609.03702#bib.bib21)。此外,现有注释通常依赖于表面级的词汇或句法线索,仅间接接触语义意图Panthaplackel等 [22] (https://arxiv.org/html/2609.03702#bib.bib22),并且可能包含不一致或错误Siddiq等 [8] (https://arxiv.org/html/2609.03702#bib.bib8)。

第二种范式是结构监督,利用直接从代码中挖掘的动态或控制流信息(例如,跟踪、检测或程序分析),如TRACEDDing等 [5] (https://arxiv.org/html/2609.03702#bib.bib5)。虽然更自动化,但这些方法的收集成本可能很高,并且必须针对特定语言或场景进行调整。

近期工作也探索了代码的合成监督。例如,ContraCodeJain等 [43] (https://arxiv.org/html/2609.03702#bib.bib43)提出生成合成等效代码来预训练神经模型,而Qwen2.5-coder白皮书Qwen等 [44] (https://arxiv.org/html/2609.03702#bib.bib44)展示了使用合成数据预训练代码模型。这些工作主要关注合成等效代码,这限制了任务的多样性(即它们要求等价性),或者它们训练大型模型,这引发了相对于模型规模增长的收益问题。最后,它们主要关注通用代码生成任务,而不是面向下游理解任务的表示学习。

尽管方法众多,但在面向下游的代码任务方面,这些方法的评估和直接比较仍然很少。此外,虽然合成数据集已被证明对训练LLM有用,但对于较小的面向代码的Transformer模型,其应用仍待探索。

基于这一观察,我们提出问题:现有的代码嵌入方法表现如何?一种简单、可扩展的方法(使用合成语义描述和对比学习)能否产生与现有方法相媲美甚至超越的高质量代码嵌入?

在本文中,我们通过实证评估以下假设:使用合成语义描述的对比预训练可以产生代码嵌入,这些嵌入(1)优于传统的预训练基线,(2)在下游任务上匹配或超越更大模型的性能,(3)跨语言和任务泛化,同时保持计算效率。

为了验证这些假设,我们从文献中选择了几种基线方法,涵盖广泛的方法类别,即基于预训练的方法(TRACEDDing等 [5] (https://arxiv.org/html/2609.03702#bib.bib5),ContraCodeJain等 [43] (https://arxiv.org/html/2609.03702#bib.bib43)应用于小型基线Transformer UnixCoderGuo等 [2] (https://arxiv.org/html/2609.03702#bib.bib2)),大型通用模型(GPT-4oOpenAI [27] (https://arxiv.org/html/2609.03702#bib.bib27)),以及大型通用嵌入模型(NomicNussbaum等 [7] (https://arxiv.org/html/2609.03702#bib.bib7))。我们进一步提出了一种简单的方法,名为SyncDesc,它依赖于大规模合成的语义描述,与代码片段配对,形成用于双编码器对比目标Radford等 [9] (https://arxiv.org/html/2609.03702#bib.bib9)的对齐监督,利用了突出各自有效性的研究Qwen等 [44] (https://arxiv.org/html/2609.03702#bib.bib44);Guo等 [2] (https://arxiv.org/html/2609.03702#bib.bib2)。

SyncDesc最好被理解为轻量级的知识蒸馏:它通过生成的描述,将大型教师模型的语义提取能力转移到紧凑的编码器中,而不是引入新机制。在这方面,所比较的预训练范式没有一个是无信息的:TRACED注入了特权执行信息,ContraCode注入了编译器验证的等价性,而SyncDesc注入了教师模型的语义;本文回答的实证问题是,在固定推理时规模下,哪种外部信号在单位成本上最有效。

值得注意的是,经过微调的1.25亿参数学生模型在其教师被评估的那项任务上超越了其自身的教师(第3节 (https://arxiv.org/html/2609.03702#S3))。我们进一步进行了一项消融研究,隔离了SyncDesc的两个组成部分(合成语义描述和对比目标),与使用人工编写的文档字符串监督和非对比训练的变体进行比较,以量化每个部分对观测到的提升的贡献。

我们的结果表明,在五项任务中,使用合成语义描述进行对比预训练的模型,在相同推理时规模的预训练基线上有显著提升,在两项任务上达到同等水平,在漏洞检测任务上也达到同等或略低水平(表2 (https://arxiv.org/html/2609.03702#A1.T2))。在几项任务上,SyncDesc经过特定于任务的微调(零样本LLM缺乏此步骤),尽管使用的模型显著更小,但匹配或超越了更大的语言模型。一项消融研究证实,合成描述和对比学习对于这些提升都至关重要,优于使用人工文档字符串监督或非对比训练的嵌入。

这些发现表明,当与对比学习结合时,合成语义监督为代码表示学习提供了一种可扩展、有效且简单的替代现有范式的方案。

## 2 实验设置
### 2.1 比较的方法
在我们的实验中,我们考虑了两大类方法。第一类是使用不同预训练目标和任务的预训练Transformer。对于所有模型,我们使用UnixCoderGuo等 [2] (https://arxiv.org/html/2609.03702#bib.bib2)(1.25亿参数)作为基线模型。该模型使用标准目标(例如,掩码语言建模/去噪)和人工编写的文档字符串进行预训练。

第一种预训练方法是TRACEDDing等 [5] (https://arxiv.org/html/2609.03702#bib.bib5),这是一个在CodeNet轨迹上训练的执行感知基线。第二种是ContraCodeJain等 [43] (https://arxiv.org/html/2609.03702#bib.bib43),一种使用合成等效代码进行预训练的方法。最后,我们添加了我们自己的简单基线,称为SyncDesc(在下文中),它依赖于对比合成文档字符串,将在下一段详细说明。

第二类方法由LLM代表,包括通用闭源LLM(GPT-3.5-TurboOpenAI [25] (https://arxiv.org/html/2609.03702#bib.bib25),GPT-4o-miniOpenAI [26] (https://arxiv.org/html/2609.03702#bib.bib26),GPT-4oOpenAI [27] (https://arxiv.org/html/2609.03702#bib.bib27)和Claude 3变体Anthropic [24] (https://arxiv.org/html/2609.03702#bib.bib24))直接使用,或嵌入LLM,即专门为嵌入生成而微调的LLM(Nomic Embed Code (7B)Nussbaum等 [7] (https://arxiv.org/html/2609.03702#bib.bib7),Qwen3-Embedding-0.6BZhang等 [46] (https://arxiv.org/html/2609.03702#bib.bib46),OpenAI text-embedding-3-largeOpenAI [47] (https://arxiv.org/html/2609.03702#bib.bib47),Gemini Embedding 001Lee等 [48] (https://arxiv.org/html/2609.03702#bib.bib48))。作为进一步的参考点,我们还评估了一个直接用作嵌入器的生成式代码模型,未进行任何嵌入专门训练(DeepSeek Coder (6.7B)Guo等 [28] (https://arxiv.org/html/2609.03702#bib.bib28)),我们直接使用其池化的隐藏表示。

##### 提出的基线
提出的基线SyncDesc引入了一个简单的三阶段流程,用于使用对比学习学习代码表示。首先,使用大型语言模型(在我们的案例中是GPT-4o)为每个代码片段生成合成的自然语言描述,确保语义抽象并避免与源代码的词汇重叠。生成合成文档比重用现有文档字符串有几个优势。许多基准测试缺乏适当或一致的文档Siddiq等 [8] (https://arxiv.org/html/2609.03702#bib.bib8),自然的文档字符串常常缺失、不充分或与代码语义对齐较弱。此外,虽然使用LLM可能因幻觉而引入错误,但最近的研究表明,在某些情况下,大型语言模型可以生成与人工编写的文档相当或在语义上更一致的描述Dvivedi等 [11] (https://arxiv.org/html/2609.03702#bib.bib11)。

然后,这些代码-描述对被用于预训练一个双编码器架构,该架构包含一个代码编码器(UnixCoder)和一个描述编码器(DeBERTa模型He等 [12] (https://arxiv.org/html/2609.03702#bib.bib12)),并采用对称对比目标,其中表示在共享嵌入空间中对齐。为改进训练,组感知负样本掩码排除了来自同一问题组的配对充当负样本。最后,预训练后,仅保留代码编码器并重用于下游任务(如检索或微调),其固定维度的嵌入作为输入。

### 2.2 数据集和任务
##### 预训练数据集。
所有对比模型使用其专用流程进行预训练:(i)对于TRACED,我们使用其默认的C语料库,该语料库源自CodeNetPuri等 [16] (https://arxiv.org/html/2609.03702#bib.bib16),通过遵循TRACED的预处理流程构建,仅保留*唯一的静态代码实现*。具体来说,对应于同一源代码(在不同输入下生成)的多个执行轨迹被合并为单个代码实例,所有动态轨迹被丢弃。这导致大约1.8万个唯一的C代码样本(24,936个样本;18,266个唯一实现)用于预训练(等效地,Ding等 [5] (https://arxiv.org/html/2609.03702#bib.bib5)报道的约12.1万条执行轨迹,在合并来自同一源程序在不同输入下生成的轨迹并丢弃动态信息后,缩减为约1.8万条,因为我们的设置在静态代码而非轨迹级别操作),以及一个不相交的约1k样本的评估子集;(ii)对于ContraCode,我们在相同的UnixCoder骨架上应用了他们的自监督对比预训练流程(通过基于编译器的源到源转换生成语义等效的程序变体,并使用其实例判别或MoCo目标进行训练),使用CodeSearchNet JavaScript语料库(约180万方法)[于...发布]

相似文章

通过对比预训练的文本和代码嵌入

OpenAI Blog

# 通过对比预训练的文本和代码嵌入 源:[https://openai.com/index/text-and-code-embeddings-by-contrastive-pre-training/](https://openai.com/index/text-and-code-embeddings-by-contrastive-pre-training/) ## 摘要 文本嵌入是许多应用中的有用特征,例如语义搜索和计算文本相似性。以往的工作通常训练针对不同用例定制的模型,在数据集选择、训练目标和模型架构方面各不相同。在这

通过无监督学习改进语言理解

OpenAI Blog

OpenAI 提出了一种两阶段方法来改进语言理解:首先在大规模无监督数据集上使用语言建模对 transformer 模型进行预训练,然后在较小的有监督数据集上针对特定任务进行微调。该方法在包括常识推理、语义相似度和阅读理解在内的多种任务上取得了最先进的成果,同时需要的超参数调优工作最少。

基于Transformer的嵌入在主题连贯性中的比较研究

arXiv cs.CL

本文系统性地比较了在BERTopic流程中使用七种基于Transformer的语言模型时模型大小对主题质量的影响,发现模型大小对主题连贯性影响微乎其微,表明较小的模型可以达到与较大模型相当的性能。

基于LeJEPA自监督预训练的纯注意力白盒Transformer

arXiv cs.LG

本文提出了一种基于LeJEPA自监督预训练的纯注意力白盒Transformer,在CIFAR-10/100上取得了具有竞争力的准确率,同时与CRATE相比参数量减少约31%,并进一步展示了标准ViT中MLP的冗余性。