Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于大模型的代码生成及其发展趋势

基于大模型的代码生成及其发展趋势

作者头像
用户1386409
发布于 2022-11-29 02:43:11
发布于 2022-11-29 02:43:11
5.6K00
代码可运行
举报
文章被收录于专栏:PaddlePaddlePaddlePaddle
运行总次数:0
代码可运行

本文整理自北京航空航天大学软件开发环境国家重点实验室副教授罗杰的主题分享——基于大模型的代码生成及其发展趋势。

模型驱动的

代码生成

代码生成问题是软件工程人工智能领域的一个经典难题,其核心在于针对给定的程序需求说明,生成符合需求的程序代码。

经典研究主要采用模型驱动的代码生成方法,通过采用形式化建模语言建立严格的需求和设计模型,再通过基于编译规则的代码生成方法,从形式语言模型等语义等价转换到程序代码,以保证程序代码和需求的一致。

这种方法从理论上说是完美的,甚至可以通过对编译规则的证明来确保形式语言模型和程序代码之间保持完全一致,但是它的问题也很突出:模型驱动代码生成方法成立的前提是需要建立一个形式语言模型。

通常来说,需求都是通过自然语言进行描述,因此需要有理解需求并熟悉形式语言建模的人才,在理解自然语言需求的基础上,将其建模为形式语言的模型。但是这一步相对比较困难,且消耗代价很高。因此,这种方法目前只在一些小领域,如机载软件的开发中得到应用。这一应用场景可以接受比较高的开发代价,但不能在软件开发场景中进行大规模推广。

基于大模型的

代码生成

近年来,随着人工智能的发展,研究人员开始尝试一条不同的路径,即基于预训练大规模语言模型进行代码生成。该方法的基本思想是基于自然程序代码的预训练,获得一个能够理解这个代码的大语言模型。基于这样的语言模型,可以采用自然语言的需求描述或其他提示,通过预训练代码大模型直接生成满足需求的程序代码。

如上图所示,这种方法首先会通过自然语言文本、一种或多种程序语言代码进行模型预训练,生成预训练语言模型,将模型在面向具体任务的数据上进行一些微调,就可以得到面向具体代码生成任务的生成模型。通过该模型大量生成的代码样本,可以通过某种后处理程序,从大量的样本中筛选出正确的代码,并作为最终的生成结果。

从以上结构中可以看到,基于大模型的代码生成,核心就是“代码大模型”,目前其主要类别可以分成三类:

  • 左到右语言模型,比如GPT系列模型,典型代表比如CodeParrot、Codex、PolyCoder模型,均采用了此种语言模型架构。
  • 编解码的语言模型,比如最近DeepMind推出的AlphaCode,就是基于编解码模型架构来进行实现。
  • 掩码语言模型,这类方法主要是基于BERT架构来进行实现。

目前的代码大模型,从整体上出现了一定的特点,从代码参数规模上整体呈现增长趋势。研究人员尝试着训练这种更大规模的预训练代码大模型,观察它在不同领域里可能的应用。

代码大模型的

发展现状

接下来对目前最新的一些代码大模型进行简单介绍。

第一个模型是MIT提出的PolyCoder模型,它采用了GPT-2架构,使用程序设计语言的代码进行预训练,使用了12种程序设计语言的代码,却并没有使用任何自然语言的文本进行预训练。可以看出,这样的代码大模型,用它生成程序测试时,能够直接通过测试的概率非常低,虽然生成更多的样本,测试通过概率会更高,但本质上看,它的正确率整体来说还是非常低。所以,预训练代码大模型直接生成的程序代码质量相对较低。

