【论文解读系列】从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:辅助分子式生成和自动定理证明这四个领域的应用。
在此之后,本文分别从模型、评测、应用、高效化和跨领域等方面,抛出了若干值得研究的方向。

  • 46
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
RNN/LSTM/GRU模型的构建过程可以分为以下几个步骤: 1. 文本预处理:将原始文本经过分词、去停用词等预处理操作,得到可供模型训练的文本数据集。 2. 构建词向量:将文本数据集中的每个词映射到一个高维向量空间中,得到词向量。可以使用预训练的词向量模型,如Word2Vec、GloVe等。 3. 模型构建:根据具体任务需求选择RNN、LSTM或GRU模型,然后在模型中加入注意力机制等可选的组件。具体构建方式如下: - RNN模型:将每个词的词向量作为输入,经过一系列RNN层进行处理,最终输出模型的预测结果。 - LSTM模型:与RNN模型类似,但是在RNN的基础上加入了长短时记忆的机制,可以有效解决梯度消失的问题。 - GRU模型:是LSTM模型的变体,对LSTM模型的记忆单元和门控单元进行了简化,计算量较小,但是效果与LSTM模型相近。 4. 模型训练与调优:将预处理后的数据集作为输入,使用反向传播算法进行模型训练,并对模型进行调优,如调整超参数、增加正则化等。 5. 模型应用:将训练好的模型应用到具体任务中,如文本分类、情感分析、机器翻译等。在应用过程中,可以根据实际需求进行模型的调整和优化。 注意力机制是一种常用的模型组件,可以在模型中加入注意力机制来提高模型的预测准确率。其主要思想是通过对输入数据中不同部分的注意力权重进行调整,来提高模型对重要信息的关注程度,从而提高模型预测的准确率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值