【论文通读】A Survey of Neural Code Intelligence: Paradigms, Advances and Beyond

news2024/11/17 12:24:20

A Survey of Neural Code Intelligence: Paradigms, Advances and Beyond

  • 前言
  • 摘要
  • 代码模型的发展
    • 神经语言建模
    • 代码预训练模型
    • 大型语言模型
  • 学习范式的转移
  • 数据集与评测基准
  • 跨领域协同
  • 应用与未来
  • 资源
  • 阅读总结

前言

神经代码智能利用深度学习理解、生成和优化代码,连接自然语言和编程语言,近年吸引了大量关注。本篇综述回顾了50多个模型、20多类任务和680多项工作,追溯了从RNN到LLM的范式转变,系统梳理了模型、任务、评测和应用的发展历程,从解决特定场景扩展到应对复杂现实挑战。
Paperhttps://arxiv.org/abs/2403.14734
Githubhttps://github.com/QiushiSun/NCISurvey

摘要

神经代码智能(Neural Code Intelligence,NCI)指的是采用深度学习技术以理解、生成及优化计算机代码,该技术正日益显示其在人工智能领域内的革命性影响。作为连接自然语言编程语言的桥梁,这一领域无论在学术论文发表还是实际应用方面,近年来都已显著引起了学术界与工业界的广泛关注。本综述论文依照时间线对代码智能领域的发展进行了系统的梳理,涵盖了超过50种主要模型及其变体、20多种代码相关任务,以及超过680项的相关研究。文章按照历史进程,追溯了各个研究阶段的主要范式转变,例如从利用循环神经网络(RNN)模型代码到大语言模型(LLM)的转变。同时,论文还从模型构建、任务类型、评估方法及实际应用等方面,细致分析了各阶段的学术和技术演变。在应用层面,代码智能从最初专注解决特定场景的尝试,经过一个探索多样化任务的快速扩展期,至今已逐渐转向应对现实世界中日益复杂和多样的挑战。
从RNN/CNN到大模型:代码智能发展历程中的重要标志

代码模型的发展

当前代码模型的发展可以分为三个阶段,横跨了:

  • 神经语言建模(Neural Language Modeling)时代
  • 代码预训练模型时代(CodePTMs)
  • 大型语言模型(LLMs)时代

下面分别对这三个发展阶段进行介绍。

神经语言建模

神经语言建模时期见证了深度学习来处理code的最早期尝试。在此阶段,开发的方法主要采用了成熟的循环神经网络(RNN)或卷积神经网络(CNN)来建模代码。具体来说,这些方法不仅处理代码的文本信息,还包括了代码的结构元素,如抽象语法树(AST)、数据流(Data Flow)和控制流(Control Flow)的提取与整合过程,这一发展与语义解析(Semantic Parsing)密切相关。此外,由于代码段能够被转换为连续的向量表示,因此该时期发展的技术也称为代码嵌入(Code Embeddings)。其中,最具代表性的技术如code2vec和code2seq,通过将AST中的路径嵌入到向量空间中,有效捕捉了代码的语义和结构特征,使得神经网络方法能够被广泛应用于多种代码相关的场景。

代码预训练模型

继预训练语言模型(Pre-trained Language Models, PLMs)在自然语言处理(NLP)领域取得显著成就后,研究者们迅速采纳这些架构以用于代码建模,催生了如CodeBERT和CodeT5等代表性的代码预训练模型(Code Pre-trained Models, CodePTMs)的蓬勃发展。这一阶段标志着代码智能领域中一个以预训练加微调策略为核心的繁荣时期。这些模型不仅继承了前一时代采用代码结构进行建模的传统,还引入了Transformer架构,显著增强了模型对代码表征学习的能力。

大型语言模型

继GPT-3和PaLM等通用大型语言模型(LLMs)在学术界和工业界取得极大成功后,以Codex、CodeGen和StarCoder为代表的代码专用大模型(CodeLLMs)再次激发了研究热潮。这一阶段标志了学习策略从任务特定的微调转向基于提示的学习(prompt learning)和上下文内学习(in-context learning)。同时,代码智能的应用也从局限于代码相关任务扩展到更广泛的现实世界应用场景,如逻辑推理、数学问题解决及协助解决传统自然语言处理任务。这些进展显示了代码智能技术在多领域的实用性和灵活性。

结合上述讨论,本文将不同时代、不同架构以及不同来源的代码模型之间的关系整理在下图中,供研究者使用:
代码模型的进化历程

学习范式的转移

在代码智能的模型发展过程中,其学习范式与自然语言处理领域经历了类似的转变。这一演进从最初利用神经网络方法对单一任务或场景进行建模开始,随后进入了预训练和任务特定微调阶段,允许一个模型处理多种任务。最终发展至大模型时代,以基于提示的学习(prompt learning)为主导的学习方式。
此外,这种范式的转变还使得代码智能的应用场景从传统的代码相关任务扩展到了更广阔的领域,包括数值推理、符号推理和信息抽取等经典的自然语言处理任务。这些变化不仅增强了模型的通用性,还拓展了其在实际应用中的潜力和影响。
代码学习的范式转移

