[发明专利]一种基于神经网络语言模型的重复代码检测方法有效
| 申请号: | 201710464437.4 | 申请日: | 2017-06-19 |
| 公开(公告)号: | CN107273294B | 公开(公告)日: | 2020-07-28 |
| 发明(设计)人: | 屈鸿;符明晟;涂强;刘洋军;张亦洲;王一文;高榕;陈珊 | 申请(专利权)人: | 电子科技大学 |
| 主分类号: | G06F11/36 | 分类号: | G06F11/36;G06N3/02 |
| 代理公司: | 成都弘毅天承知识产权代理有限公司 51230 | 代理人: | 徐金琼;刘东 |
| 地址: | 611731 四川省成*** | 国省代码: | 四川;51 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 基于 神经网络 语言 模型 重复 代码 检测 方法 | ||
1.一种基于神经网络语言模型的重复代码检测方法,其特征在于,包括以下步骤:
步骤1:将所有的代码中的每个代码转换为相应的CFG图;
步骤2:抽取每个CFG图中每一个结点的根子图;
步骤3:将所有根子图采用向量表示;
步骤4:将根子图的向量表示输入到深度图核函数中学习,得到所有CFG图两两间的相似度;
步骤5:将CFG图两两间的相似度输入到AP关联聚类算法中进行CFG图的聚类得到多个聚类簇,在同一个聚类簇中的CFG图所对应的代码即为重复代码;
所述步骤2的步骤如下:
步骤21:给定CFG图中每一个结点v要抽取的根子图的度d,若d=0,表示并不需要抽取根子图,否则转到步骤22;
步骤22:利用广度优先搜索算法获得结点v的所有邻居结点;
步骤23:对于结点v的每一个邻居结点v'n,获取其度为d-1的邻居子图,并将邻居子图保存在一个列表中,其中,d度邻居子图指的是与结点v距离为d的结点所构成的子图,与根节点距离为d的结点并不需要都出现在根节点的d度邻居子图中,即根节点的d度邻居子图可以有多个;
步骤24:获取结点v的度为d-1的邻居子图,将其与中相同的邻居子图进行连接,即得到了所需要的根子图
所述步骤3的步骤如下:
步骤31:利用随机值为所有的根子图初始化一个向量表示
步骤32:利用改进的Skip Gram模型对根子图的初始化向量表示进行更新,输出所有根子图最终的向量表示具体步骤如下:
步骤321:将结点为v的d度邻居子图的上下文sgcont定义为:以结点v的邻居结点为根节点,由所有邻居结点的度为d-1,d,d+1的邻居子图所构成的集合;
步骤322:使用固定长度的滑动窗口技术,在根子图的辐射状上下文进行滑动,进行固定长度选取;
步骤323:将Skip Gram模型中不同窗口间的投影层与输出层间的权值设置为共享,将步骤322选取的一固定长度上下文输入到Skip Gram模型中进行学习,得到本次循环的向量表示;
步骤324:若达到给定的循环终止次数,则停止循环,输出所有根子图的最终向量表示否则跳转到步骤322,执行下一次循环。
2.根据权利要求1所述的一种基于神经网络语言模型的重复代码检测方法,其特征在于:所述步骤323的具体步骤为:
步骤3231:将输入层中输入的上下文输入到投影层中,投影层是一个恒等投影,并不需要对输入层数据做任何处理;
步骤3232:将投影层的数据通过目标函数调整后输入到输出层中,输出层对应一棵二叉树,它是以根子图集合中出现过的根子图当叶子结点,以根子图在所有根子图中出现的次数当权值构造出来的Huffman树,再由输出层输出本次循环的向量表示;目标函数通常取为:给定v结点的根子图的初始化向量表示最大化初始化向量表示的上下文sgcont中每一个邻居子图的概率使用负采样方法来近似这一概率分布。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于电子科技大学,未经电子科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710464437.4/1.html,转载请声明来源钻瓜专利网。





