[发明专利]一种基于RvNN+Transformer神经网络模型的代码语义克隆检测方法在审
申请号: | 202210052857.2 | 申请日: | 2022-01-18 |
公开(公告)号: | CN114398079A | 公开(公告)日: | 2022-04-26 |
发明(设计)人: | 陈昊亮;高红雨;苏航 | 申请(专利权)人: | 北京工业大学 |
主分类号: | G06F8/75 | 分类号: | G06F8/75;G06F8/41;G06N3/04 |
代理公司: | 北京思海天达知识产权代理有限公司 11203 | 代理人: | 沈波 |
地址: | 100124 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 rvnn transformer 神经网络 模型 代码 语义 克隆 检测 方法 | ||
本发明公开了一种基于RvNN+Transformer神经网络模型的代码语义克隆检测方法,给定两个代码片段,先拆分它们的抽象语法树到语句级别,然后通过RvNN获得每个语句级别的树结构信息,然后再通过带方向信息的Transformer来获得每个语句树的顺序信息,再经过最大池化层生成最终的代码表示向量,通过比较两个代码表示向量的差的绝对值来判别两个代码是否是语义克隆。本发明的主要思想是使用具有方向信息的Transformer‑encoder来改进现在的模型,现有的研究大部分仍然使用LSTM或GRU,但不适合并行计算,而且不能很好地关注到全局的信息。实验表明,本发明与现有技术相比,检测具有更高的F1值,且耗时较少。
技术领域
本发明涉及计算机代码克隆领域,特别涉及一种基于RvNN+Transformer神经网络模型的代码语义克隆检测方法。
背景技术
代码克隆,是指存在于代码库中两个及以上相同或者相似的源代码片段。代码克隆相关问题是软件工程领域研究的重要课题。代码克隆是软件开发中的常见现象,它虽然能够提高开发效率,但是代码克隆也会对系统造成负面影响,包括降低软件稳定性、造成代码库冗余和软件缺陷传播等。
代码克隆分为四种类型。类型1是除了空格、注释之外,两个代码片段完全相同的代码对;类型2是除了变量名、类型名、函数名之外都相同的代码对;类型3是有若干语句的增删,或使用了不同的标识符、文字、类型、空格、布局和注释,但是依然相似的代码对;类型4是相同功能的异构代码,在文本或者语法上不相似,但在语义上有相似性。类型1-4的检测难度逐级增加。针对类型4的代码语义克隆检测的工具仍然很少,因此本发明集中于代码语义克隆检测。
近年来,出现了许多基于深度学习的代码克隆检测工具。但是它们大部分都是通过LSTM或者GRU训练代码片段,这些模型经过大部分研究表明适合训练序列输入的情况,但是由于模型的序列输入特性,所以并不能很好地利用GPU并行计算的能力,而且对于过长的序列会出现梯度消失的问题。Transformer模型可以一次输入整个序列并结合序列的位置编码,这样就能很好地利用GPU并行计算的能力,且有效减少了梯度消失的问题。Transformer模型包含Encoder和Decoder模块。Encoder模块一般是用来生成原始数据的中间向量表示,Decoder模块一般是将中间向量转为和原始数据相关的数据,如中英翻译。由于本发明针对的是训练代码的向量表示,所以使用Transformer-encoder模块来训练模型。Transformer-encoder模块能提高模型的训练速度,融合RvNN和Transformer-encoder还能使模型在检测代码语义克隆时有较好的结果。
发明内容
本发明旨在提高代码语义克隆检测的准确度和性能,提出了一种基于RvNN+Transformer神经网络模型的代码语义克隆检测方法。该方法首先将代码转换为抽象语法树表示,然后对抽象语法树按语句级别进行拆分,将拆分后的语句树自底向上输入RvNN模型训练成对应的语句树向量,再将多个语句树向量同时输入带有方向信息的Transformer-encoder模块生成新的语句树向量,最后将语句向量通过最大池化层输出代码的向量表示。通过比较两个代码的向量表示的距离来检测是否构成代码语义克隆。
本发明的一种基于RvNN+Transformer神经网络模型的代码语义克隆检测方法,该方法具体包括以下流程:
步骤1、代码的预处理。一个代码完整的抽象语法树如果直接输入模型可能会出现梯度消失的问题,所以需要先进行拆分,可以把抽象语法树分割成一组语句树,对于有嵌套结构的语句可以把它的花括号内的代码分割出来,比如if,for,while。然后把每个语句树按顺序存储到本地,语句树是以多级数组的形式存储,第一级的值是第二级的父节点,以此类推。
步骤2、代码的预训练。由于深度学习模型必须要传入向量,所以需要先把代码的每个token转化为向量。利用Word2vec的Skip-Gram模型对数据集中代码的所有token进行训练,生成每个token对应的词向量。词向量的维度d为128。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京工业大学,未经北京工业大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210052857.2/2.html,转载请声明来源钻瓜专利网。
- 基于Transformer+LSTM神经网络模型的商品销量预测方法及装置
- 一种基于Transformer模型自然场景文字识别方法
- 一种深度Transformer级联神经网络模型压缩算法
- 点云分割方法、系统、介质、计算机设备、终端及应用
- 基于Transformer的中文智能对话方法
- 一种基于改进Transformer模型的飞行器故障诊断方法和系统
- 一种基于Transformer模型的机器翻译模型优化方法
- 基于Transformer和增强交互型MPNN神经网络的小分子表示学习方法
- 基于U-Transformer多层次特征重构的异常检测方法及系统
- 基于EfficientDet和Transformer的航空图像中的飞机检测方法