第二个模型是DeepMind提出的AlphaCode,它的框架基于编解码器架构,与PolyCoder相同,也是基于多种程序设计语言进行模型的预训练,使用了12种不同的程序设计语言。在AlphaCode编解码器设计架构时,采用了异构与非对称结构,在编码器部分,虽然使用的层数较少,但维度较大,这部分主要用于处理输入的自然语言描述的需求和提示。在解码器部分,采用了比较多的层数,但比较小的维度,专门用来生成代码。通过这种架构,就能够在同样的参数规模下更好地提高代码生成质量。

DeepMind的研究人员同样发现了从预训练语言模型里生成的代码质量相对较低。所以,他们采用了后处理的策略进行筛选和过滤,以得到正确的代码。他们试图通过生成海量样本的形式,从中找到正确的生成代码。

从实验结果中得出,生成的样本数量越大,获得正确代码的概率越高,甚至已经可以从百万级代码中筛选正确代码。同时我们发现,通过需求中给出的测试样例可以过滤掉99%的生成样本,在所有问题里,有10%的问题找不到一个能够通过需求给出测试样例的生成样本,更找不到正确的代码生成结果。因此,预训练语言模型直接输出代码的质量还是不太理想。

微软研究人员提出了代码生成方法“Jigsaw”,它采用了和DeepMind同样的策略,通过对代码的后处理方式提高生成代码的质量。与DeepMind不同的是,他们采用了程序代码的修复方法进行代码质量的提升。

实验结果中可以看到,从预训练代码大模型直接生成代码正确的概率较低。代码大模型倾向于使用出现频率高的变量名,而不是用户给定的变量名,可能会导致静态语义错误。代码大模型还倾向于重复犯同样的语法和语义错误,如左右括号不匹配的语法错误),逻辑运算的语义错误。

此外,Salesforce提出了CodeGen模型(A Conversational Paradigm for Program Synthesis),通过大型语言模型进行对话式程序生成的方法,将编写规范和程序的过程转换为用户和系统之间的多回合对话。它把程序生成看作一个序列预测问题,用自然语言表达规范,并对程序进行抽样生成。同时,CodeGen(16B)在HumanEval benchmark上已经超过OpenAI's Codex。

目前,PaddleNLP已经内置代码生成CodeGen模块,可以通过Taskflow一键调用。代码生成模型的好坏,一般可以通过求解一些算法题来评估。这里以 LeetCode第一题[1]为例,尝试让PaddleNLP模型自动补全代码。题目如下所示:

给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。

1.Taskflow一键调用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from paddlenlp import Taskflow#Taskflow调用codegen = Taskflow("code_generation", "Salesforce/codegen-2B-mono")prompt = "def twoSum(nums, target):\n    hashmap={}\n    for ind,num in enumerate(nums):\n        hashmap[num] = ind\n    for i,num in enumerate(nums):"code = codegen(prompt)print(prompt)print(code[0])

2.输出结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def twoSum(nums, target):    hashmap={}    for ind,num in enumerate(nums):        hashmap[num] = ind    for i,num in enumerate(nums):        if target - num in hashmap and hashmap[target - num]!= i:            return [i,hashmap[target - num]]

3.提交到LeetCode验证,执行结果显示通过

使用同样的调用方法,针对LeetCode第三题[2],PaddleNLP也通过了测试。这次我们的Prompt仅为函数名:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def lengthOfLongestSubstring(self, s: str) -> int:

题目如下图所示:

给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。

示例 1:

输入: s = "abcabcbb"

输出: 3

解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

除此之外,Prompt也可以为自然语言,例如注释、功能表述等,同样可以生成与之对应的代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Prompt = "# this function prints hello world"Model Output = def hello_world():    print("Hello World")hello_world()

当前代码大模型

存在的问题

北京航空航天大学软件开发环境国家重点实验室与百度合作,在飞桨平台上进行的大模型代码生成实验,也发现上述类似问题,比如会生成一些无意义的代码或者重复的代码。这些都会导致代码大模型的方法在进行应用时会出现问题。