数据集与评测基准

除了模型架构上的特征外,本文还系统性地回顾了以CodeSearchNet 和 The Stack 为代表的用于构建代码模型所使用的预料及其特性。
语料库概览与The Stack编程语言数据分布
在评测上,本文也详细回顾了克隆检测、缺陷检测、代码翻译/修复以及代码生成等若干场景下的常见评测基准,并在文中对所有现有benchmarks进行了汇总和归类整理。此外,还展示了一些代表性模型的不同版本在生成代码时的性能表现(如下图所示),并就其进行了详细讨论。
代表性CodeLLMs性能

跨领域协同

除了针对代码生成等常见代码任务,本文还就跨领域场景:代码辅助推理、代码训练与数学能力以及代码智能解决NLP任务等角度进行了深入的讨论。并得出了以下收获:

  1. 将代码生成和Symbolic Solver与LLM Reasoning相结合,代表了解决数值任务的一次颠覆性转变。通过以可执行代码替代自然语言作为推理媒介,不仅克服了长期存在的计算限制,还增强了模型的解释性和泛化能力。
  2. 尽管理论基础尚未建立,但我们已经可以经验主义地认为:代码训练可以增强LLMs数学能力。这一点也在逐渐被学术界接受。
  3. 采用代码作为中间表示,可以显著提高解决以信息抽取为代表的经典NLP任务的效率。跨越传统的以文本为核心的建模思想,code-centric的方法通过构建统一的模式,可以有效应对复杂和多样化的输入与输出形式。

应用与未来

除了上述research角度的讨论,这篇综述还详尽地讨论了代码智能在其它四个领域的应用:

  1. 软件工程:如编程助手,自动化软件开发等。
  2. 数据驱动决策:Text2SQL和数据科学。
  3. 智能体:机器人控制与自动化。
  4. AI4Science:辅助分子式生成和自动定理证明。

在此之后,本文分别从模型、评测、应用、高效化和跨领域等方面,抛出了若干值得研究的方向。

资源

除了论文本身外,本文的作者们还维护了一个GitHub项目,其中包含了若干份精心整理的Reading lists,Tutorials,博客以及本文所使用到的资源,并且将长期维护
Reading Lists

阅读总结

这篇综述对代码智能的整个进化轨迹进行了系统行的回归,从深度神经网络在代码上的初次尝试,到LLM时代取得的突破性进展。在这个过程中,作者探讨不同时期的关联,围绕模型、任务和应用的范式转变进行了详细的讨论和分析。此外,作者还探索了代码学习和机器智能等方面的协同作用,以及在现实世界中的应用。最后,作者确定了代码智能未来研究的几个有希望的方向,并预见了该领域会随着语言模型的进步,从而继续蓬勃发展。
全文逻辑清晰,引经据典,内容丰富且全面,并且提供了及时更新的github资源,特别适合对代码智能感兴趣的初学者进行学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1900651.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3D地图是智慧城市可视化项目绕不开的技术!来我帮你解决

**3D地图:智慧城市可视化项目绕不开的技术!来我帮你解决** 智慧城市已成为未来城市发展的必然趋势。而3D地图作为智慧城市可视化项目的核心技术之一,其重要性不言而喻。本文将深入探讨3D地图在智慧城市建设中的应用及其优势,为您…

待研究课题记录

最近了解到两个新的有趣的节点,但是对于实际效果不是很确定,所以这里记录下,后续慢慢研究: 扰动注意力引导 Perturbed Attention Guidance GitHub - KU-CVLAB/Perturbed-Attention-Guidance: Official implementation of "…

Python 游戏服务器架构优化

优化 Python 游戏服务器的架构涉及多个方面,包括性能、可伸缩性、并发处理和网络通信。下面是一些优化建议: 1、问题背景 在设计 Python 游戏服务器时,如何实现服务器的横向扩展,以利用多核处理器的资源,并确保服务器…

商品分页,商品模糊查询

一、商品分页 引入分页 定义分页主件的参数 在请求url上拼接参数 定义改变当前页码后触发的事件,把当前页码的值给到分页表单,重新查询 二、商品查询(以商品的名称查询name为例) 引入elementplus的from表单组件 定义一个FormData…

DDR的拓扑与仿真

T型拓扑 vs Fly-by 由于T型拓扑在地址、命令和时钟都是同时到达每个DDR芯片,所以同步的切换噪声会叠加在一起,DDR越多这个信号上叠加的噪声越大,T型拓扑的优点是地址、命令和时钟都是同时到达,所以不需要做写均衡Write leveling。…

Java面试八股之MYISAM和INNODB有哪些不同

