自动代码生成
如Coplilot、CodeGeeX等代码补全插件现在以及支持对代码自动生成,提升开发者效率。代码生成主要包括:代码生成、注释生产/代码解释和代码翻译等工作。
代码与训练模型介绍
代码预训练具有如下特点:多语言能力掌握、代码特殊格式处理。评测代码预训练结果主要考虑:追求正确性、功能、逻辑正确实现、实现用户意图。
基于Transformer的代码与训练模型
CodeBERT
模型架构:Encoder架构模型
训练数据:自然语言-代码对 CodeSearchNet数据集
预训练任务:掩码预测、替换Token检测
下游任务:代码搜索、检测,(附加解码器)进行文档生成
GraphCodeBERT
在CodeBERT基础上引入代码结构信息:数据流图,表示变量的相互引用关系。
输入:文本+代码+变量符号
变量符号的注意力:GraphCodeBERT通过数据流图的边关系来影响注意力机制的计算。文本与代码间可以相互计算注意力,但是变量符号间,有边的变量才可以相互计算注意力。同时,代码段中的变量可以与变量符号序列中的变量计算注意力,因为他们本质是一样的。
预训练任务:掩码预测、数据流图连边预测、代码与变量符号关联预测
大规模预训练模型
CodeX
首个大规模代码生成模型,基于GPT-3 12B进行微调。159GB Python代码数据训练,编程题目微调。
CodeGeeX
基于MindSpore实现的13B多语言代码生成预训练模型。
训练数据分为两个部分:开源数据集(代码子集,多语言)、CodeParrot(Python),额外爬取的数据集:GitHub上优质的开源仓库。总共包含23种编程语言。
数据清洗
按照完全匹配去重文件,根据长度、字符取出无效文件。
在文件开头以注释形式标记语言。如 # language:Python,添加一些其他的元信息(InCoder工作)。
基于自然语言分词器:GPT-2 BPE Tokenizer进行分词。对于代码中特有的连续空格编码成为特殊空格字符,减少空格编码数。
每个文件切分为2048长度的序列作为训练样本,不足最大长度使用终止符补齐。
模型架构
基于GPT架构的自回归模型,由40层Transformer Decoder组成,模型规模为13B。
TopQueryEmb是由一个独立的位置编码生成的一个可学习的Embedding,作为Top Query Layer的Q。
更多内容可参考MindSpore官方视频:第六课:代码预训练_哔哩哔哩_bilibili