代码生成综述

代码生成大模型属于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.rhkb.cn/news/99486.html

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

相关文章

【2023年11月第四版教材】《第5章-信息系统工程之软件工程(第二部分)》

《第5章-信息系统工程之软件工程&#xff08;第二部分&#xff09;》 1.3 软件设计1.4 软件实现&#xff3b;补充第三版教材内容&#xff3d; 1.5 部署交付 1.3 软件设计 1、结构化设计SD是一种面向数据流的方法&#xff0c;它以SRS和SA阶段所产生的DFD和数据字 典等文档为基础…

无人机精细化巡检方案制定:提高效率与准确性的关键

在当前技术日新月异的时代&#xff0c;无人机在多个领域的应用已成为行业标配。但如何制定出一套有效、细致的无人机巡检方案&#xff0c;确保其最大效能&#xff0c;成为许多组织与公司的核心议题。其中&#xff0c;复亚智能在此领域已展现出了卓越的实力与深入的见解。 1. 精…

TCP中窗口和滑动窗口的含义以及流量控制

一.窗口 在TCP中由于要保证可靠性&#xff0c;所以每发送一条数据后&#xff0c;都需要接收方返回一条应答报文&#xff0c;要是我们每发送一条数据&#xff0c;发送方就等待接收应答报文&#xff0c;收到之后再去发送下一条数据&#xff0c;这样我们就会花费大量的时间在等待应…

一文预览 | 8 月 16 日 NVIDIA 在 WAVE SUMMIT深度学习开发者大会 2023精彩亮点抢先看!

由深度学习技术及应用国家工程研究中心主办&#xff0c;百度飞桨和文心大模型承办的 WAVE SUMMIT深度学习开发者大会2023&#xff0c;将于 8 月 16 日在北京与大家见面。NVIDIA 作为技术合作伙伴&#xff0c;将携手百度飞桨参与这场技术盛会。 在这次大会中&#xff0c;NVIDIA…

【从零开始的rust web开发之路 二】axum中间件和共享状态使用

系列文章目录 第一章 axum学习使用 第二章 axum中间件使用 文章目录 系列文章目录前言一、中间件是什么二、中间件使用常用中间件使用中间件使用TraceLayer中间件实现请求日志打印自定义中间件 共享状态 前言 上篇文件讲了路由和参数相应相关的。axum还有个关键的地方是中间件…

微信小程序 游戏水平评估系统的设计与实现_pzbe0

近年来&#xff0c;随着互联网的蓬勃发展&#xff0c;游戏公司对信息的管理提出了更高的要求。传统的管理方式已无法满足现代人们的需求。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;随着各行业的不断发展&#xff0c;使命召…

【C++习题集】-- 堆

&#xff08;用于复习&#xff09; 目录 树概念及结构 名词概念 二叉树概念及结构 特殊的二叉树 满二叉树 完全二叉树 运算性质 二叉树存储结构 顺序存储 链式存储 堆 - 顺序存储 堆的性质 堆的实现 堆的应用 堆排序 直接建堆法 树概念及结构 概念&#xff1a…

【目标检测中对IoU的改进】GIoU,DIoU,CIoU的详细介绍

文章目录 1、IoU2、GIoU(Generalized Intersection over Union)3、DIoU4、CIoU 1、IoU IoU为交并比&#xff0c;即对于pred和Ground Truth&#xff1a;交集/并集 1、IoU可以作为评价指标使用&#xff0c;也可以用于构建IoU loss 1 - IoU 缺点&#xff1a; 2、对于pred和GT相…

[MySQL]主从服务器布置

配置主服务器 配置文件 /etc/my.cnf 在[mysqld]下进行配置 log_binON //启动二进制日志 log-bin mysql-bin //启用二进制日志&#xff0c;用于记录主服务器的更新操作 server-id 1 // 用来表示mysql服务id,保证集成环境中的唯一性 , 范围 [1,2^32) read-only0 // 1表示只…

ChatGLM-6B微调记录

目录 GLM-130B和ChatGLM-6BChatGLM-6B直接部署基于PEFT的LoRA微调ChatGLM-6B GLM-130B和ChatGLM-6B 对于三类主要预训练框架&#xff1a; autoregressive&#xff08;无条件生成&#xff09;&#xff0c;GPT的训练目标是从左到右的文本生成。autoencoding&#xff08;语言理解…

如何在windows电脑安装多个tomcat服务器和乱码问题

