代码智能利用机器学习技术从大量代码语料库中提取知识,目的是开发智能工具来提高计算机编程的质量和生产力。目前,已有一个蓬勃发展的研究社区专注于代码智能,其工作涉及软件工程、机器学习、数据挖掘、自然语言处理和编程语言。在这篇论文中,我们对代码智能中的深度学习进行了全面的文献综述,从代码表示学习、深度学习技术和应用任务等方面进行了探讨我们还为代码智能的几种最先进的神经模型进行了基准测试,并提供了一个开源工具包,专门用于深度学习驱动的代码智能模型的快速原型制作。特别是,我们基于代码表示学习检查现有的代码智能模型,并提供了全面的概述,以增强对代码智能当前状态的理解。此外,我们还公开发布了源代码和数据资源,为社区提供了一个现成的基准,可以促进现有和未来代码智能模型的评估和比较(https://xcodemind.github.io)。最后,我们还指出了未来研究的几个具有挑战性和前景的方向。

1 引言

软件正在吞噬世界【14】。随着人工智能(AI)的进步,是时候扩展这一格言了:软件吞噬了世界,而AI正在吞噬软件。由于软件主要由代码构成,我们将新兴的代码智能概念定义为应用机器学习技术从大规模代码仓库中提取知识,目的是开发智能工具来提高计算机编程的质量和生产力【159】。这一概念得到了源代码这一不断扩大的储备的推动,通常被称为“大代码”【6】,它从GitHub【1】和StackOverflow【2】等平台收集而来。在这篇论文中,我们的研究范围限定在代码智能上,特别关注深度学习技术的应用。实现代码智能需要在软件工程、机器学习、自然语言处理(NLP)、编程语言和安全等领域的研究中实现协同合作。从我们的调查中,精确可靠的代码表示学习或代码嵌入,旨在高效有效地将源代码的语义编码到分布式向量表示中,是代码智能的基础。这样的嵌入向量然后用于许多下游任务,例如代码补全【117, 149, 197, 222】、代码搜索【77, 106, 234】、代码总结【10, 103, 107, 237, 284】、类型推断【7, 98, 188, 253】等。在代码嵌入方面,通过采用深度学习和NLP技术对源代码进行编码,已经取得了显著的进步。

类似于NLP中的word2vec【166】,Alon等人【13】提出了code2vec,一种基于从代码的抽象语法树(AST)中提取的路径集合的代码分布式表示。近年来,为特定任务量身定制的多种神经网络已被提出并使用监督方法进行训练。随着预训练语言模型(例如BERT【60】和GPT-3【26】)在NLP中的广泛应用,许多针对代码的预训练语言模型也被提出【66, 83, 115】,以更好地表示代码的语义。最近,大型语言模型(LLMs)的出现,如ChatGPT所示,为预训练语言模型的进一步发展照亮了道路,一个显著的趋势是模型大小的增加。这一趋势已扩展到代码智能领域,导致开发了多种针对代码的LLMs,包括但不限于CodeT5【246】、StarCoder【130】和Code Llama【198】。 在这篇论文中,我们通过代码表示学习、深度学习方法及其应用的视角来审视代码智能。相关调查及差异。在我们的文献综述中,我们确定了几项与我们相关的调查。值得注意的是,Allamanis等人【6】对机器学习方法用于模拟编程语言的自然性进行了详尽的考察。他们主要强调机器学习算法,特别关注基于概率模型的算法,而不是基于深度学习的算法。最近,Watson等人【249】、Wang等人【241】和Yang等人【269】对软件工程研究中深度学习应用的文献进行了彻底的审查。他们主要调查了软件工程和人工智能会议和期刊,重点关注基于深度学习的各种软件工程任务(不仅限于源代码)。【59】是一份报告,总结了深度学习和软件工程交叉领域当前研究的现状,并提出了一些未来的发展方向。在【159】中,作者建立了一个名为CodeXGLUE的代码表示和生成的基准数据集。此外,还展示了基于预训练语言模型(即CodeBERT)的几个基准结果。

表1总结了我们的论文与代码智能领域几篇相关综述的差异。与【6】聚焦于传统机器学习方法不同,本文更强调利用深度学习技术进行代码智能研究。与【249】【241】【269】和【59】涵盖广泛软件工程的各种任务不同,我们的研究将重点缩小到与源代码相关的任务,并从深度学习的角度对其进行具体考察。此外,我们调查了包括软件工程、编程语言、机器学习、NLP和安全等多个领域的论文。请注意,由于基于深度学习的代码智能是一个新兴且活跃的研究课题,我们还包括了一些在arXiv上公开但未发表的高质量论文。这是因为这些在arXiv上的未发表作品可以被视为未来研究的指标。此外,现有的综述并未提供全面的基准评估结果,也未开发用于促进进一步研究的开源工具包。本文通过提出一个名为NaturalCC(代表自然代码理解的标准)【233】的开源工具包来弥补这一空白。该工具包旨在简化代码智能模型的原型设计,并作为评估各种最先进模型的基准平台。与旨在建立代码理解和生成基准数据集的CodeXGLUE【159】相辅相成,特别是利用预训练代码模型,我们的重点在于构建支持多样化模型实现的基础设施,并为用户提供快速原型设计的能力。与CodeXGLUE相比,我们的工具包包含了更广泛的工具,设计用于构建代码智能模型的整个流程,提供了更高的灵活性。我们的贡献。本文面向对代码智能与深度学习交叉领域感兴趣的研究人员和从业者,特别强调智能软件工程、NLP和编程语言。在这篇论文中,我们首先提供了对代码智能领域深度学习现有研究的全面回顾。随后,我们通过开发一个名为NaturalCC的开源工具包来推进我们的贡献,该工具包整合了不同下游任务中的多种最先进模型。利用NaturalCC,我们对每个模型在代码总结、代码搜索、代码补全和类型推断等4个下游任务上的综合性能进行了基准测试。 本文的主要贡献总结如下。 • 我们对代码智能领域的深度学习进行了全面回顾。具体来说,我们收集了来自多个顶级会议和arXiv的269篇论文,涵盖了包括软件工程、人工智能、NLP、编程语言和安全等多个领域。 •** 我们对13个领先模型在四个不同任务(即代码总结、代码搜索、代码补全和类型推断)上的性能进行了基准测试**。所有资源、数据集和源代码均可公开获取。1 • 我们介绍了NaturalCC,一个集成了不同任务上多个最先进基线的开源工具包,以促进代码智能领域的研究。软件工程、NLP和其他领域的研究人员可以利用该工具包进行快速原型设计和复现。

我们提出在本文中从代码表示学习的角度总结现有基于深度学习的代码智能方法。如图1所示,对于代码表示学习,研究人员首先提取可能描述代码语义的特征,然后设计各种神经网络将它们编码为分布式向量。代码表示学习可以被视为不同下游应用的基础。根据每个应用的特点,下游应用可以分为三组: (1)基于分类的。在这些任务中(例如,代码分类、漏洞检测和类型推断),分类器层(例如,softmax)用于将代码嵌入映射到标签/类别。 (2)基于相似性的。在这些任务中(例如,代码搜索和代码克隆检测),常采用Siamese神经网络结构【47】,其中双重编码器用于将源代码和自然语言查询编码为嵌入向量。基于代码和查询的两个嵌入,总是使用约束(例如三元损失函数)来规范它们之间的相似性。值得注意的是,在代码搜索和代码克隆检测的几种方法中,代码和查询的两个嵌入也被连接起来,并将任务重新构想为分类任务,以确定代码和查询是否相关【66】。 (3)基于生成的。在这些任务中(例如,代码补全、代码总结、程序翻译、程序合成和程序修复),目标是从给定的代码片段生成源代码、自然语言描述或另一种编程语言的程序。这些任务通常遵循编码器-解码器范式,其中编码器网络用于表示代码的语义,解码器网络(例如,RNN)设计用于生成序列,例如自然语言描述或源代码。此外,我们将学习范式分为四组:监督学习、无监督学习、自监着学习和强化学习。

分类体系结构

图3展示了我们在本文中调查的基于深度学习的代码智能领域当前研究的分类。根据我们的观察,这个领域的研究可以分解为三个不同的方面:即代码特征、深度学习技术和应用。 (1)代码特征。作为基于深度学习的代码智能的基础,代码表示旨在将源代码表示为分布式向量。我们根据它们使用的输入代码的特征对当前的代码表示方法进行分类,如代码标记、中间表示(IRs)、应用程序编程接口(APIs)、抽象语法树(ASTs)和代码图(例如,描绘控制流和数据流的图)。 (2)在深度学习技术领域,我们首先深入研究了各种类型的神经网络,即RNNs、CNNs、Transformers和GNNs。随后,我们检查了用于模拟源代码的多样化学习范式,即监督学习、无监督学习、自监着学习和强化学习。 (3)我们研究了基于代码表示和深度学习技术的多种下游应用,包括代码分类、漏洞检测和bug查找、类型推断、代码搜索、代码克隆检测、代码补全、代码总结、程序翻译、程序合成和程序修复。

基准

尽管在深度学习的代码智能方面取得了显著进展,但仍有两个限制阻碍了这一领域的发展。 (1)缺乏标准化实现以复现结果。由于对数据和超参数调优的敏感性,深度学习模型难以复现已成为一个普遍问题。从我们的调查中发现,大多数模型是独立实现的,使用不同的工具包(例如,PyTorch和TensorFlow)。需要一个统一的框架,使开发者能够通过利用一些共享组件轻松评估他们的模型。实际上,在人工智能领域(例如,NLP和计算机视觉),已经开发了许多工具包,如Fairseq【181】、AllenNLP【72】、Detectron2【260】,这些工具包显著推动了各自研究领域的进展。

(2)缺乏公平比较的基准。目前,已经提出了许多方法,每种方法都声称比其他方法表现更好。为了确定性能提升来自何处,创建一个公平比较的基准至关重要。

基于这些动机,我们提出了NaturalCC(代表自然代码理解的标准),一个用于使用深度学习技术评估源代码模型的全面平台。在这个平台下,我们还对四个特定的应用任务进行了基准测试,包括代码总结、代码搜索、代码补全和类型推断。NaturalCC的实现和使用将在第5节中介绍。

结论

在这篇论文中,我们通过进行全面调查、建立基准以及开发开源工具包,研究了深度学习在代码智能方面的应用。我们首先从代码表示、深度学习技术、应用任务和公共数据集的角度提供了深入的文献综述。然后,我们介绍了一个名为NaturalCC的代码智能开源工具包。在NaturalCC的基础上,我们对代码智能的四个热门应用任务进行了基准测试,即代码总结、代码搜索、代码补全和类型推断。我们希望我们的研究有助于更好地理解代码智能的当前状态。我们也希望我们的工具包和基准能够促进更好的代码智能模型的发展。

成为VIP会员查看完整内容
50

相关内容

机器学习的一个分支,它基于试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的一系列算法。

知识荟萃

精品入门和进阶教程、论文和代码整理等

更多

查看相关VIP内容、论文、资讯等
《图持续学习》综述
专知会员服务
35+阅读 · 2月13日
《基础模型在现实世界机器人应用》综述
专知会员服务
43+阅读 · 2月11日
《文本到图像跨模态生成》一项系统性综述
专知会员服务
26+阅读 · 1月26日
【2023新书】基于模型的机器学习,428页pdf
专知会员服务
151+阅读 · 2023年11月14日
「拓扑深度学习」 最新2023研究综述 ,81页pdf
专知会员服务
73+阅读 · 2023年4月22日
最新《可解释人工智能》概述,50页ppt
专知会员服务
126+阅读 · 2021年3月17日
【干货书】可解释人工智能(xAI)方法和深度元学习模型
专知会员服务
54+阅读 · 2020年9月13日
基于深度神经网络的少样本学习综述
专知会员服务
166+阅读 · 2020年4月22日
【干货书】优化算法,232页pdf
专知
21+阅读 · 2022年9月8日
基于模型的强化学习综述
专知
17+阅读 · 2022年7月13日
基于深度学习的数据融合方法研究综述
专知
27+阅读 · 2020年12月10日
深度学习超参数搜索实用指南
云栖社区
28+阅读 · 2018年10月14日
国家自然科学基金
19+阅读 · 2015年12月31日
国家自然科学基金
0+阅读 · 2015年12月31日
国家自然科学基金
1+阅读 · 2015年12月31日
国家自然科学基金
19+阅读 · 2015年12月31日
国家自然科学基金
8+阅读 · 2015年12月31日
国家自然科学基金
8+阅读 · 2015年12月31日
国家自然科学基金
2+阅读 · 2015年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
1+阅读 · 2014年12月31日
国家自然科学基金
8+阅读 · 2014年12月31日
Arxiv
131+阅读 · 2023年4月20日
A Survey of Large Language Models
Arxiv
324+阅读 · 2023年3月31日
Arxiv
53+阅读 · 2023年3月26日
Arxiv
111+阅读 · 2023年3月24日
Arxiv
14+阅读 · 2023年3月17日
VIP会员
相关VIP内容
《图持续学习》综述
专知会员服务
35+阅读 · 2月13日
《基础模型在现实世界机器人应用》综述
专知会员服务
43+阅读 · 2月11日
《文本到图像跨模态生成》一项系统性综述
专知会员服务
26+阅读 · 1月26日
【2023新书】基于模型的机器学习,428页pdf
专知会员服务
151+阅读 · 2023年11月14日
「拓扑深度学习」 最新2023研究综述 ,81页pdf
专知会员服务
73+阅读 · 2023年4月22日
最新《可解释人工智能》概述,50页ppt
专知会员服务
126+阅读 · 2021年3月17日
【干货书】可解释人工智能(xAI)方法和深度元学习模型
专知会员服务
54+阅读 · 2020年9月13日
基于深度神经网络的少样本学习综述
专知会员服务
166+阅读 · 2020年4月22日
相关基金
国家自然科学基金
19+阅读 · 2015年12月31日
国家自然科学基金
0+阅读 · 2015年12月31日
国家自然科学基金
1+阅读 · 2015年12月31日
国家自然科学基金
19+阅读 · 2015年12月31日
国家自然科学基金
8+阅读 · 2015年12月31日
国家自然科学基金
8+阅读 · 2015年12月31日
国家自然科学基金
2+阅读 · 2015年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
1+阅读 · 2014年12月31日
国家自然科学基金
8+阅读 · 2014年12月31日
微信扫码咨询专知VIP会员