MYISAM和INNODB有哪些不同 MyISAM和InnoDB是MySQL数据库中两种不同的存储引擎,它们在设计哲学、功能特性和性能表现上存在显著差异。以下是一些关键的不同点: 事务支持: MyISAM 不支持事务,没有回滚或崩溃恢复的能力。 InnoDB…

HCIA综合实验

学习新思想,争做新青年。今天学习的是HCIA综合实验! 实验拓扑 实验需求 总部: 1、除了SW8 SW9是三层交换机,其他交换机均为2层交换机。 2、GW为总部的出口设备,使用单臂路由技术,VLAN10,20,100的网关都在GW…

leetcode力扣_排序问题

215.数组中的第K个最大元素 鉴于已经将之前学的排序算法忘得差不多了,只会一个冒泡排序法了,就写了一个冒牌排序法,将给的数组按照降序排列,然后取nums[k-1]就是题目要求的,但是提交之后对于有的示例显示”超出时间限制…

某乎X-Zse-96(xzse96)分析

特别声明!本章只单纯为了学习! 前言 今天通过知乎的一个参数,来学习逆向的新思路,希望大家能有所掌握。 一.抓包分析 我们进入之后搜索,发现这个数据包比较大,肯定就是这个了包了 然后我们就进去观看请…

SSRS中生成二维码

1.二维码搭建, fastapi,qrcode,python-barcode from fastapi import FastAPI, HTTPException from pydantic import BaseModel import qrcode from io import BytesIO from fastapi.responses import StreamingResponse import barcode from barcode.writer import ImageWrite…

[Labview] Excel读表 输出表单中选中的单元格内容

简而言之 循环外 是读取excel文件,并写入labview表格 循环内 会输出表格中被选中的单元格内容 属性节点:编辑位置 如果需要改写单元格内容并储存替换Excel,可见这篇:[Labview] 改写表格内容并储存覆盖Excelhttps://blog.csdn.ne…

项目收获总结--MySQL的知识收获

一、概述 最近几天公司项目开发上线完成,做个收获总结吧~ 今天先记录MySQL的收获和提升。 二、MySQL表分区 项目中遇到数据量过大导致在查询过程中会出现各种超时的情况,当然是可以使用各种中间件比如MyCat,ShardingJDBC 等分库工具来进行…

如何选择最佳的照片和视频恢复软件

您是否意外从硬盘或 USB 卡中删除了照片或视频?最好的视频和照片恢复软件可以帮到您!如果您一直在寻找最好的照片恢复软件,那么您来对地方了。本文将分享一些帮助您找到最佳视频恢复软件的提示。 重要提示:事实:媒体文…

VirtualBox 安装 Ubuntu Server24.04

环境: ubuntu-2404-server、virtualbox 7.0.18 新建虚拟机 分配 CPU 核心和内存(根据自己电脑实际硬件配置选择) 分配磁盘空间(根据自己硬盘实际情况和需求分配即可) 设置网卡,网卡1 负责上网&#xff0c…

通过SDK使用百度智能云的图像生成模型SDXL

登录进入百度智能云控制台,在模型广场按照图像生成类别进行筛选,可以找到Stable-Diffusion-XL模型。点击Stable-Diffusion-XL模型的API文档后在弹出的新页面下拉可以找到SDK调用的说明。 import qianfandef sdxl(file: str, prompt: str, steps: int 2…

grpc-go服务端接口添加

【1】新建一个目录whgserviceproto,目录下新建一个proto包:whgserviceproto.proto (注意目录和包名称保持一致) //协议为proto3 syntax "proto3"; // 指定生成的Go代码在你项目中的导入路径 option go_package"…

Midjourney 预设

使用命令/settings 进入预设,根据点击不同选项来配置。 🌹 1. 设置工作所使用的模型版本。 1️⃣ MJ Version 1 2️⃣ MJ Version 2 3️⃣ MJ Version 3 4️⃣ MJ Version 4 5️⃣ MJ Version 5 5️⃣ MJ Version 5.1 🔧Raw Mode 🌈 Niji Version 4 🍎 Niji Versio…

CV04_PASCAL VOC2012数据集介绍

1.1 简介 PASCAL Visual Object Classes (VOC) 2012 数据集是计算机视觉领域中一个广泛使用的标准数据集,用于评估和促进对象识别、分类、目标检测、图像分割以及其他视觉理解任务的算法性能。PASCAL VOC项目起始于2005年,并且每年都会更新数据集&#…

【前端项目笔记】7 商品管理

商品管理 效果展示: 在功能开发之前,创建商品列表的子分支 git branch 查看所有分支 git checkout -b goods_list 创建并切换到新分支goods_list git push -u origin goods_list 将新分支goods_list推送到云端仓库origin并命名为goods_list保存 通过…

景色短视频:成都柏煜文化传媒有限公司

景色短视频:定格自然之美,邂逅心灵之旅 在这个被数字洪流包围的时代,短视频以其独特的魅力,为我们打开了一扇通往无限可能的大门。而在众多短视频类型中,景色短视频以其无与伦比的视觉冲击力,成为了许多人…