【技术实现步骤摘要】
一种基于元学习的代码自适应生成方法
本专利技术涉及一种基于元学习的代码自适应生成方法,尤其涉及一种利用程序静态分析、图神经网络技术和元学习技术实现自适应的代码生成方法,属于软件工程
技术介绍
集成开发环境(IDE)已成为现代软件工程师的基本范式,它提供了一组有用的服务来加速软件开发。代码生成(补全)是IDE中最有价值的功能之一,尤其是当开发人员不熟悉代码库时。它可以建议下一个可能的代码单元,例如变量名或函数调用,包括API调用。近年来,研究者提出了许多代码生成的模型,使用机器学习技术从大量开源代码数据库提取数据进行训练,但是,不同的开发人员具有不同的编码风格,许多优秀的开发团队都有自己的开发风格指南。当合并不同开发人员的代码时,同时会使得不同的编码风格互相混淆。所以现有的代码生成模型无法根据编程人员的个性化需求进行正确和高效的生成代码。因此,期望代表不同的代码模式来建立适应性代码推荐模型。获得自适应代码生成结果的直接方法是从相关代码(例如同一项目中的代码文件)中学习类似的代码模式。然后重新训练模型,以便它可 ...
【技术保护点】
1.一种基于元学习的代码自适应生成方法,其特征在于,包括下述步骤:/nS1:构建训练数据集/n对从开源代码数据库中获取的若干代码数据,并对各代码数据分别进行如下处理:将代码数据解析为抽象语法树,使用程序语法中非终结符的名称标记抽象语法树中的节点;经过控制流分析以及数据流分析得到抽象语法树中节点在数据流和控制流中的关系,在抽象语法树中表示增加表示上述关系的边,得到了包含代码上下文语义信息的代码图;选择代码图的一个表达式作为预测目标,该代码图的剩余部分作为输入,预测目标和输入形成一个样本;按照项目对代码数据进行分类,形成具有不同代码风格的训练数据集;/nS2:构建基础代码生成模 ...
【技术特征摘要】
1.一种基于元学习的代码自适应生成方法,其特征在于,包括下述步骤:
S1:构建训练数据集
对从开源代码数据库中获取的若干代码数据,并对各代码数据分别进行如下处理:将代码数据解析为抽象语法树,使用程序语法中非终结符的名称标记抽象语法树中的节点;经过控制流分析以及数据流分析得到抽象语法树中节点在数据流和控制流中的关系,在抽象语法树中表示增加表示上述关系的边,得到了包含代码上下文语义信息的代码图;选择代码图的一个表达式作为预测目标,该代码图的剩余部分作为输入,预测目标和输入形成一个样本;按照项目对代码数据进行分类,形成具有不同代码风格的训练数据集;
S2:构建基础代码生成模型,并利用S1中的训练数据集进行训练
所述基础代码生成模型一个编码器-解码器结构,编码器使用图神经网络计算出代码图代表上下文语义的向量表示,输入到解码器中;解码器根据语言语法中的产生规则和当前上下文语义的向量表示一次扩展一个标记token,直至生成目标代码表达式;
S3:基于元学习和训练数据集,对S2训练完成的基础代码生成模型继续学习,生成自适应代码生成模型;
S4:对用户提供具有指定代码风格的代码文件,按照S1中的代码数据处理方法进行处理后,输入S3中的自适应代码生成模型,通过元学习生成具有目标风格的代码生成模型;
S5:输入当前编程上下文代码,按照S1中的代码数据处理方法进行处理后,输入S3中的自...
【专利技术属性】
技术研发人员:张智轶,方立宇,黄志球,陶传奇,张静宣,杨文华,周宇,
申请(专利权)人:南京航空航天大学,
类型:发明
国别省市:江苏;32
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。