← 最新论文
🤖 AI

LSem2Vec: A Simple yet Effective Two-Stage Approach for Source Code Embedding

本文介绍了 LSem2Vec,这是一个简单且有效的两阶段框架,它结合了大语言模型的语义提取能力与句子嵌入模型,旨在生成鲁棒的源代码表示,且无需进行昂贵的特定任务训练或微调,其在多个数据集上的表现优于现有的无监督方法。

原作者: Zixiang Xian, Chenhui Cui, Rubing Huang, Chunrong Fang, Zhenyu Chen

发布于 2026-08-19
📖 1 分钟阅读☕ 轻松阅读

原作者: Zixiang Xian, Chenhui Cui, Rubing Huang, Chunrong Fang, Zhenyu Chen

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

在现代软件的广袤版图中,代码行是构建我们数字世界的砖块与灰浆。正如城市规划者需要了解街道和建筑的布局才能管理一座大都市一样,软件工程师需要理解代码的结构和含义,才能维护、改进并保障他们所构建系统的安全。该领域的一个关键挑战是识别两段代码在本质上是否在做相同的事情,即使它们在表面上看起来并不相同。这被称为寻找“克隆”(clones),它有助于开发者避免冗余并发现安全风险。多年来,计算机一直难以完成这项任务,因为它们往往会迷失在海量的文本中,或者在措辞发生变化时无法理解底层的逻辑。虽然近年来出现了强大的人工智能工具,能够阅读和编写代码,但使用这些工具来比较数千个文件已被证明是困难、昂贵且容易出错的,这通常是因为工具会被过长的代码所压垮,或者在被要求进行复杂判断时给出错误的答案。

研究团队现在推出了一种名为 LSEM2VEC 的新方法,它通过改变计算机“阅读”代码的方式解决了这些问题。该方法不再要求一个庞大的人工智能盯着两个长文件并决定它们是否相似——这种任务往往会导致混乱或错误——而是将这项工作分解为两个简单且易于管理的步骤。首先,系统使用大型语言模型充当“翻译官”,阅读一段代码并写出一个清晰的单句,以总结该代码的功能。这一步剥离了令人困惑的细节,只留下核心含义。然后,第二个专门的工具获取该摘要句,并将其转换为数学空间中的一个点,即“嵌入”(embedding)。通过将代码转化为这些点,计算机可以轻松测量它们之间的距离以查看其相似程度,而无需重新阅读原始的长篇文件。这个过程就像有一位图书管理员,他先为庞大图书馆里的每本书写下一句描述,然后根据这些描述对书籍进行分组,而不是为了寻找匹配项而去阅读每本书的每一页。

研究人员在包括 C 和 Java 在内的多种编程语言编写的三组不同代码集上测试了这种方法,并使用了几种不同的人工智能模型以确保结果的稳健性。他们将这种新方法与许多现有方法进行了对比,包括那些需要对标记数据进行大量训练的方法,以及那些试图直接使用人工智能进行比较的方法。结果令人瞩目:新方法表现得更加出色,始终能以更高的准确度找到代码克隆。在一次涉及 C 代码的测试中,该系统的准确率超过了 95%,显著超越了排名第二的方法。它在进行“聚类”(clustering,即把相似的代码归为一类)的任务中也表现得非常高效,其调整兰德指数(Adjusted Rand Index)达到了 0.99,甚至超过了那些经过人类监督训练的方法(后者得分为 0.90)。

这项工作的一个关键优势在于它不需要进行昂贵且耗时的特定数据集人工智能训练过程。传统方法通常需要成千上万个由人类标记的代码对示例来学习如何识别相似性,这既缓慢又昂贵。而这种新方法可以直接投入使用,利用人工智能模型现有的知识而无需额外训练。它还解决了一个主要的工程难题:模型的有限内存。大型语言模型一次只能处理一定量的文本;如果代码太长,模型就会崩溃或放弃。通过先对代码进行摘要处理,研究人员绕过了这个限制,使得系统能够处理以前无法分析的大型文件。此外,该方法更加高效,调用人工智能模型的次数大大减少,从而节省了时间和成本。

研究还探讨了不同的选择如何影响结果,例如使用不同类型的人工智能模型或从摘要中移除常见的“停用词”。他们发现,虽然具体的工具很重要,但整体方法在不同的配置下依然保持强劲。例如,使用更先进的人工智能模型来编写摘要确实能带来更好的结果,但即使是标准模型也表现得异常出色。研究人员还对结果进行了可视化处理,展示了由其方法生成的代码点形成了紧密、清晰的组群,而其他方法产生的簇则显得杂乱且重叠。这种清晰度表明,该系统真正理解了代码的含义,而不仅仅是在匹配表面的模式。

最终,这项研究为理解驱动我们世界的庞大代码海洋提供了一种实用且高效的方法。通过将复杂的代码比较任务简化为“摘要化”与“测量”这两个步骤,研究人员创造了一个既强大又易于使用的工具。它证明了我们并不总是需要构建更大、更复杂的模型来解决困难的问题;有时,更聪明地使用我们已有的工具就足以“见林木而非见树木”。这种方法可以帮助软件工程师清理他们的代码库、发现隐藏的安全漏洞,并更有效地组织他们的项目,而无需承担以往限制这些能力的沉重计算成本。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →