【论文解读系列】从RNN/CNN到大模型全解析

论文:A Survey of Neural Code Intelligence: Paradigms, Advances and Beyond
地址:GitHub:https://github.com/QiushiSun/NCISurvey

文章目录

一、代码模型的发展

1.神经语言建模(Neural Language Modeling)时代

2.代码预训练模型时代(CodePTMs)

3. 大型语言模型(LLMs)时代

二、学习范式的转移

三、数据集与评测基准

四、跨领域协同

五、应用与未来

神经代码智能(Neural Code Intelligence),即利用深度学习理解、生成和优化代码,正展现出其对人工智能领域变革性的影响。作为连接自然语言编程语言的桥梁,这一领域不论是从论文数量上还是应用上,在过去几年里已经极大吸引了研究界/工业界的关注。这篇综述论文按领域发展的时间顺序,系统性地回顾了代码智能领域的进步,囊括了超过50个代表性模型及其变种、超过20个类别的代码任务,以及覆盖了超过680项相关工作。本文遵循历史发展脉络,追溯了不同研究阶段的范式转变(例如,从利用RNN建模代码到LLM时代)。同时,本综述也从模型、任务、评测和应用等方面梳理不同阶段的主要学习范式转移。在应用层面,代码智能从最初聚焦于解决特定场景的尝试开始,经历了在其快速扩展期间探索多样化任务的阶段,到目前专注于应对越来越复杂和多样化的现实世界挑战。

一、代码模型的发展

1.神经语言建模(Neural Language Modeling)时代

神经语言建模时期见证了深度学习来处理code的最早期尝试。在这一时期设计的方法主要依赖于成熟的RNN/CNN结构来建模代码。值得注意的是,这些方法不仅利用了代码的文本信息,还将代码结构,如抽象语法树AST/数据流Data flow以及控制流Control flow从代码中提取出来,并融入建模的过程  ,其发展与Semantic parsing紧密相连。同时,由于代码片段可以被表示为连续向量,这一时期发展的技术也被称为Code Embeddings ,即代码嵌入。最具代表性的技术,如code2vec 和code2seq ,通过将AST中的路径嵌入向量空间,捕获了代码的语义和结构信息,使得Neural Approaches能够应用于一些代码相关的的场景。

2.代码预训练模型时代(CodePTMs)

继预训练语言模型(Pre-trained Language Models)在NLP领域取得显著成功之后,研究者们迅速整合了它们的架构并用于建模code,促成了以CodeBERT ,CodeT5 为代表的Code Pre-trained Models(CodePTMs)的繁荣发展 。这标志着代码智能的一个以预训练+微调为代表的蓬勃发展时期,它既保留了上一个时代中利用代码结构进行建模的习惯,又纳入了Transformer结构以大幅提高表征学习的能力。

3. 大型语言模型(LLMs)时代

继GPT-3和PaLM等通用LLMs在学术界和工业界的极大成功之后,以Codex ,CodeGen 和StarCoder 为代表的代码大模型(CodeLLMs)在又掀起了新一波研究。这一阶段也见证了学习的策略从任务特定微调到prompt learning 和in-context learning 的转变,以及将代码智能的应用从仅限于代码相关任务扩展到更广泛的现实世界场景,如推理,数学以及帮助解决经典自然语言处理任务。

二、学习范式的转移

在模型的发展过程中,Code的学习范式与自然语言处理经历了相似的范式转移 ,从最早期的利用Neural Approaches对单个任务/场景进行建模,再到预训练后使用任务特定微调让一个模型来处理多种任务,再到大模型时代以prompt learning为主导的学习方式。

此外,这种范式转移还浅浅将代码智能的引用场景从传统code-related tasks外扩到更广阔的场景,如数值推理、符号推理和信息抽取等经典NLP任务。

三、数据集与评测基准

除了模型架构上的特征外,本文还系统性地回顾了以CodeSearchNet 和 The Stack 为代表的用于构建代码模型所使用的预料及其特性。

语料库概览与The Stack编程语言数据分布

语料库概览与The Stack编程语言数据分布

在评测上,本文也详细回顾了克隆检测、缺陷检测、代码翻译/修复以及代码生成等若干场景下的常见评测基准,并在文中对所有现有benchmarks进行了汇总和归类整理。此外,还展示了一些代表性模型的不同版本在生成代码时的性能表现,并就其进行了详细讨论。

四、跨领域协同

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

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

五、应用与未来

除了上述research角度的讨论,这篇综述还详尽地讨论了代码智能在
(1)软件工程:如编程助手/自动化软件开发
(2)数据驱动决策:Text2SQL和数据科学
(3)Agents:机器人控制与自动化
(4)AI4Science:辅助分子式生成和自动定理证明这四个领域的应用。
在此之后,本文分别从模型、评测、应用、高效化和跨领域等方面,抛出了若干值得研究的方向。

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

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

相关文章

初识 React:安装和初步使用指南

文章目录 前言一、React 是什么?1.组件化开发2.虚拟 DOM3.单向数据流4.生态系统丰富 二、安装1.准备工作2.下载react 三、探索 React 应用总结 前言 在当今的 Web 开发领域,React 已经成为了一个备受推崇的技术。它的组件化、灵活性和高效性使得它成为了…

bugku-web-都过滤了

别说,页面还挺帅,这里所有链接点都是假的 账号密码错误的弹窗 这里几乎没有其他线索,现在能想到的有两种,SQL注入和爆破 开始爆破 得到账号为admin 得到最终密码bugkuctf 进入系统内部 发现这里过滤空格 可以用{}来代替空格作用…

K8s: 关于Kubernetes中的Pod的创建,实现原理,Job调度pod以及pod网络

Pod 概述 Pod 是最小部署的单元,Pod里面是由一个或多个容器组成,也就是一组容器的集合一个pod中的容器是共享网络命名空间,每个Pod包含一个或多个紧密相关的用户业务容器Pod 是 k8s 系统中可以创建和管理的最小单元是资源对象模型中由用户创…

Python介绍(未完)

文章目录 Python 背景知识Python 是谁创造的?Python 可以用来干什么?Python 的优缺点 搭建 Python 环境安装 Python搭建 PyCharm 环境新工具到手,赶紧试试中文设置第一个Python程序 Python基础语法基础语法(1)常量和表…

python复制文件夹内容

参考博客 https://blog.csdn.net/itfans123/article/details/133710731 案例1 import os import shutildef copy_folder(source_folder, destination_folder):# 创建目标文件夹os.makedirs(destination_folder, exist_okTrue)# 遍历源文件夹中的所有文件和文件夹for item in …

[docker] 核心知识 - 概念和运行

[docker] 核心知识 - 概念和运行 之前 docker 学了个开头就去搞项目去了,不过项目也开展了好久了,前端差不多吃透了,有些新功能需要用 docker 和 k8s……是时候重新学习一下了。 这一部分简单的过一下概念和讲一下怎么运行 docker 镜像和启…

论文复现《SplaTAM: Splat, Track Map 3D Gaussians for Dense RGB-D SLAM》

前言 SplaTAM算法是首个开源的基于RGB-D数据,生成高质量密集3D重建的SLAM技术。 通过结合3DGS技术和SLAM框架,在保持高效性的同时,提供精确的相机定位和场景重建。 代码仓库:spla-tam/SplaTAM: SplaTAM: Splat, Track & Map 3…

从零开始学习Linux(3)----权限

1.Linux权限的概念 Linux用户:1.root,超级管理员 2.非root,XXX,普通用户 命令:su[用户名] 功能:切换用户。 su -:是指以root的身份重新登录一次。 普通用户切换root需要输入密码,…

java算法day56 | 动态规划part15 ● 392.判断子序列 ● 115.不同的子序列

392.判断子序列 动规五部曲: 确定dp数组(dp table)以及下标的含义 dp[i][j] 表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子序列的长度为dp[i][j]。确定递推公式 在确定递推公式的时候,…

