[发明专利]一种基于GAT图神经网络模型的代码克隆检测方法在审
| 申请号: | 202111291169.3 | 申请日: | 2021-11-02 |
| 公开(公告)号: | CN113961241A | 公开(公告)日: | 2022-01-21 |
| 发明(设计)人: | 葛季栋;李传艺;惠天宇;唐泽 | 申请(专利权)人: | 南京大学 |
| 主分类号: | G06F8/75 | 分类号: | G06F8/75;G06K9/62;G06N3/04;G06N3/08 |
| 代理公司: | 暂无信息 | 代理人: | 暂无信息 |
| 地址: | 210023 江*** | 国省代码: | 江苏;32 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 基于 gat 神经网络 模型 代码 克隆 检测 方法 | ||
1.一种基于GAT图神经网络模型的代码克隆检测方法,其特征在于包含以下步骤:
步骤(1)根据克隆代码的定义,从编程竞赛网站和现有代码克隆数据集提取生成相应定义的克隆代码数据;
步骤(2)解析代码文本生成AST抽象语法树;
步骤(3)在AST抽象语法树的基础上增加人工定义边生成表示图;
步骤(4)将代码表示图输入GAT网络模型训练获得图表征向量;
步骤(5)拼接克隆代码对的表征向量输入二分类网络;
步骤(6)输出代码克隆预测结果。
2.根据权利要求1所述的一种基于GAT图神经网络模型的代码克隆检测方法,其特征在于步骤(1)中根据克隆代码的定义,从编程竞赛网站和现有代码克隆数据集提取生成相应定义的克隆代码数据,继而构建数据集。
3.根据权利要求1所述的一种基于GAT图神经网络模型的代码克隆检测方法,其特征在于步骤(2)中解析代码文本生成AST抽象语法树。
4.根据权利要求1所述的一种基于GAT图神经网络模型的代码克隆检测方法,其特征在于步骤(3)中在AST抽象语法树的基础上增加人工定义边生成表示图,具体子步骤包括:
步骤(3.1)人工定义附加边。根据编程语言的代码结构信息和数据依赖信息人工定义划分了两大类边的类型:结构型边和语义型边。其中,结构型边主要用于表示代码内部的结构特征信息,它基于AST的原有结构以及Java的语法规则进行定义。具体的,又可以分为四个种类:AST结构边、循环结构边、条件分支结构边以及其他结构型边。语义型边,也可称作依赖型边,它主要表示代码中数据流的依赖关系。根据不同的依赖关系相应的也可将其继续划分为两个种类:赋值语义边和变量使用链边;
步骤(3.2)构建生成图结构。在原有AST结构基础上增加人工定义边构建有向图用以表征原代码的图结构信息。
5.根据权利要求1所述的一种基于GAT图神经网络模型的代码克隆检测方法,其特征在于步骤(4)中将代码表示图输入GAT网络模型训练获得图表征向量。具体子步骤包括:
步骤(4.1)设计GAT图神经网络模型结构。使用图注意力网络GAT来构建图神经网络模型,并在模型每一层基础上增加残差连接,然后在模型的最后部分增加一个readout函数模型层用以获得图表示向量;
步骤(4.2)利用克隆代码数据训练模型。将输入的克隆代码对中各自代码的表征图输入上一步设计的网络模型结构中,并且对于输入的一对代码的图表示结构使用参数权重共享的图网络模型进行训练,得到代码的图表征向量。
6.根据权利要求1所述的一种基于GAT图神经网络模型的代码克隆检测方法,其特征在于步骤(5)中根据上一步骤中得到的克隆代码对的图表征向量,拼接向量形成二分类任务输入向量,输入二分类网络进行训练。具体子步骤包括:
步骤(5.1)拼接图表征向量。对于输入的克隆代码对获得的图表征向量,以不同的顺序进行拼接获得输入向量;
步骤(5.2)输入权重共享的深度隐层网络进行训练;
步骤(5.3)使用Average pooling层处理得到判别隐向量;
步骤(5.4)使用二分类浅层神经网络进行训练预测。
7.根据权利要求1所述的一种基于GAT图神经网络模型的代码克隆检测方法,其特征在于步骤(6)输出代码克隆预测结果。代码克隆预测结果的效果采用准确率、召回率和F1分数进行评估。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202111291169.3/1.html,转载请声明来源钻瓜专利网。





