代码生成综述

news2024/12/25 16:01:10

代码生成大模型属于LLM模型的一个子类,理论来讲也是属于语言模型的一种特例。代码本身其实也是一种特殊的语言表示,所以代码模型的实现应该是具备通用自然语言和代码两部分的能力。实际的代码模型也是有两条路径来实现,让训练好的NLP LLM模型经过code的训练,或者让code LLM模型经过NLP语料的训练来实现代码生成模型。其实应该还有一条路径,就是把code也当成是nlp语料,不区分code和nlp直接来训练。

对于训练的语料其实和NLP的LLM模型是一样的至少包括三种:pretrain语料、instruct监督训练语料、RLHF的比较训练语料。实际上用的比较多的是前面两种:pretrain语料和instruct语料。

对于模型驯练来说比较重要的就三样东西和一条链路。所谓三样东西无非:模型、数据、任务设计,一条链路就是经过多少轮的数据训练,数据训练的配比和加入顺序。下面我们会围绕三样东西来展开介绍,为什么不讲解一条链路并非有什么秘密。问题在于这个东西很难稳定成一套理论,有点类似传统文化里的“火候”、“易观”这种东西跟实际情况结合很紧密,很难去讲什么时候该如何,就算能讲出来往往也是当时决定完后马后炮的总结,在下一次不一定就完全可用。所以没有更好办法只有你自己多练,自己多感悟自然用多了就知道那么一回事了,往往可能就是一个直觉的决定可能就有效,但是前提是你得碰到问题够多想的够多。

模型

基础模型

模型

size

架构

pass@1

codeT5+

T5

code-davinci-2

GPT

59.86%

codegeex2

6B

GLM

starcode

15.5B

decode only

codegen16b

16B

decode only

29.28%

InCoder-6.7B

6.7B

Fairseq

15.6%

Palm- coder

540B

36%

Bloom

指令模型

模型

size

指令集

pass@1

OctoCoder

16B

CommitPack、CommitPackFT

35.5%

OctoGeeX

6B

CommitPack、CommitPackFT

30.9%

WizardCoder

16B

Evol-Instruct

57%

InstructCodeT5+

16B

22.3%

PanGu-Coder2

15B

RRTF框架抽数据

61%

Instruct-Codegen-16B

16B

code alpaca 250k

37.1%

数据

预训练数据

 

The Stack(6TB)

下载链接:https://huggingface.co/datasets/bigcode/the-stack

The Stack数据集,这是一个具有3.1TB的合法开源代码语料,拥有30种编程语言(注:最新版The Stack v1.1已经拓展到了308种语言,6TB数据);

CodeParrot github-code(500GB)

下载链接:https://huggingface.co/datasets/codeparrot/github-code

PolyCoder(249GB)

下载链接:https://github.com/VHellendoorn/Code-LMs

用的是GitHub上的公开代码,主要选取的是各种编程语言中比较受欢迎的库,每个库至少有50 Stars,采用了多种编程语言代码集来训练,一共有12种

Google BigQuery(2B文件)

下载链接:https://cloud.google.com/blog/topics/public-datasets/github-on-bigquery-analyze-all-the-open-source-code

Google BigQuery提供了GitHub上许可存储库的快照,可以通过SQL查询进行过滤。AlphaCode,BLOOM,InCoder、CodeGen)都在他们的预训练数据集中包括了这部分数据。

CodeSearchNet(20GB)

下载链接:https://github.com/github/CodeSearchNet

其中包含了约600万种函数,取自Go,Java,JavaScript,PHP,Python和Ruby这六种编程语言的开源代码。

ProjectCodeNet(5亿行)

下载链接:https://github.com/IBM/Project_CodeNet

该数据集包含 1400 万个代码样本,共有用 55 种编程语言编写的 5 亿行代码,其中 C++ 是样本中使用最多的语言,Python 位居第二。

CodeXGLUE

下载链接:GitHub - microsoft/CodeXGLUE: CodeXGLUE

microsoft 开源的,包含10个任务及14个数据集

The Pile

下载链接:The Pile

The Pile数据集也包含来自StackOverflow的问题、答案和评论组成这些问题和答案,但不包含注释。定性地说,作者发现注释。

指令数据

代码生成:

TnT/Multi_CodeNet4Repair · Datasets at Hugging Face

代码填空:

https://huggingface.co/datasets/code_x_glue_cc_cloze_testing_all

代码问答:

Dahoas/code-review-instruct-critique-revision-python · Datasets at Hugging Face

代码判断:

reshinthadith/pairwise-code-review-instruct-critique-revision-python · Datasets at Hugging Face

代码阅读理解:

https://huggingface.co/datasets/Nan-Do/instructional_code-search-net-python/viewer/Nan-Do--instructional_code-search-net-python/train?row=1

代码测试:

codeparrot/apps · Datasets at Hugging Face

deepmind/code_contests · Datasets at Hugging Face

代码填空:

code_x_glue_cc_cloze_testing_all · Datasets at Hugging Face

综合性instruct:

nickrosh/Evol-Instruct-Code-80k-v1 · Datasets at Hugging Face

HuggingFaceH4/CodeAlpaca_20K · Datasets at Hugging Face

iamtarun/python_code_instructions_18k_alpaca · Datasets at Hugging Face

任务设计

预训练任务

前向生成

所谓前向生成,在训练形式上其实应该是最简单。就是让模型源码阅读,难点在于选出让他读什么,什么时候读,读几遍。

1.带注释源码阅读

2.带项目需求源码阅读

3.语言规则+代码例子

mask填补

这部分就是如何对源码mask掉一部分,可能是一个词或者几个词,也可能是一行或者几行。然后让代码来做填空。这个可以随机mask,也可以对代码汇总关键词mask或者是变量名mask,或者可以做一些语义理解随机mask。

1. strategyDecisionDrm.__________ 是什么?

2. getDefaultStrategyMap() 方法的返回值是什么类型?

3. 如何从一个 List<String> 中随机选择指定数量的字符串?

4. 请为以下变量添加类型声明:row, strategyCode, recommendCount

5. 使用 Java 8 中的什么方法可以将一个 List<String> 中的元素限制在指定数量?

段生成

这个和上面的mask填补任务很像,可以把整段代码mask或则核心实现mask,或者定义部分mask,更或者可以把代码注释mask,或者功能描述mask,让模型来填补。

判断

这部分可以在代码修复、代码复杂度选择中设计任务,比如可以判断哪个实现是对的,哪个实现会更快,哪个变量名是对的,哪个执行速度会更快,哪个测试结果是对的。

关键词抽取

这部分可以设计抽取指定语意对应的参数,识别关键词、识别摘要和代码的关系。

选择

多个变量选择一个合适的填入代码,代码多段实现选择填入

摘要

对代码结构框架抽起,对代码运行流程抽取,对代码核心实现抽取,抽取代码的实现逻辑。

指令任务

单问题点

生成:

NL-->Code 给文本生成代码

NL-->NL+code 给文本生成代码和描述

NL+code -->NL 生成代码的逻辑、流程,描述;生成代码功能描述

注释:

Code-->NL给代码生成注释

Code-->NL+code 给代码生成代码功能实现思路,代码续写

Code+NL-->code 代码填空,代码改写

问答:

Code+NL--> NL+code 给定代码,根据问题回答问题

改写:

Code+NL--> code 代码改写

Code+NL--> code 代码纠错

Code+NL--> code 代码翻译

Code+NL--> code 代码增加功能

多轮对话/CoT

NL-->NL+code 根据需求生成代码框架

NL-->code 根据需求描述生成带多个功能模块的类

NL+code-->NL+code 跟据功能描述和代码框架,补全细节

NL+code-->NL+code 根据输入输出描述,生成可执行小项目工程

