CN110851176A - 一种自动构造并利用伪克隆语料的克隆代码检测方法 - Google Patents
一种自动构造并利用伪克隆语料的克隆代码检测方法 Download PDFInfo
- Publication number
- CN110851176A CN110851176A CN201911006918.6A CN201911006918A CN110851176A CN 110851176 A CN110851176 A CN 110851176A CN 201911006918 A CN201911006918 A CN 201911006918A CN 110851176 A CN110851176 A CN 110851176A
- Authority
- CN
- China
- Prior art keywords
- clone
- code
- detection
- token
- training
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/75—Structural analysis for program understanding
- G06F8/751—Code clone detection
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Machine Translation (AREA)
Abstract
本发明公开了一种自动构造并利用伪克隆语料的克隆代码检测方法,步骤一、自动构造伪训练语料库;步骤二、确定克隆代码检测任务中最有效的代码单元,即利用BPE方法切分克隆检测需要的代码基本单元;步骤三、由步骤二确定的最基本的最有效的代码单元BPE,将token进行拼接,进行词嵌入,将语料库中所有方法以token字符展示的语句序列来训练一个词嵌入模型,产生一个{代码单元‑向量}对应字典;步骤四、建立用于代码克隆检测的简单有效的BiLSTM分类模型,并进行训练;再利用L2‑Norm算法对两个方法进行分类,判断是否为克隆对。本发明实现了一个克隆代码检测工具,对于1、2、3型克隆有较好的检测效果。
Description
技术领域
本发明涉及程序分析和机器学习领域,尤其是涉及程序代码克隆检测方法。
背景技术
本发明所涉及的现有技术如下:
(1)克隆代码检测:克隆代码是指软件项目中文本相似或功能相似的代码片段,已有研究表明,一个系统中克隆代码所占比例大约为7%至23%,甚至高达50%。根据代码相似程度的不同,可以把代码克隆分为四个类型:一型克隆:排除程序代码在换行、空白、制表符等格式上的区别,以及注释语句等的区别以后,两个代码片段完全相同;二型克隆:两个代码片段除了常数值以及变量名、函数名等标识符之间的区别以外,满足一型克隆的定义,则这两个代码片段是二型克隆;三型克隆:在满足二型克隆的基础上,两段代码有少量语句进行了删除、增加和修改等操作;四型克隆:两个代码片段实现了相同的功能,但在文本上是不相似的。程序中大量克隆代码的存在会对软件项目的可理解性和可维护性造成不良影响。近年来,代码克隆检测相关文章贡献了许多检测算法和检测工具,较为流行的工具有CCFinder、SourcererCC、CCLearner和DECKARD等。根据检测方法对源代码的分析层次,代码克隆检测方法可以分为以下几个类型:基于文本的方法、基于token的检测方法、基于树的检测方法、基于度量的检测方法、基于图的检测方法以及基于机器学习的检测方法。但是目前缺少准确率高且时空效率好的检测算法,代码克隆的检测目前仍然是一个较为困难研究课题。因此,提出一个有效检测代码克隆的算法是十分有必要的。
(2)Byte Pair Encoding:Byte Pair Encoding(BPE)是一种根据字节对(BytePair)进行编码的算法,它迭代地用一个未使用的字节替换序列中最频繁出现的字节对。近些年也有研究不合并频繁的字节对,而是合并字符或字符序列,即字符串里出现频率最高的一对字符被没有在这个字符中出现的一个字符代替的层层迭代过程。BPE首先将词分成一个一个的字符,然后在词的范围内统计字符对出现的次数,每次将次数最多的字符对保存起来,直到循环次数结束。它从原始表达式中提取高频词,利用这个算法可以学习到对文本有良好压缩率的词汇表。BPE常被用于机器翻译中,对集外词(OOV)和罕见词(Rare word)有较好的训练效果。
(3)双向长短期记忆网络
长短期记忆网络(LSTM)是一种特殊的循环神经网络(RNN),能够补足普通RNN对长距离的上下文较难预测和处理的不足,LSTM能够在更长的序列中有更好的表现。双向长短期记忆网络(BiLSTM)由两个普通的长短期记忆网络组成,正向的LSTM利用过去时刻的信息,逆向的LSTM利用未来时刻的信息,比单向LSTM学习的更加充分,预测的更加准确。
一个利用机器学习技术检测代码克隆的有效方法有三个问题需要解决,一是如何选取合适粒度的程序代码基本单元,二是如何将源代码表示成一个有效的中间表示形式,三是如何构造大量的克隆和非克隆语料来训练一个效果好的网络模型。
发明内容
为了解决1、2、3型程序代码克隆的检测的问题,本发明提出一种自动构造并利用伪克隆语料的克隆代码检测方法,针对克隆代码检测的零成本大规模伪训练数据集自动构造伪克隆语料,基于监督的分类器实现克隆对检测,实现一个查准率、查全率较高的可靠代码克隆检测方法。
本发明的一种自动构造并利用伪克隆语料的克隆代码检测方法,该方法包括以下步骤
步骤一、自动构造伪训练语料库,即:将一个小规模代码块自动插入一个源代码片段,首先对源代码进行token化,源代码经过token化处理后,得到完全的复制粘贴对作为一型克隆和二型克隆;通过判断两个代码片段的相似度,提取出来大量的3型非克隆代码;
步骤二、确定克隆代码检测任务中最有效的代码单元,即利用BPE方法切分克隆检测需要的代码基本单元;通过多次迭代找到高频相邻token对,直到找到一个合适的切分位置,语句被分割成比token更大的代码块;然后将这些token组合作为基本的代码表示单元;具体操作为:首先构造一个包含所有不同token和它们对应的频率的词表;然后通过函数get_stat统计token出现的频率并当发生合并等状态发生改变时更新状态。通过函数merge_vocab对token进行归并,并将应用于词汇表,所有token合并的克隆对都集成在一起,最后得出基本处理单元的词汇表;
步骤三、将所有归并的克隆对进行拼接,进行词嵌入,将语料库中所有方法以token字符展示的语句序列使用工具fastText来进训练一个词嵌入模型,产生一个{代码单元-向量}对应字典;
步骤四、建立用于代码克隆检测的简单有效的BiLSTM分类模型,并进行训练,即获取代码的上下文和序列信息,并利用自注意力机制进行加权求和,至此java项目中的每个方法都转化成了一个向量表示;再利用L2-Norm算法对两个方法进行分类,判断是否为克隆对。
本发明的整个过程简单快捷,不需要耗费大量人力,理论上可以产生无穷多对克隆和非克隆代码,相比于现有技术代价低廉并且效率大幅提高;
此外,讨论了代码的切分粒度问题,并进一步提出了避免OOV问题的BPE方法,该方法可以看作是token和程序语句之间的一种缓解,将生成的语料库用于代码克隆检测神经网络模型的训练,实现了一个克隆代码检测工具,对于1、2、3型克隆有较好的检测效果。
附图说明
图1为本发明的一种自动构造并利用伪克隆语料的克隆代码检测方法流程图;
图2为本发明的一种自动构造并利用伪克隆语料的克隆代码检测系统功能模块示意图;
图3为生成伪克隆代码语料库流程图;
具体实施方式
下面结合附图和实施例对本发明技术方案进行详细描述。
本发明的克隆检测方法以程序方法为粒度,即检测java项目中两两相似的方法,判定它们为克隆对。通过一种合理的方法来确定什么是最基本的代码单元,这些代码单元可以有效表征源代码在代码克隆检测中能够用到的词汇和语法信息;再通过将程序代码的基本单元词嵌入为向量,利用有监督的分类器实现代码克隆对的检测;并创造性地提出了一种利用伪训练语料库训练神经代码克隆检测模型的新方法,能够实现零成本大规模伪训练数据集自动构造。
如图1所示,为本发明的一种自动构造并利用伪克隆语料的克隆代码检测方法流程图,该流程具体包括以下步骤:
步骤一、自动构造伪训练语料库:将一个小规模代码块自动插入一个代码片段,从而获得一个伪克隆对;对于非克隆,通过判断两个代码片段的相似度,将大量的非克隆代码提取出来,具体处理过程详细描述如下:
如图3所示,为生成伪克隆代码语料库流程图。在该流程中只针对一、二、三型克隆的检测,自动构建大规模伪训练语料库。例如:从开源的6个项目中收集了12552个高质量的函数,首先对源代码进行token化(Token化是将源代码转换成特定形式的token字符的过程),主要包括(1)去除源代码中的空格、注释等非代码因素的影响(此时一型克隆对的差异已经消除);(2)将源代码方法中的自定义类、变量、常量等进行统一化(此时二型克隆对的差异已经消除)。源代码经过上述token化处理后,一型克隆和二型克隆就是完全的复制粘贴对。接下来,要解决的主要的问题就是构造三型克隆和非克隆训练语料:选取一定数量语句数低于10行的短函数来构造伪三型克隆;
本发明将程序代码克隆检测归结为一个有监督的二分类问题:给出两个代码块Ci和Cj,如果它们是克隆对,设置其标签为1;如果是非克隆,设置标签为0。首先,将代码块{C1,C2,...}转换为低维向量{hC1,hC2,...},然后采用简单有效的分类样式策略来确定代码块对(C1,C2)是否是克隆对。
利用以下公式判断两个代码片段是否是克隆对:
o=[o0,o1]=W·hdiff
hdiff=(hci-hcj)2
其中,hci和hcj分别为两个代码片段经过神经网络之后生成的连续向量,hdiff为两个向量之间的距离的平方,W为神经网络学习的权重矩阵,O0和O1分别为这两个代码片段经过神经网络的判断,其应归属为克隆或非克隆的概率,最终结果O表示整个模型的分类结果。即,如果两个代码块相似,则方程(hCi-hCj)2的值将趋近于零,这对代码块极有可能被归类为克隆。通过神经网络学习式中的参数W,使其能够找到hdiff中的重要差异。
对于非克隆对的构造,利用远距离监督(distant supervision)算法,即只要包含两个实体的句子,都在描述同一种关系。把函数的方法名的相似程度作为评价两个代码片段是否是克隆代码的依据。如果两个方法的方法名非常不相似,则认为这两个代码片段为非克隆代码。该方法相对简单直接,不含歧义,目的是产生清晰的非克隆代码块对。两个方法的方法名不相似,判定它为非克隆,加入到非克隆语料中;两个方法方法名相似,不认为它们是非克隆。
本发明中用于词嵌入和模型训练的所有源代码都来自于真实在线开源存储库GitHub中java项目星标排名前340的项目库的源代码,作为预训练中转化成词典的代码集。
选取了一定数量语句数低于10行的短函数来以下步骤构造伪三型克隆语料:
(1)收集短函数代码片段集记为{Cp};
(2)收集标准代码片段集记为{Cb},这个代码集中代码片段为完整的方法;(3)对于标准代码片段集{Cb}中的代码块C0,随机选择一个短函数代码块,随机插入到C0中,得到C1;接着,再次选择其他短函数代码块或者在不同的位置多次插入,得到C2,C3,...,Cn;
(4)对于C1,C2,C3,...,Cn,将每一对(Ci,Cj)(其中0<=i,j<=n,i≠j)作为三型克隆对;
(5)通过重复步骤(3)和步骤(4),构建一个具有伪代码克隆的大规模语料库。
对于非克隆对的构造,利用远距离监督(distant supervision)算法中只要包含两个实体的句子都在描述同一种关系的描述,把函数的方法名的相似程度作为评价两个代码片段是否是克隆代码的依据:如果两个方法名非常不相似,则认为这两个代码片段为非克隆代码,加入到非克隆语料中。该方法相对简单直接,不含歧义,目的是产生清晰的非克隆代码块对;
最后,总共收集了10000对一、二型克隆代码,10000对三型克隆代码,10000对非克隆代码,随后将它们用于模型训练;
步骤二、确定克隆代码检测任务中最有效的代码单元:从表达式中提取高频率的token,用这些高频率的token对更新现有的表达式。利用BPE方法切分克隆检测需要的代码基本单元;通过多次迭代找到高频相邻token对,直到找到一个合适的切分位置,语句被分割成比token更大的代码块。然后将这些token组合作为基本的代码表示单元。显然,新单元比token大,比语句小,达到token和程序语句之间的平衡。具体操作方式为:首先构造了一个包含所有不同token和它们对应的频率的词表。然后通过函数get_stat统计token出现的频率并当发生合并等状态发生改变时更新状态。通过函数merge_vocab对token进行归并,并将归并后的结果应用于词汇表。合并次数是BPE学习过程中的一个重要参数,通过实验验证,最终确定当合并迭代次数定为4000时,对克隆代码有较好的检测效果。所有token合并的对都集成在一起,最后得出基本处理单元的词汇表。在词嵌入过程,即将离散的符号输入转换为低维隐藏向量。新生成的词汇表的大小,范围在token字符的词汇表到程序语句的词汇表之间。结果表明,在大多数情况下都能取得较好克隆检测效果,并避免了OOV问题。BPE方法可以看作是token和程序语句之间的一种缓解。
步骤三、预处理,由步骤二确定的最基本的最有效的代码单元BPE,将token进行拼接,进行词嵌入,将语料库中所有方法,以token字符展示的语句序列来训练一个词嵌入模型,产生一个{代码单元-向量}对应字典,具体包括以下处理:
在词嵌入过程,即将离散的符号输入转换为低维隐藏向量。该步骤通常由外部预训练这个字典。使用工具fastText进行预训练,生成{代码基本单元-向量}的字典。FastText是一个开源、免费、轻量级的库,它的训练速度非常快,是一个广泛使用的快速文本表示和文本分类工具。对于词向量的训练,使用skip-gram的subwords模型进行训练。丰富了词表示的层次。设置输出的向量维度的大小是100维(此向量维度也是该深度学习模型BiLSTM中的第一层LSTM层的神经元单元个数),设置fastText的学习率(lr)为0.025,上下文窗口大小(window size)为5,负采样个数(negative sampling)为10,ngram字符长度为3-6,迭代次数(epoch)设为5,最小单词出现量为5。经过训练,每一个代码基本单元都对应到了一个向量,每一个java方法也就对应到了一个矩阵表示。丰富了词表示的层次。设置输出的向量维度的大小是100维(此向量维度也是该深度学习模型BiLSTM中的第一层LSTM层的神经元单元个数),设置fastText的学习率(lr)为0.025,上下文窗口大小(window size)为5,负采样个数(negative sampling)为10,ngram字符长度为3-6,迭代次数(epoch)设为5,最小单词出现量为5。经过训练,每一个代码基本单元都对应到了一个向量,每一个java方法也就对应到了一个矩阵表示。
步骤四、建立用于代码克隆检测的简单有效的BiLSTM分类模型,并进行训练,即将代码克隆检测重新转换为一个分类问题,应用一个简单有效的BiLSTM模型,获取代码的上下文和序列信息,并利用自注意力机制进行加权求和,至此java项目中的每个方法都转化成了一个向量表示。再利用L2-Norm算法对两个方法进行分类,判断他们是否为克隆对。
神经网络模型训练BiLSTM用来编码连续的输入,它能够捕获序列中的长距离的连接。它通过如下公式递归计算隐藏输出向量:(以左右方向为例)
ft=σ(Wf·[ht-1,xt]+bf)
it=σ(Wi·[ht-1,xt]+bi)
ot=σ(Wo·[ht-1,xt]+bo)
其中,ht-1为上一时刻的隐层状态,xt为当前时刻的输入,ft为遗忘门,负责决定哪些数据从细胞单元中抛弃;it为输入门,决定哪些信息需要更新;ot为输出门,决定当前细胞输出哪些信息;为候选状态,是备选地用来更新的内容,Wf,Wi,Wo,Wc分别为遗忘门、输入门、输出门,候选细胞状态对应的模型参数,bf,bi,bo,bc和分别为遗忘门、输入门、输出门,候选细胞状态对应的偏置项,ct为当前细胞状态,ht为当前时刻的隐层状态。
从右到左的方向只是以相反的方式预演了相同的计算。将预处理中的基本单元向量表示输入到第一层LSTM单元,获得此基本单元中前一个单元对它的影响的特征,并将步骤2转化的字符向量输入到第二层LSTM单元,获得字符的后一个字符对它的影响。再将第一层LSTM的输出和第二层LSTM的输出进行拼接组合。通过训练,输出的特征向量即包含了这个代码单元上下文信息及其序列信息。接下来用自注意力机制进行加权求和,将每个java方法转换为可相互比较的向量。其中,是BiLSTM的隐藏输出,hs/t是最终的代码表示向量。自注意力机制可以解释为对输入序列向量的加权和,其中的权重i是根据hi本身计算的。
神经模型在训练和测试过程中有多个超参数。将BiLSTM的维度大小设置为100,为了防止神经网络模型过拟合,在LSTM隐藏层上加入dropout层,比例为0.33。采用Adam算法进行参数优化,初始学习率为5×10-4,梯度裁剪(gradient clipping)阈值为5。
为了验证此发明的有效性,使用评价基准bigclonebench数据集来评估此克隆检测方法的克隆代码检测效果。bigclonebench数据集由800多万对Java语言标记的真代码克隆对和26万对标记的假克隆对组成,是广泛采用的代码克隆检测基准。实验结果表明,此发明的克隆检测方法在bigclonebench数据集上检测的f值能够达到86.5%,优于现今较为主流的代码检测工具。
如图2所示,为本发明的一种自动构造并利用伪克隆语料的克隆代码检测系统功能模块示意图,作为本发明的一种自动构造并利用伪克隆语料的克隆代码检测方法的一个实施例。
Claims (1)
1.一种自动构造并利用伪克隆语料的克隆代码检测方法,其特征在于,该方法包括以下步骤
步骤一、自动构造伪训练语料库,即:将一个小规模代码块自动插入一个源代码片段,首先对源代码进行token化,源代码经过token化处理后,得到完全的复制粘贴对作为一型克隆和二型克隆;通过判断两个代码片段的相似度,提取出来大量的3型非克隆代码;
步骤二、确定克隆代码检测任务中最有效的代码单元,即利用BPE方法切分克隆检测需要的代码基本单元;通过多次迭代找到高频相邻token对,直到找到一个合适的切分位置,语句被分割成比token更大的代码块;然后将这些token组合作为基本的代码表示单元;具体操作为:首先构造一个包含所有不同token和它们对应的频率的词表;然后通过函数get_stat统计token出现的频率并当发生合并等状态发生改变时更新状态。通过函数merge_vocab对token进行归并,并将应用于词汇表,所有归并的克隆对都集成在一起,最后得出基本处理单元的词汇表;
步骤三、将所有归并的克隆对进行拼接,进行词嵌入,将语料库中所有方法以token字符展示的语句序列使用工具fastText来进训练一个词嵌入模型,产生一个{代码单元-向量}对应字典;
步骤四、建立用于代码克隆检测的简单有效的BiLSTM分类模型,并进行训练,即获取代码的上下文和序列信息,并利用自注意力机制进行加权求和,至此java项目中的每个方法都转化成了一个向量表示;再利用L2-Norm算法对两个方法进行分类,判断是否为克隆对。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911006918.6A CN110851176B (zh) | 2019-10-22 | 2019-10-22 | 一种自动构造并利用伪克隆语料的克隆代码检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911006918.6A CN110851176B (zh) | 2019-10-22 | 2019-10-22 | 一种自动构造并利用伪克隆语料的克隆代码检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110851176A true CN110851176A (zh) | 2020-02-28 |
CN110851176B CN110851176B (zh) | 2023-07-04 |
Family
ID=69596656
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911006918.6A Active CN110851176B (zh) | 2019-10-22 | 2019-10-22 | 一种自动构造并利用伪克隆语料的克隆代码检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110851176B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111562943A (zh) * | 2020-04-29 | 2020-08-21 | 海南大学 | 一种基于事件嵌入树及gat网络的代码克隆检测方法和装置 |
CN112215013A (zh) * | 2020-11-02 | 2021-01-12 | 天津大学 | 一种基于深度学习的克隆代码语义检测方法 |
CN112612892A (zh) * | 2020-12-29 | 2021-04-06 | 达而观数据(成都)有限公司 | 一种专有领域语料模型构建方法、计算机设备及存储介质 |
CN112947930A (zh) * | 2021-01-29 | 2021-06-11 | 南通大学 | 一种基于Transformer的Python伪代码自动生成方法 |
CN113986345A (zh) * | 2021-11-01 | 2022-01-28 | 天津大学 | 一种预训练增强的代码克隆检测方法 |
RU2775820C2 (ru) * | 2020-04-24 | 2022-07-11 | Общество С Ограниченной Ответственностью «Яндекс» | Способ и сервер для обработки текстовой последовательности в задаче машинной обработки |
US11868737B2 (en) | 2020-04-24 | 2024-01-09 | Direct Cursus Technology L.L.C | Method and server for processing text sequence for machine processing task |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050144606A1 (en) * | 2003-12-11 | 2005-06-30 | Li David X. | Cloning programming code |
CN104077147A (zh) * | 2014-07-11 | 2014-10-01 | 东南大学 | 一种基于代码克隆自动检测和及时提醒的软件复用方法 |
US20170308380A1 (en) * | 2016-04-26 | 2017-10-26 | Korea University Research And Business Foundation | Apparatus and method for detecting code cloning of software |
CN108875317A (zh) * | 2017-05-08 | 2018-11-23 | 中国移动通信有限公司研究院 | 软件克隆检测方法及装置、检测设备及存储介质 |
CN109101235A (zh) * | 2018-06-05 | 2018-12-28 | 北京航空航天大学 | 一种软件程序的智能解析方法 |
CN109918127A (zh) * | 2019-03-07 | 2019-06-21 | 扬州大学 | 一种基于代码修改模式差异的缺陷纠错方法 |
CN109976806A (zh) * | 2019-01-03 | 2019-07-05 | 杭州电子科技大学 | 基于字节码序列匹配的Java语句块克隆检测方法 |
-
2019
- 2019-10-22 CN CN201911006918.6A patent/CN110851176B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050144606A1 (en) * | 2003-12-11 | 2005-06-30 | Li David X. | Cloning programming code |
CN104077147A (zh) * | 2014-07-11 | 2014-10-01 | 东南大学 | 一种基于代码克隆自动检测和及时提醒的软件复用方法 |
US20170308380A1 (en) * | 2016-04-26 | 2017-10-26 | Korea University Research And Business Foundation | Apparatus and method for detecting code cloning of software |
CN108875317A (zh) * | 2017-05-08 | 2018-11-23 | 中国移动通信有限公司研究院 | 软件克隆检测方法及装置、检测设备及存储介质 |
CN109101235A (zh) * | 2018-06-05 | 2018-12-28 | 北京航空航天大学 | 一种软件程序的智能解析方法 |
CN109976806A (zh) * | 2019-01-03 | 2019-07-05 | 杭州电子科技大学 | 基于字节码序列匹配的Java语句块克隆检测方法 |
CN109918127A (zh) * | 2019-03-07 | 2019-06-21 | 扬州大学 | 一种基于代码修改模式差异的缺陷纠错方法 |
Non-Patent Citations (6)
Title |
---|
YI GAO等: ""TECCD: A Tree Embedding Approach for Code Clone Detection"" * |
刘复星;魏金津;任女尔;: "基于深度学习的代码克隆检测技术研究" * |
李元诚;崔亚奇;吕俊峰;来风刚;张攀;: "开源软件漏洞检测的混合深度学习方法" * |
王卫红等: ""基于Ad-Sim算法的代码克隆检测方法"" * |
陈星昊: ""基于LLVM克隆代码检测关键技术研究"" * |
陈秋远;李善平;鄢萌;夏鑫;: "代码克隆检测研究进展" * |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
RU2775820C2 (ru) * | 2020-04-24 | 2022-07-11 | Общество С Ограниченной Ответственностью «Яндекс» | Способ и сервер для обработки текстовой последовательности в задаче машинной обработки |
US11868737B2 (en) | 2020-04-24 | 2024-01-09 | Direct Cursus Technology L.L.C | Method and server for processing text sequence for machine processing task |
CN111562943A (zh) * | 2020-04-29 | 2020-08-21 | 海南大学 | 一种基于事件嵌入树及gat网络的代码克隆检测方法和装置 |
CN112215013A (zh) * | 2020-11-02 | 2021-01-12 | 天津大学 | 一种基于深度学习的克隆代码语义检测方法 |
CN112215013B (zh) * | 2020-11-02 | 2022-04-19 | 天津大学 | 一种基于深度学习的克隆代码语义检测方法 |
CN112612892A (zh) * | 2020-12-29 | 2021-04-06 | 达而观数据(成都)有限公司 | 一种专有领域语料模型构建方法、计算机设备及存储介质 |
CN112612892B (zh) * | 2020-12-29 | 2022-11-01 | 达而观数据(成都)有限公司 | 一种专有领域语料模型构建方法、计算机设备及存储介质 |
CN112947930A (zh) * | 2021-01-29 | 2021-06-11 | 南通大学 | 一种基于Transformer的Python伪代码自动生成方法 |
CN112947930B (zh) * | 2021-01-29 | 2024-05-17 | 南通大学 | 一种基于Transformer的Python伪代码自动生成方法 |
CN113986345A (zh) * | 2021-11-01 | 2022-01-28 | 天津大学 | 一种预训练增强的代码克隆检测方法 |
CN113986345B (zh) * | 2021-11-01 | 2024-05-07 | 天津大学 | 一种预训练增强的代码克隆检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110851176B (zh) | 2023-07-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110134757B (zh) | 一种基于多头注意力机制的事件论元角色抽取方法 | |
CN110851176A (zh) | 一种自动构造并利用伪克隆语料的克隆代码检测方法 | |
CN104572958B (zh) | 一种基于事件抽取的敏感信息监控方法 | |
CN110334213B (zh) | 基于双向交叉注意力机制的汉越新闻事件时序关系识别方法 | |
CN112215013B (zh) | 一种基于深度学习的克隆代码语义检测方法 | |
CN108563703A (zh) | 一种罪名的判定方法、装置及计算机设备、存储介质 | |
CN108664512B (zh) | 文本对象分类方法及装置 | |
Uppal et al. | Fake news detection using discourse segment structure analysis | |
CN110287329A (zh) | 一种基于商品文本分类的电商类目属性挖掘方法 | |
CN115357904B (zh) | 一种基于程序切片和图神经网络的多类漏洞检测方法 | |
CN112580330B (zh) | 基于中文触发词指导的越南语新闻事件检测方法 | |
CN115081437A (zh) | 基于语言学特征对比学习的机器生成文本检测方法及系统 | |
CN116484024A (zh) | 一种基于知识图谱的多层次知识库构建方法 | |
CN107526721A (zh) | 一种对电商产品评论词汇的歧义消除方法及装置 | |
CN112270187A (zh) | 一种基于bert-lstm的谣言检测模型 | |
CN105068986B (zh) | 基于双向迭代和自动构建更新语料库的垃圾评论过滤方法 | |
CN113836896A (zh) | 一种基于深度学习的专利文本摘要生成方法和装置 | |
CN113705099A (zh) | 基于对比学习的社交平台谣言检测模型构建方法及检测方法 | |
CN112685374B (zh) | 日志分类方法、装置及电子设备 | |
CN115146062A (zh) | 融合专家推荐与文本聚类的智能事件分析方法和系统 | |
CN112579777B (zh) | 一种未标注文本的半监督分类方法 | |
CN112528653B (zh) | 短文本实体识别方法和系统 | |
CN116775855A (zh) | 基于Bi-LSTM的TextRank中文摘要自动生成方法 | |
CN113986345B (zh) | 一种预训练增强的代码克隆检测方法 | |
CN114911933A (zh) | 基于图内图间联合信息传播的假新闻检测方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |