一种基于元学习的代码自适应生成方法技术

技术编号:26790097 阅读:23 留言:0更新日期:2020-12-22 17:04
本发明专利技术公开一种基于元学习的代码自适应生成方法,首先构建包含不同代码风格的数据集,并对基础代码生成模型进行训练,基础代码生成模型采用编码器‑解码器结构,编码器使用图神经网络计算代码图的状态向量,表示程序当前上下文信息;解码器使用语言语法中的产生规则,根据上下文信息生成目标代码表达式;再通过元学习,学习不同的代码风格,从而训练出能够对新的风格代码做出快速而准确的学习的自适应代码生成模型;最终用户指定目标风格代码,对自适应代码生成模型再进行元训练过程,模型就能够生成具有目标风格的代码。本发明专利技术作为一种代码生成方法引入了元学习技术,能够根据编程人员不同的个性化代码风格正确和高效的生成代码。

【技术实现步骤摘要】
一种基于元学习的代码自适应生成方法
本专利技术涉及一种基于元学习的代码自适应生成方法,尤其涉及一种利用程序静态分析、图神经网络技术和元学习技术实现自适应的代码生成方法,属于软件工程

技术介绍
集成开发环境(IDE)已成为现代软件工程师的基本范式,它提供了一组有用的服务来加速软件开发。代码生成(补全)是IDE中最有价值的功能之一,尤其是当开发人员不熟悉代码库时。它可以建议下一个可能的代码单元,例如变量名或函数调用,包括API调用。近年来,研究者提出了许多代码生成的模型,使用机器学习技术从大量开源代码数据库提取数据进行训练,但是,不同的开发人员具有不同的编码风格,许多优秀的开发团队都有自己的开发风格指南。当合并不同开发人员的代码时,同时会使得不同的编码风格互相混淆。所以现有的代码生成模型无法根据编程人员的个性化需求进行正确和高效的生成代码。因此,期望代表不同的代码模式来建立适应性代码推荐模型。获得自适应代码生成结果的直接方法是从相关代码(例如同一项目中的代码文件)中学习类似的代码模式。然后重新训练模型,以便它可以调整参数以适合结果本文档来自技高网...

【技术保护点】
1.一种基于元学习的代码自适应生成方法,其特征在于,包括下述步骤:/nS1:构建训练数据集/n对从开源代码数据库中获取的若干代码数据,并对各代码数据分别进行如下处理:将代码数据解析为抽象语法树,使用程序语法中非终结符的名称标记抽象语法树中的节点;经过控制流分析以及数据流分析得到抽象语法树中节点在数据流和控制流中的关系,在抽象语法树中表示增加表示上述关系的边,得到了包含代码上下文语义信息的代码图;选择代码图的一个表达式作为预测目标,该代码图的剩余部分作为输入,预测目标和输入形成一个样本;按照项目对代码数据进行分类,形成具有不同代码风格的训练数据集;/nS2:构建基础代码生成模型,并利用S1中的训...

【技术特征摘要】
1.一种基于元学习的代码自适应生成方法,其特征在于,包括下述步骤:
S1:构建训练数据集
对从开源代码数据库中获取的若干代码数据,并对各代码数据分别进行如下处理:将代码数据解析为抽象语法树,使用程序语法中非终结符的名称标记抽象语法树中的节点;经过控制流分析以及数据流分析得到抽象语法树中节点在数据流和控制流中的关系,在抽象语法树中表示增加表示上述关系的边,得到了包含代码上下文语义信息的代码图;选择代码图的一个表达式作为预测目标,该代码图的剩余部分作为输入,预测目标和输入形成一个样本;按照项目对代码数据进行分类,形成具有不同代码风格的训练数据集;
S2:构建基础代码生成模型,并利用S1中的训练数据集进行训练
所述基础代码生成模型一个编码器-解码器结构,编码器使用图神经网络计算出代码图代表上下文语义的向量表示,输入到解码器中;解码器根据语言语法中的产生规则和当前上下文语义的向量表示一次扩展一个标记token,直至生成目标代码表达式;
S3:基于元学习和训练数据集,对S2训练完成的基础代码生成模型继续学习,生成自适应代码生成模型;
S4:对用户提供具有指定代码风格的代码文件,按照S1中的代码数据处理方法进行处理后,输入S3中的自适应代码生成模型,通过元学习生成具有目标风格的代码生成模型;
S5:输入当前编程上下文代码,按照S1中的代码数据处理方法进行处理后,输入S3中的自...

【专利技术属性】
技术研发人员:张智轶方立宇黄志球陶传奇张静宣杨文华周宇
申请(专利权)人:南京航空航天大学
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1