{
"代码生成能力prompt": [
"1.根据以下需求生成一段代码:需要一个函数,该函数接受策略代码和推荐数量作为参数,然后从默认的策略地图中获取对应的股票,如果没有找到相应的策略代码,则返回预设的股票代码,并按照请求的推荐数量进行限制。"
],
"代码补全能力prompt": [
"1.我有一段未完成的代码,需要你帮助完成,代码如下:def useDefaultSymbolPool = { row, strategyCode, recommendCount -> 此处需要你的补全"
],
"代码续写能力prompt": [
"1.给定下面这段代码,能否进行逻辑续写:def ASSET_ID = 'finscprod.chooseStockCard'"
],
"代码纠错能力prompt": [
"1.这段代码中存在一个错误,能否帮助找出并修正:def useDefaultSymbolPool = { row, strategyCode, recommendCount -> def strategyDecisionDrm = row.get('strategyDecisionDrm') as StrategyDecisionStorm"
],
"代码注释能力prompt": [
"1.请为以下代码添加注释:def useDefaultSymbolPool = { row, strategyCode, recommendCount -> def strategyDecisionDrm = row.get('strategyDecisionDrm') as StrategyDecisionDrm"
],
"代码理解能力prompt": [
"1.请解释这段代码的功能:def useDefaultSymbolPool = { row, strategyCode, recommendCount -> def strategyDecisionDrm = row.get('strategyDecisionDrm') as StrategyDecisionDrm"
],
"代码问答能力prompt": [
"1.在本段代码中,getOrDefault方法是如何工作的?"
],
"注释生成代码prompt": [
"1.根据以下注释生成相应的代码:'使用默认的股票池,根据给定的策略代码和推荐数量从策略决策DRM获取股票代码,如果没有找到则返回预设的股票代码,并限制返回的数量'"
],
"功能描述生成代码prompt": [
"1.根据以下功能描述生成代码:'创建一个函数,该函数接受三个输入参数,即row,策略代码和推荐数量,从“strategyDecisionDrm”获取默认策略图,如果策略代码不存在,则返回默认的股票代码,并且返回的数量不超过推荐数量。'"
],
"摘要生成代码prompt": [
"1.从以下摘要生成代码:'这是一个使用默认股票池的函数,其基于输入的策略代码和推荐数量从策略决策DRM中提取股票代码,如果没有找到匹配的策略代码,将返回预定义的股票列表,并根据推荐数量进行限制。'"
],
"代码功能描述prompt": [
"1.为下面这段代码提供一个功能描述:def useDefaultSymbolPool = { row, strategyCode, recommendCount -> def strategyDecisionDrm = row.get('strategyDecisionDrm') as StrategyDecisionDrm"
],
"代码注释生成prompt": [
"1.请根据给定的功能描述生成相应的代码注释:'这个功能会从默认的策略决策DRM地图中获取股票代码,如果无法根据给定的策略代码找到,就会返回一个预设的股票代码数组,并且返回的数量不超过给定的推荐值。'"
],
"功能描述到代码COT prompt": [
"1.请根据以下的功能描述转化为具体的代码操作任务(COT):'我们需要一个函数来从默认的策略地图中获取策略代码,如果没有找到相应的策略代码,则返回预设的股票代码,并按照请求的推荐数量进行限制。'"
]
}

例子:

可以通过以下三个层次来对一份代码分析,设计合适的prompt抽取和生成数据,来训练模型的综合能力。

1.需求描述、api描述、代码实现、魔法例子
2.api描述包括:input、output、rpc、service
3.rpc是调用流程链路、service是服务实现函数
4.code实现部分包括import函数包部分、各功能块实现函数、为了支撑服务的各种小服务、pipeline串接执行流程
5.魔法例子是参考的实现服务例子
问题:
a.这份代码实现什么功能、包括了哪些功能模块、功能模块之间调用顺序和逻辑是什么样的
b.每个功能模块实现逻辑是什么,输入输出参数和参数的类型
c.api描述包括了哪些部分,每部分功能是什么
d.给每个功能函数上生成详细注释
e.给定service名或者rpc名把实现代码拎出来
f.生成代码执行流程描述
g.给定描述生成源码
h.给定代码流程生成框架代码
i.给定代码按要求代码
j.代码问答,莫某功能在哪实现,原理是什么,某某函数包含什么参数