当前代码大模型采用了“淘金”模式,从大量的泥沙里挑选金子。从软件工程角度,它的编码模式可以称为比较粗糙的Code&Fix模型,通过计算机的算力进行整体输入,通过不断试错或海量试错找到符合需求的正确代码,但这样的做法风险高、缺少质量控制、效率低。

综上所述,我们可以思考,是否可以提出一些新的代码生成方法,以提高代码生成的效率,这是未来一个可能的研究方向。

代码大模型

未来发展趋势展望

我们发现,目前的代码大模型是使用与自然语言大模型相同的架构来实现的。但实际上,自然语言和程序设计语言之间的差别较大,自然语言语法复杂不严格,层次结构不清晰,语义不严谨,表达存在多义性。而程序设计语法简单严格、层次结构清晰、语义严格确定、表达不具有二义性,总体上看,是一种递归结构。

我们或许可以构造一个新型代码大模型架构,使其生成的程序更加符合程序语法和静态语义——这也是未来代码大模型发展的方向之一。

在实验过程中,大模型在代码生成时,会复制训练数据中的代码片段,导致生成代码出现版权问题。之所以会出现这种现象,是因为与目前大模型架构的学习理解的能力较弱,以记忆为主的特点相关。

未来的大模型可能会从记忆代码片段到学习人类编程的模式,而不是记忆代码片段。

总体来说,我们希望代码大模型未来能够得到更长远的发展,更好地学习代码中的编程模式,提高软件开发效率。

以上就是我的分享,谢谢大家。

