代码生成大模型属于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% |

本文围绕代码生成大模型训练所需的模型、数据、任务设计展开。指出代码生成大模型是语言模型特例,训练语料包括预训练和指令数据等。介绍了多种预训练和指令数据集,以及预训练和指令任务的设计方式,还结合例子给出数据设计思路。
最低0.47元/天 解锁文章
1511

被折叠的 条评论
为什么被折叠?