小结:

这篇文章比较全面的把code生成大模型实践性需要的东西梳理了一遍。从模型、数据、任务设计给出了可执行层面的梳理,给出了目前主流的一些代码生成模型、和可以用来训练的数据、以及为了让模型具备能力应该要考虑设计的任务,同时也结合一个例子给出了数据如何设计的思路。

1.对于模型的考量从两个维度:预训练、instruct的训练使用企业应用的不同需求。

2.对于数据设计给出了预训练、instruction两部分,同时对两大部分做了更下一个粒度细分

3.对于任务设计也给出了单点任务设计、多轮对话/cot两部分

4.对于模型训练块留在下一篇文章介绍

 

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

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

相关文章

IPv4,IPv6,TCP,路由

主要回顾一下TCP&#xff0f;IP的传输过程&#xff0c;在这个过程中&#xff0c;做了什么事情 ip : 网际协议,IP协议能让世界上任意两台计算机之间进行通信。 IP协议的三大功能&#xff1a; 寻址和路由传递服务&#xff1a;不可靠&#xff08;尽最大努力交付传输数据包&…

数据仓库一分钟

数据分层 一、数据运营层&#xff1a;ODS&#xff08;Operational Data Store&#xff09; “面向主题的”数据运营层&#xff0c;也叫ODS层&#xff0c;是最接近数据源中数据的一层&#xff0c;数据源中的数据&#xff0c;经过抽取、洗净、传输&#xff0c;也就说传说中的 ETL…

模板方法模式(十六)

相信自己&#xff0c;请一定要相信自己 上一章简单介绍了代理模式(十五), 如果没有看过, 请观看上一章 一. 模板模式 引用 菜鸟教程里面的 模板模式介绍: https://www.runoob.com/design-pattern/template-pattern.html 在模板模式&#xff08;Template Pattern&#xff09;…

什么是PPS和TOD时序?授时防护设备是什么?

介绍 PPS和TOD PPS和TOD是两种用于精确时间同步的技术&#xff0c;它们在许多领域都有广泛的应用&#xff0c;总的来说&#xff0c;PPS和TOD被广泛应用于各种需要高度精确时间同步的领域&#xff0c;包括通信、测量、测试、系统集成和计算机网络等。 一、PPS PPS&#xff08…

Zookeeper集群单节点启动成功但未同步其他节点数据

首先排查节点启动是否正常&#xff1a; 在zookeeper的bin目录下执行&#xff1a;sh zkServer.sh status 判断当前节点数据leader 还是follower 节点都启动正常&#xff0c;但某一个zookeeper集群节点&#xff08;下面简称“异常节点”&#xff09;不同步其他节点数据&#xf…

redis高级----------主从复制

redis的四种模式&#xff1a;单例模式&#xff1b;主从模式&#xff1b;哨兵模式&#xff0c;集群模式 一、主从模式 单例模式虽然操作简单&#xff0c;但是不具备高可用 缺点&#xff1a; 单点的宕机引来的服务的灾难、数据丢失单点服务器内存瓶颈&#xff0c;无法无限纵向扩…

flink sql checkpoint 调优配置

- execution.checkpointing.interval: 检查点之间的时间间隔&#xff08;以毫秒为单位&#xff09;。在此间隔内&#xff0c;系统将生成新的检查点 SET execution.checkpointing.interval 6000; - execution.checkpointing.tolerable-failed-checkpoints: 允许的连续失败检查…

大数据与移动应用开发技术综合实训室建设方案

一 、系统概述 大数据与移动应用开发技术综合作为新一代信息技术的重点和促进信息消费的核心产业&#xff0c;已成为我国转变信息服务业的发展新热点&#xff1a;成为信息通信领域发展最快、市场潜力最大的业务领域。互联网尤其是移动互联网&#xff0c;以其巨大的信息交换能力…