本文转载自:AI大模型

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PaddlePaddle 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
代码写的比Codex还溜的AI代码生成器
近几年来,AI 代码生成器十分流行,从OpenAI的Codex再到DeepMind的AlphaCode。DeepMind甚至表示,AlphaCode在Codeforces(一个编程竞赛平台)举办的编程竞赛(有5000多名参赛者)中,取得了平均排名前54.3%的成绩,并且声称它是首批可与人类程序员竞争的代码生成系统之一。但无论是Codex还是AlphaCode,截止目前都还没有对外开源。
郭好奇同学
2022/04/12
1K0
代码写的比Codex还溜的AI代码生成器
是成就还是削弱?AI代码生成工具与程序员的「相爱相杀」
选自IEEE 作者Craig S. Smith 机器之心编译 编辑:杜伟 当 AI 代码生成工具越来越深入地参与到编程工作中,一些人担心长此以往它会不会取代人类程序员呢?IEEE 的一篇文章探讨了这类 AI 辅助工具的发展历程、对程序员的影响以及未来走向。 程序员注定要被取代吗?自从 OpenAI 的大规模语言模型 GPT-3 展示其基于简单的书面指令创建 HTML 网站这一惊艳的能力以来,计算机编程社区便一直被该问题笼罩着。 自那之后的几个月里,更是出现了可以根据自然语言描述(口头或书面人类语言)编写简单
机器之心
2022/10/08
4590
是成就还是削弱?AI代码生成工具与程序员的「相爱相杀」
AIphaCode 并不能取代程序员,而是开发者的工具
DeepMind 是 AI 研究实验室,它引入了一种深度学习模型,可以生成具有显著效果的软件源代码。该模型名为 AIphaCode,是基于 Transformers,OpenAI 在其代码生成模型中使用的架构相同。
AI科技大本营
2022/04/05
3270
AIphaCode 并不能取代程序员,而是开发者的工具
爆火!CodiumAI | 提出LLM代码生成新方法: AlphaCodium,可让GPT-4提升2.3倍!
代码生成问题与常见的自然语言处理问题不同,代码生成需要匹配目标语言的确切语法,关注代码规范的众多细节,所以适用于常见自然语言生成的优化方法和技巧并不一定对代码生成产生同样好的效果。
ShuYini
2024/01/25
7120
爆火!CodiumAI | 提出LLM代码生成新方法: AlphaCodium,可让GPT-4提升2.3倍!
AI卷趴程序员!DeepMind祭出竞赛级代码生成系统AlphaCode,超越近半码农
AI编程这件事似乎也变得不新鲜了,像GitHub前不久闹得风风火火的Copilot,也是其中一个。
新智元
2022/02/24
5260
AI卷趴程序员!DeepMind祭出竞赛级代码生成系统AlphaCode,超越近半码农
AI 要取代码农?DeepMind 祭出超越近半程序员的编程版“阿尔法狗” AlphaCode!
在国内欢度虎年春节之际,作为 Google 母公司 Alphabet 旗下的人工智能企业——DeepMind,发布了基于 Transformer 模型的编程 AI:AlphaCode,并声称其编写的计算机程序具有竞争力,能与人类普通程序员相媲美。
数人之道
2022/02/14
7940
AI 要取代码农?DeepMind 祭出超越近半程序员的编程版“阿尔法狗” AlphaCode!
大语言模型距离替代程序员还有多远?
“AI 助手”与程序员并肩工作的想法存在于我们的想象几十年了,它催生了来自编程语言Ferdowsifard et al. 2020; Miltner et al. 2019; Ni et al. 2021; Raychev et al. 2014和机器学习Guo et al. 2021; Kalyan et al. 2018; Xu et al. 2020社区的大量工作。由于大型语言模型(LLMs) Li et al. 2022; Vaswani et al. 2017的最新突破,这个梦想变得接近了。OpenAI的Codex模型Chen et al. 2021包含120亿个模型参数,训练了GitHub上5400万个软件库,能够正确解决30-70%的常规的Python问题,而DeepMind的AlphaCode Li et al. 2022在竞争性编程平台Codeforces上排名前54.3%,超过了5000名人类程序员。凭借这种令人印象深刻的表现,大型代码生成模型正在迅速逃离研究实验室,为工业编程助手工具提供动力,例如Github Copilot Friedman 2021。
小时光
2023/07/03
6380
大语言模型距离替代程序员还有多远?
CMU创建一个开源的AI代码生成模型,C语言表现优于Codex
来源:机器之心本文约2400字,建议阅读5分钟CMU 对现有开源和未开源的 AI 代码生成模型进行了全面深入的系统性评估,并分析了它们在 C、C++、Python 等 12 中不同编程语言中的代码自动完成表现。 最近,语言模型(Language Model, LM)在建模编程语言源代码方面展现出了令人印象深刻的性能。这些模型擅长代码自动生成以及从自然语言描述中生成代码等下游任务。当前 SOTA 大规模语言代码模型(如 Austin et al. (2021))在基于 AI 的编程辅助领域已经取得了重大进展。
数据派THU
2022/03/24
6580
AlphaCode论文和背后原理快速解读,也许程序员短期内还不会被取代...
这两天科技媒体沸腾了!DeepMind继AlphaGo、AlphaFold之后,推出了Alpha系列又一神器:AlphaCode。据说这是一个可以自己写代码的AI,并且已经在实际比赛中击败了 46% 左右人类选手!
PP鲁
2022/09/20
8040
AlphaCode论文和背后原理快速解读,也许程序员短期内还不会被取代...
涵盖500多项研究、50多个模型,代码大模型综述来了
随着 BERT 和 GPT 等预训练 Transformer 的出现,语言建模近些年来取得了显著进步。随着大型语言模型(LLM)的规模扩展至数以千万计的参数数量,LLM 开始展现出通用人工智能的迹象,它们的应用也已经不局限于文本处理。Codex 首次展现出了 LLM 在代码处理方面的出色能力,之后更是出现了 GitHub Copilot 这样的商业产品以及 StarCoder 和 Code LLaMA 等开源代码模型。
机器之心
2023/11/22
9500
涵盖500多项研究、50多个模型,代码大模型综述来了
AlphaCode来了!谷歌的DeepMind创造出相当于普通程序员的AI
为不可预见的问题创造解决方案是人类智能的第二天性——这是基于经验的批判性思维的结果。机器学习社区在生成和理解文本数据方面取得了巨大进步,但进步仍然局限于相对简单的数学和编程问题,或者检索和复制现有解决方案。
代码医生工作室
2022/03/07
6530
AlphaCode来了!谷歌的DeepMind创造出相当于普通程序员的AI
【论文解读】用于代码处理的语言模型综述
在这项工作中,论文系统地回顾了在代码处理方面的最新进展,包括50个+模型,30个+评估任务和500个相关工作。论文将代码处理模型分解为由GPT家族表示的通用语言模型和专门预训练的代码模型,通常具有定制的目标。论文讨论了这些模型之间的关系和差异,并强调了代码建模从统计模型和rnn到预训练的transformer和LLM的历史转变,这与NLP所采取的过程完全相同。还讨论了特定于代码的特性,如AST、CFG和单元测试,以及它们在训练代码语言模型中的应用,并确定了该领域的关键挑战和潜在的未来方向。
合合技术团队
2024/01/18
5130
【论文解读】用于代码处理的语言模型综述
PaddleNLP 离线使用已下载好的社区模型
使用 PaddleNLP 加载社区模型时,因为社区模型需联网下载,可先从在线环境进行模型下载,再将下载好的模型传输到离线环境中。此时在离线环境下可能会遇到 https://github.com/PaddlePaddle/PaddleNLP/pull/5817 中描述的问题,可参照该 PR files[1] 中内容修改,以支持离线环境的正常使用。
AlphaHinex
2024/04/08
4110
PaddleNLP 离线使用已下载好的社区模型
会写代码的AI开源了!C语言写得比Codex还要好,掌握12种编程语言丨CMU
萧箫 发自 凹非寺 量子位 | 公众号 QbitAI 比Codex还会写C语言的AI代码生成模型,现在开源了! 这段时间,用AI写代码可以说是大火,其中最著名的要属OpenAI的Codex和DeepMind的AlphaCode。 △基于Codex的Copilot 然而,这两个AI模型,全都没有开源: 其中AlphaCode只给出了一些测试样例,而Codex只开放了API。 为此,来自CMU的几个研究人员,用GPT-2搞出了一个名叫PolyCoder的AI代码生成模型,而且还是开源的。 据研究人员表示,虽
量子位
2022/03/10
1.5K0
清华博士后用10分钟讲解AlphaCode背后的技术原理,原来程序员不是那么容易被取代的!
AI科技评论报道不久前,DeepMind 的团队发布了一个可以自动生成竞赛级代码的人工智能系统——AlphaCode,号称「媲美普通程序员」,一经发表就在国内外的AI圈里引起了巨大轰动。 -论文地址:https://storage.googleapis.com/deepmind-media/AlphaCode/competition_level_code_generation_with_alphacode.pdf -数据集:https://github.com/deepmind/code_contests
AI科技评论
2022/03/03
9150
原创 | 从ULMFiT、Transformer、BERT等经典模型看NLP 发展趋势
自然语言处理(Natural Language Process,简称NLP)是计算机科学、信息工程以及人工智能的子领域,专注于人机语言交互,探讨如何处理和运用自然语言。自然语言处理的研究,最早可以说开始于图灵测试,经历了以规则为基础的研究方法,流行于现在基于统计学的模型和方法,从早期的传统机器学习方法,基于高维稀疏特征的训练方式,到现在主流的深度学习方法,使用基于神经网络的低维稠密向量特征训练模型。
数据派THU
2020/11/03
1K0
原创 | 从ULMFiT、Transformer、BERT等经典模型看NLP 发展趋势
AIGC的商业化与市场前景:内容生成平台的崛起与盈利模式的探索
人工智能生成内容(AIGC,Artificial Intelligence Generated Content)作为一种新兴的技术领域,正在迅速地改变着全球的内容创作方式。随着自然语言处理(NLP)、深度学习、生成对抗网络(GANs)和多模态生成技术的不断进步,AIGC已在广告、娱乐、教育、出版等领域展现了巨大的应用潜力。本文将探讨AIGC的商业化前景,分析AIGC平台的兴起、AI生成内容的定价与盈利模式,同时结合具体的代码示例,帮助理解AIGC技术如何在实际应用中实现商业化。
云边有个稻草人
2024/12/29
2330
「深呼吸」让大模型表现更佳!谷歌DeepMind利用大语言模型生成Prompt,还是AI更懂AI
只是多了「深呼吸」的命令,模型在GSM8K的得分就从「think step by step」的71.8上升至80.2,成为表现最佳的Prompt。
新智元
2023/09/22
5610
「深呼吸」让大模型表现更佳!谷歌DeepMind利用大语言模型生成Prompt,还是AI更懂AI
秒杀千亿级模型!微软 | 提出代码扩散预训练模型:CODEFUSION,参数仅有75M
扩散模型(Diffusion Models)在图像生成方面表现出了卓越的性能。今天给大家分享的这篇文章,微软研究人员将扩散模型(Diffusion Models)应用到了代码生成领域,提出了CODEFUSION架构,实验结果表明CODEFUSION-75M效果超过了ChatGPT、StarCoder、GPT-3等众多百亿、千亿级参数的模型。
ShuYini
2023/10/31
6610
秒杀千亿级模型!微软 | 提出代码扩散预训练模型:CODEFUSION,参数仅有75M
超级编程AI登上Science封面!AlphaCode编程大赛卷趴一半程序员
这个12月,正当OpenAI的ChatGPT势头正旺时,那个曾经卷趴一半程序员的AlphaCode登上Science封面了!
新智元
2023/01/09
2410
超级编程AI登上Science封面!AlphaCode编程大赛卷趴一半程序员
推荐阅读
代码写的比Codex还溜的AI代码生成器
1K0
是成就还是削弱?AI代码生成工具与程序员的「相爱相杀」
4590
AIphaCode 并不能取代程序员,而是开发者的工具
3270
爆火!CodiumAI | 提出LLM代码生成新方法: AlphaCodium,可让GPT-4提升2.3倍!
7120
AI卷趴程序员!DeepMind祭出竞赛级代码生成系统AlphaCode,超越近半码农
5260
AI 要取代码农?DeepMind 祭出超越近半程序员的编程版“阿尔法狗” AlphaCode!
7940
大语言模型距离替代程序员还有多远?
6380
CMU创建一个开源的AI代码生成模型,C语言表现优于Codex
6580
AlphaCode论文和背后原理快速解读,也许程序员短期内还不会被取代...
8040
涵盖500多项研究、50多个模型,代码大模型综述来了
9500
AlphaCode来了!谷歌的DeepMind创造出相当于普通程序员的AI
6530
【论文解读】用于代码处理的语言模型综述
5130
PaddleNLP 离线使用已下载好的社区模型
4110
会写代码的AI开源了!C语言写得比Codex还要好,掌握12种编程语言丨CMU
1.5K0
清华博士后用10分钟讲解AlphaCode背后的技术原理,原来程序员不是那么容易被取代的!
9150
原创 | 从ULMFiT、Transformer、BERT等经典模型看NLP 发展趋势
1K0
AIGC的商业化与市场前景:内容生成平台的崛起与盈利模式的探索
2330
「深呼吸」让大模型表现更佳!谷歌DeepMind利用大语言模型生成Prompt,还是AI更懂AI
5610
秒杀千亿级模型!微软 | 提出代码扩散预训练模型:CODEFUSION,参数仅有75M
6610
超级编程AI登上Science封面!AlphaCode编程大赛卷趴一半程序员
2410
相关推荐
代码写的比Codex还溜的AI代码生成器
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档