前提条件安装jdk 以17版本为例&#xff0c;将jdk8卸载干净 1.首先进入tomcat官网下载 tomcat网址 这里下载tomcat10为例子 1.1 这里选择方式一 下载解压版 2.解压后拷贝三份 分别命名为 8081、 8082、 8083 3.分别对每个tomcat执行以下操作 3.1 找到tomcat所在webapps文…

java的类和对象详解

一、java是面向对象的编程语言 首先一般的编程语言有两种&#xff0c;一种是面向对象&#xff0c;一种是面向过程。前者更加关注代码中对象与对象之间关系与协作&#xff0c;而后者更加注重代码的执行过程。 举个例子 传统的方式&#xff1a;注重的是洗衣服的过程&#xff0c;…

引领行业高质量发展|云畅科技参编《低代码开发平台创新发展路线图(2023)》

8月8日-9日&#xff0c;中国电子技术标准化研究院于北京顺利召开《低代码开发平台创新发展路线图&#xff08;2023&#xff09;》封闭编制会。云畅科技、浪潮、百度、广域铭岛等来自低代码开发平台解决方案供应商、用户方、科研院所等近30家相关单位的40余位专家参与了现场编制…

CentOS 8.5修改安装包镜像源

1 备份原配置 cd /etc/yum.repos.d mkdir backup mv *.repo backup/2 下载镜像源 2.1 使用wget下载 wget http://mirrors.aliyun.com/repo/Centos-8.repo2.2 使用curl下载 我是安装的最小版本的系统&#xff0c;默认只有curl curl使用方法&#xff1a;https://www.ruanyife…

【分布式共识】Multi-Paxos 算法思想

上一篇文章主要聊了Basic Paxos算法&#xff0c;而Multi-Paxos并不是一种算法&#xff0c;是一种算法思想。具体就是Basic Paxos解决的是对一个值达成共识。而后者是通过执行多次的Basic Paxos算法就多个值达成一致。具体的落地实现有Raft。 Muti-Paxos的问题 在Basic Paxos中…

14、缓存预热+缓存雪崩+缓存击穿+缓存穿透

缓存预热缓存雪崩缓存击穿缓存穿透 ● 缓存预热、雪崩、穿透、击穿分别是什么&#xff1f;你遇到过那几个情况&#xff1f; ● 缓存预热你是怎么做到的&#xff1f; ● 如何避免或者减少缓存雪崩&#xff1f; ● 穿透和击穿有什么区别&#xff1f;它两一个意思还是截然不同&am…

CW4-6A-S、CW4-10A-S、CW4-20A-S、CW4-30A-S螺栓式滤波器

CW3L2-3A-S、CW3L2-6A-S、CW3L2-10A-S、CW3L2-20A-S CW3-3A-S、CW3-6A-S、CW3-10A-S、CW3-20A-S、CW3-30A-S CW4EL2-3A-S、CW4EL2-6A-S、CW4EL2-10A-SCW4EL2-20A-S、CW4EL2-30A-S CW4E-3A-S、CW4E-6A-S、CW4E-10A-S、CW4E-20A-S、CW4E-30A-S CW4E-40A-S(001)、CW4E-50A-S(0…

论文导读 | Operation ResearchManagement Science近期文章精选

推文作者&#xff1a;周梓渊 编者按 如何准确估计和预测债券风险溢价&#xff1f;债券保险是否为市政债券的发行人提供价值&#xff1f;我们如何界定社会福利政策对小部分群体的负面影响&#xff1f;垄断零售商的线上线下定价有何诀窍&#xff1f;顶刊中的行为理论真的对应现实…

排名前 6 位的数学编程语言

0 说明 任何对数学感兴趣或计划学习数学的人&#xff0c;都应该至少对编程语言有一定的流利程度。您不仅会更有就业能力&#xff0c;还可以更深入地理解和探索数学。那么你应该学习什么语言呢&#xff1f; 1.python 对于任何正在学习数学的人来说&#xff0c;Python都是一门很棒…

win10系统docker创建ubuntu容器解决开发环境问题

一、win10系统使用docker的原因 最近啊&#xff0c;在学习人工智能-深度学习&#xff0c;用的win10系统进行开发&#xff0c;老是出现一些莫名其妙的问题&#xff0c;无法解决&#xff0c;每天都在为环境问题搞得伤透了脑筋。 说到底还是要使用Linux系统进行开发比较合适。 …