优先编码器电路①

描述 下表是某优先编码器的真值表。 ①请用Verilog实现此优先编码器 输入描述 ①输入描述: input [8:0] I_n 输出描述 ①输出描述: output reg [3:0] Y_n 解题分析 本优先编码器,可采用case语句实现&#xff…

嵌入式操作系统FreeRTOS(队列管理)

1.队列管理 (1)数据存储 队列可以保存有限个具有确定长度的数据单元。队列可以保存的最大单元数目被称为队列的“深度”。在队列创建时需要设定其深度和每个单元的大小。通常情况下,队列被作为FIFO (先进先出)使用,即数据由队列尾…

解决Git 不相关的分支合并

可以直接调到解决方案,接下来是原因分析和每步的解决方式 问题原因: 我之前在自己本机创建了一个初始化了Git仓库,后来有在另一个电脑初始化仓库,并没有clone自己在本机Git远程仓库地址,导致Git历史版本不相关 错误信息 From https://gitee.com/to-uphold-justice-for-other…

点击广告就能日赚收益1000+?开发一款看广告赚收益的APP靠谱吗?

APP对接广告变现是开发者获得收益的重要方式之一,对一些体量较小的APP来说,甚至是唯一的收益来源。开发者是否可以单独开发一款全是广告的APP,拿出一部分的广告收益给点击者,类似在快手极速版里看广告获得金币一个原理&#xff0c…

【Axure教程】制作书本翻页效果

翻书效果是一种模拟真实书本翻页动作的视觉效果,常用于网页设计和应用程序中,以增强用户体验和交互性。这种效果通常通过动画和过渡效果来模拟书页的翻转,使用户感觉像在真实的书本中翻页一样。 所以今天作者就教大家怎么在Axure里用中继器制…

(CVPR,2024)CAT-Seg:基于成本聚合的开放词汇语义分割

文章目录 摘要引言方法计算成本与嵌入空间成本聚合类别成本聚合CAT-Seg框架 实验 摘要 开放词汇的语义分割面临着根据各种文本描述对图像中的每个像素进行标记的挑战。在这项工作中,我们引入了一种新颖的基于成本的方法,以适应视觉语言基础模型&#xf…

CSS显示模式

目录 CSS显示模式简介 CSS显示模式的分类 块元素 行元素 行内块元素 元素显示模式的转换 使块内文字垂直居中的方法 设计简单小米侧边栏(实践) CSS显示模式简介 元素显示模式就是元素(标签)以什么方式进行显示&#xff0…

让15万的车也配激光雷达,速腾发布中长距「千元机」MX

‍作者 |老缅 编辑 |德新 4月15日,国内头部激光雷达公司速腾聚创发布了新一代中长距激光雷达MX。 相比较其产品配置,最令人惊喜的是它的价格。 「MX将以低于200美元的价格作为基础,实现第一个项目的量产。」速腾聚创CEO邱纯潮在发布会现场…

ABAP 批次换算率和批次辅单位数量计算

文章目录 ABAP 批次换算率和批次辅单位数量计算第一种方式批次换算率获取辅单位完整程序运行结果 第二种方式核心程序 CONVERSION_EXIT_ATINN_INPUT:特征值转换示例 ABAP 批次换算率和批次辅单位数量计算 如果一个物料有批次双单位,并且在报表里面展示批…

初识LangChain的快速入门指南

LangChain 概述 LangChain是一个基于大语言模型用于构建端到端语言模型应用的框架,它提供了一系列工具、套件和接口,让开发者使用语言模型来实现各种复杂的任务,如文本到图像的生成、文档问答、聊天机器人等。 LangChain简化了LLM应用程序生…

Mysql The last packet sent successfully to the server was 0 milliseconds ago.

项目启动后,报错,但是我的navicat 数据库连接工具是连接上的,没有问题的,但是程序就是连接不上。端口放开了,防火墙也放开了 先说问题:是网络问题, 如何解决:因为我的机子上又跑了…