bh002- Blazor hybrid / Maui 使用ORM和数据库快速教程

接上篇 bh002- Blazor hybrid / Maui 保存设置快速教程 源码 10. 添加引用 Index.razor.cs 添加引用 using FreeSql.DataAnnotations; #if WINDOWS using Windows.Storage; #endif 11. 简单使用freesql ORM 初始化数据,添加数据 public partial class Index {[DisplayNam…

2022年06月 C/C++(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题:制作蛋糕 小A擅长制作香蕉蛋糕和巧克力蛋糕。制作一个香蕉蛋糕需要2个单位的香蕉,250个单位的面粉,75个单位的糖,100个单位的黄油。制作一个巧克力蛋糕需要75个单位的可可粉,200个单位的面粉,150个单位的糖,150个单位的黄油。一个香蕉蛋糕可以卖出400元,而一个巧…

Matlab论文插图绘制模板第108期—特征渲染的标签散点图

在之前的文章中&#xff0c;分享了Matlab标签散点图的绘制模板&#xff1a; 进一步&#xff0c;再来分享一下特征渲染的标签散点图的绘制模板&#xff0c;以便再添加一个维度的信息。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中…

蓝凌OA custom.jsp 任意文件读取

​曾子曰&#xff1a;“慎终追远&#xff0c;民德归厚矣。” 漏洞复现 访问漏洞url&#xff1a; 出现漏洞的文件为 custom.jsp&#xff0c;构造payload&#xff1a; /sys/ui/extend/varkind/custom.jsp var{"body":{"file":"file:///etc/passwd&q…

ESP32-新建工程

目录 本文简介 实验平台 正文 一、安装开发环境 1、安装内容 2、启动 ESP-IDF 环境 二、开始创建工程 三、配置工程 四、编译工程 五、烧录到设备 六、监视输出 七、在工程中创建自己的文件夹 本文简介 idf.py 命令行工具提供了一个前端&#xff0c;可以帮助您轻松…

在Windows下安装PIP+Phantomjs+Selenium

最近准备深入学习Python相关的爬虫知识了&#xff0c;如果说在使用Python爬取相对正规的网页使用"urllib2 BeautifulSoup 正则表达式"就能搞定的话&#xff1b;那么动态生成的信息页面&#xff0c;如Ajax、JavaScript等就需要通过"Phantomjs CasperJS Selen…

DP读书:鲲鹏处理器 架构与编程(八)3.1鲲鹏处理器片上系统与Taishan处理器内核架构

鲲鹏处理器片上系统架构 一、鲲鹏处理器片上系统与Taishan处理器内核架构1. 鲲鹏处理器片上系统概况a. 鲲鹏处理器片上系统与鲲鹏芯片家族b. 鲲鹏920处理器片上系统的组成部件c. 鲲鹏920处理器片上系统的特征d. 鲲鹏920处理器片上系统的逻辑结构 2. Taishan V110 处理器内核微架…

greenplum gpfdist外部表(只读)的实现---理论

经过项目的验证测试以及初步商用化&#xff0c;本篇将进一步讲解greenplum外部表的实现原理&#xff0c;包括设计原则、交互协议与实现流程。gpfdist工具的简介与使用见回顾greenplum gpfdist工具。 1 设计原则 greenplum作为分布式分析型数据库&#xff0c;其每个节点都是独立…

使用ChatGPT-4优化编程效率:高效查询代码示例和解决方案

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

python中(限小白,大佬勿入)python开发中的trick:常量

开场白 我是小白&#xff0c;今天被前端骂了一顿&#xff1a;我们交接不是说好了就给你四个变量&#xff1a;A&#xff0c;B。C。D。你这命名的这么具体&#xff0c;我这边给你传值不是很方便啊&#xff08;因为不同模块有复用的图片路径&#xff09;&#xff0c;我说“那我改&…

Laravel 模型的作用域 模型的访问器和修改器 ⑨

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; THINK PHP &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &#x1f44…