[发明专利]一种基于元学习的代码自适应生成方法有效
申请号: | 202010932958.X | 申请日: | 2020-09-08 |
公开(公告)号: | CN112114791B | 公开(公告)日: | 2022-03-25 |
发明(设计)人: | 张智轶;方立宇;黄志球;陶传奇;张静宣;杨文华;周宇 | 申请(专利权)人: | 南京航空航天大学 |
主分类号: | G06F8/30 | 分类号: | G06F8/30;G06N3/08 |
代理公司: | 南京经纬专利商标代理有限公司 32200 | 代理人: | 刘莎 |
地址: | 211106 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 学习 代码 自适应 生成 方法 | ||
1.一种基于元学习的代码自适应生成方法,其特征在于,包括下述步骤:
S1:构建训练数据集
对从开源代码数据库中获取的若干代码数据,并对各代码数据分别进行如下处理:将代码数据解析为抽象语法树,使用程序语法中非终结符的名称标记抽象语法树中的节点;经过控制流分析以及数据流分析得到抽象语法树中节点在数据流和控制流中的关系,在抽象语法树中表示增加表示上述关系的边,得到了包含代码上下文语义信息的代码图;选择代码图的一个表达式作为预测目标,该代码图的剩余部分作为输入,预测目标和输入形成一个样本;按照项目对代码数据进行分类,形成具有不同代码风格的训练数据集;
S2:构建基础代码生成模型,并利用S1中的训练数据集进行训练
所述基础代码生成模型一个编码器-解码器结构,编码器使用图神经网络计算出代码图代表上下文语义的向量表示,输入到解码器中;解码器根据语言语法中的产生规则和当前上下文语义的向量表示一次扩展一个标记token,直至生成目标代码表达式;
S3:基于元学习和训练数据集,对S2训练完成的基础代码生成模型继续学习,生成自适应代码生成模型;
S4:对用户提供具有指定代码风格的代码文件,按照S1中的代码数据处理方法进行处理后,输入S3中的自适应代码生成模型,通过元学习生成具有目标风格的代码生成模型;
S5:输入当前编程上下文代码,按照S1中的代码数据处理方法进行处理后,输入S3中的自适应代码生成模型,生成具有目标风格的代码。
2.如权利要求1所述的一种基于元学习的代码自适应生成方法,其特征在于,给定上下文信息c能生成抽象语法树a的概率公式如下:p(a|c)=∏tp(at|c,a<t),其中at表示解码器生成目标表达式的过程中第t次生成的token,a<t表示在t次前生成的部分语法树。
3.如权利要求1所述的一种基于元学习的代码自适应生成方法,其特征在于,步骤S3具体为:将不同代码风格视为元学习中的任务,在元训练的每次迭代中随机选取训练数据集中的n个任务,对每个任务中k个样本进行随机梯度下降,在每若干次元训练迭代后执行一次元测试;元测试时随机选取训练数据集中未进行过元训练的1个任务,对该任务中k个样本进行随机梯度下降,测试参数更新后的基础代码生成模型对该任务中其他样本的生成准确率;设置一个结束标志位E=0,若当前生成准确率小于前次元测试得到的生成准确率,则E=E+1,当E大于等于3或者达到元训练的最大迭代次数是元学习结束;基础代码生成模型的参数更新公式为:其中θ表示基础代码生成模型的参数,ε表示学习率,θi表示在第i个任务中进行梯度下降后的参数。
4.如权利要求1所述的一种基于元学习的代码自适应生成方法,其特征在于,步骤S2中基础代码生成模型优化过程的目标函数为生成的代码与目标代码的交叉熵,使用Adam优化器进行参数更新。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京航空航天大学,未经南京航空航天大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010932958.X/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种餐余垃圾处理装置
- 下一篇:一种拜耳法氧化铝生产焙烧炉烟气余热回收系统