基于LSem2Vec的新方法:两步获取代码向量,无需昂贵训练

6 九月 202634 视图

研究人员提出了一种简单的源代码嵌入方法,结合了大型语言模型和文本嵌入模型。LSem2Vec方法无需针对任务进行微调,实验结果表明,它超越了五种现代无监督方法。

基于LSem2Vec的新方法:两步获取代码向量,无需昂贵训练

什么是代码嵌入

源代码的向量表示用于许多实际任务:从查找相似代码片段到按语义自动对函数进行分组。程序被转化为一组数字,机器学习算法可以处理这些数字。向量的质量取决于模型对代码语义的理解程度,而不仅仅是对其语法的理解。

难点在哪里

经典方法通常需要针对每个任务进行单独训练,或者至少需要在领域数据上进行微调。这成本高昂,而且并非总是合理。基于大型语言模型(LLM)的方法看起来更通用,但它们也有一个缺点:模型的回答中经常包含多余或错误的信息,这些“杂质”会进入向量中。

LSem2Vec 的思路

论文作者提出了一种两阶段方法,其名称很形象:LSem2Vec — LLM-extracted code Semantics to Vector embedding(LLM 提取的代码语义到向量嵌入)。他们没有尝试再训练一个重型模型,而是将现成的组件组合起来:LLM 从代码中提取其含义,而句子嵌入模型则将描述转换为向量。无需针对特定任务进行微调。

让我们逐步分析这个过程。在第一阶段,LLM 接收代码,并需要阐述这段代码具体做什么。这不是对源代码的机械复述,而是提取核心:模型会丢弃次要细节,使描述中只保留对语义重要的内容。同时,这种方法也能过滤掉大型模型可能的“幻觉”——即错误信息,这些错误信息通常出现在试图直接编码代码时。

第二阶段在机器学习领域看来非常简单:LLM 生成的描述被输入到句子嵌入模型中。这类模型已经经过训练,能够将自然语言转化为有意义的向量,因此无需针对编程语言语法进行适配。

为什么有效

LSem2Vec 的优势在于职责的清晰划分。一个模型负责理解逻辑,另一个负责将文本转换为向量。每个模型都能以最佳方式完成自己的任务,而它们结合在一起,生成的向量基于语义而非代码的形式特征。无需训练阶段,使该方法成本低廉且易于复现。

如何验证以及结果如何

实验在三个由不同编程语言构成的数据集上进行。作者有意更换 LLM 和嵌入模型,以确认结果不依赖于特定的工具组合。

在所有配置中,LSem2Vec 的表现都优于五种现代无监督方法,这些方法通常针对特定条件设计并需要调参。

工作状态

论文于 2024 年 9 月发布在 arXiv 上,最新可用版本为 2026 年 8 月的 v5。据作者称,该工作已被《Frontiers of Computer Science》期刊接收。这意味着该方法不仅有预印本页面,还有了经过同行评审的正式发表。原文可通过 DOI 查找:10.1007/s11704-026-61288-0。

总结

LSem2Vec 的主要结论是,复杂任务并不总是需要复杂的解决方案。只需依次使用 LLM 提取语义,再用句子嵌入模型生成向量即可。这种方法速度快、无需专门微调,并能取得有竞争力的结果。

常问问题

基于LSem2Vec的新方法:两步获取代码向量,无需昂贵训练