CN114742069A - 一种代码相似度检测方法及装置 - Google Patents
一种代码相似度检测方法及装置 Download PDFInfo
- Publication number
- CN114742069A CN114742069A CN202210385696.9A CN202210385696A CN114742069A CN 114742069 A CN114742069 A CN 114742069A CN 202210385696 A CN202210385696 A CN 202210385696A CN 114742069 A CN114742069 A CN 114742069A
- Authority
- CN
- China
- Prior art keywords
- target words
- code segment
- loss function
- word vectors
- word
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/30—Semantic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/22—Matching criteria, e.g. proximity measures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/279—Recognition of textual entities
- G06F40/284—Lexical analysis, e.g. tokenisation or collocates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/044—Recurrent networks, e.g. Hopfield networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/047—Probabilistic or stochastic networks
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Artificial Intelligence (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- General Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Evolutionary Computation (AREA)
- Biomedical Technology (AREA)
- Computing Systems (AREA)
- Molecular Biology (AREA)
- Biophysics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Probability & Statistics with Applications (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Machine Translation (AREA)
Abstract
本发明提供一种代码相似度检测方法及装置,对第一代码段进行分词得到多个第一目标词,对第二代码段进行分词得到多个第二目标词,利用Glove模型对多个第一目标词进行空间转换得到多个第一词向量,利用Glove模型对多个第二目标词分别进行空间转换得到多个第二词向量,利用递归神经网络对多个第一词向量进行语义提取得到第一语义向量,利用递归神经网络对多个第二词向量进行语义提取得到第二语义向量,这样第一语义向量是包含第一代码段的语义信息的向量,第二语义向量是包含第二代码段的语义信息的向量,计算第一语义向量和第二语义向量的相似度,可以作为第一代码段和第二代码段的相似度,得到的相似度是考虑语义信息的相似度,具有更高的准确性。
Description
技术领域
本发明涉及数据处理领域,特别涉及一种代码相似度检测方法及装置。
背景技术
日常生活中,会有很多场景需要用到代码之间相似度的比较,例如编程考试中判定作弊,日常开发代码提交版本库时冗余代码段高亮以及软件成果版权鉴定等。代码相似度检测,是指使用一定技术手段来计算代码段之间的相似程度。提到相似度比较,最简单的方式是将两个待比较的代码片段分别作为独立的文本,计算其编辑距离,编辑距离,是指针对二个字符串(例如英文字)的差异程度的量化量测,量测方式是看至少需要多少次的处理才能将一个字符串变成另一个字符串。这种方式只能判断比较基础,不“高明”的相似度而且当代码段很长时,比较的效率较低。
目前已有的代码相似度比较方法有很多种,主要分为两类,基于统计的和基于向量的,其中基于统计的方式简单直观易理解,但效率不够高,而且比较过程没有关注代码的结构信息和功能信息,其核心思想是对代码中类,代码结构体等进行统计,根据其出现的频率进行比较。基于向量的方式其关键是代码的表征方式。当前源代码主要的表征方式包括四种,分别是基于文本,基于词汇,基于语法和基于语义。基于文本和词汇的表征方式忽略了源代码中隐藏的语法和结构信息。基于语法的表征方式更多地考虑了代码的语法结构,但没有考虑代码的功能信息,例如数据流、控制流信息等。相似的代码片段应该在与代码语义相关功能上具有相同的目标,然而目前的基于语义表征源代码的方式均不能较好的表达源代码的信息,导致代码相似度计算不准确。
发明内容
有鉴于此,本发明的目的在于提供一种代码相似度检测方法及装置,提高两个代码段之间的相似度的计算准确性。
为实现上述目的,本发明有如下技术方案:
本申请实施例提供了一种代码相似度检测方法,包括:
对第一代码段进行分词得到多个第一目标词,对第二代码段进行分词得到多个第二目标词;
利用Glove模型对所述多个第一目标词分别进行空间转换得到多个第一词向量,利用Glove模型对所述多个第二目标词分别进行空间转换得到多个第二词向量;
利用递归神经网络对所述多个第一词向量进行语义提取得到第一语义向量,利用递归神经网络对所述多个第二词向量进行语义提取得到第二语义向量;
计算所述第一语义向量和所述第二语义向量的相似度,作为所述第一代码段和所述第二代码段的相似度。
可选的,所述利用Glove模型将所述多个第一目标词分别进行空间转换得到多个第一词向量,包括:
根据所述多个第一目标词的初始词向量和所述多个第一目标词的上下文信息,建立Glove模型进行空间转换的第一损失函数,对所述第一损失函数进行最小化以得到所述多个第一目标词对应的多个第一词向量;
所述利用Glove模型对所述多个第二目标词分别进行空间转换得到多个第二词向量,包括:
根据所述多个第二目标词的初始词向量和所述多个第二目标词的上下文信息,建立Glove模型进行空间转换的第二损失函数,对所述第二损失函数进行最小化以得到所述多个第二目标词对应的多个第二词向量。
可选的,根据所述多个第一目标词的初始词向量和所述多个第一目标词的上下文信息,建立Glove模型进行空间转换的第一损失函数,包括:
将所述多个第一目标词两两组合得到多个第一词组;根据属于同一第一词组的两个第一目标词的初始词向量的内积,与所述两个第一目标词在同一个上下文窗口中共同出现次数,建立所述两个第一目标词对应的损失函数;基于所述两个第一目标词在同一个上下文窗口中共同出现次数,确定所述损失函数对应的函数权重;利用所述函数权重对所述损失函数进行加权平均,得到所述第一损失函数;
根据所述多个第二目标词的初始词向量和所述多个第二目标词的上下文信息,建立Glove模型进行空间转换的第二损失函数,包括:
将所述多个第二目标词两两组合得到多个第二词组;根据属于同一第二词组的两个第二目标词的初始词向量的内积,与所述两个第二目标词在同一个上下文窗口中共同出现次数,建立所述两个第二目标词对应的损失函数;基于所述两个第二目标词在同一个上下文窗口中共同出现次数,确定所述损失函数对应的函数权重;利用所述函数权重对所述损失函数进行加权平均,得到所述第二损失函数。
可选的,所述递归神经网络为双向长短时记忆网络。
可选的,对第一代码段进行分词得到多个第一目标词,对第二代码段进行分词得到多个第二目标词之前,所述方法还包括:
对所述第一代码段进行预处理,以去除所述第一代码段中的冗余信息;对所述第二代码段进行预处理,以去除所述第二代码段中的冗余信息。
本申请实施例还提供了一种代码相似度检测装置,包括:
分词单元,用于对第一代码段进行分词得到多个第一目标词,对第二代码段进行分词得到多个第二目标词;
空间转换单元,用于利用Glove模型对所述多个第一目标词分别进行空间转换得到多个第一词向量,利用Glove模型对所述多个第二目标词分别进行空间转换得到多个第二词向量;
语义提取单元,用于利用递归神经网络对所述多个第一词向量进行语义提取得到第一语义向量,利用递归神经网络对所述多个第二词向量进行语义提取得到第二语义向量;
相似度计算单元,用于计算所述第一语义向量和所述第二语义向量的相似度,作为所述第一代码段和所述第二代码段的相似度。
可选的,所述空间转换单元,包括:
第一转换单元,用于根据所述多个第一目标词的初始词向量和所述多个第一目标词的上下文信息,建立Glove模型进行空间转换的第一损失函数,对所述第一损失函数进行最小化以得到所述多个第一目标词对应的多个第一词向量;
第二转换单元,用于根据所述多个第二目标词的初始词向量和所述多个第二目标词的上下文信息,建立Glove模型进行空间转换的第二损失函数,对所述第二损失函数进行最小化以得到所述多个第二目标词对应的多个第二词向量。
可选的,所述第一转换单元具体用于:
将所述多个第一目标词两两组合得到多个第一词组;根据属于同一第一词组的两个第一目标词的初始词向量的内积,与所述两个第一目标词在同一个上下文窗口中共同出现次数,建立所述两个第一目标词对应的损失函数;基于所述两个第一目标词在同一个上下文窗口中共同出现次数,确定所述损失函数对应的函数权重;利用所述函数权重对所述损失函数进行加权平均,得到所述第一损失函数;对所述第一损失函数进行最小化以得到所述多个第一目标词对应的多个第一词向量;
所述第二转换单元具体用于:
将所述多个第二目标词两两组合得到多个第二词组;根据属于同一第二词组的两个第二目标词的初始词向量的内积,与所述两个第二目标词在同一个上下文窗口中共同出现次数,建立所述两个第二目标词对应的损失函数;基于所述两个第二目标词在同一个上下文窗口中共同出现次数,确定所述损失函数对应的函数权重;利用所述函数权重对所述损失函数进行加权平均,得到所述第二损失函数,对所述第二损失函数进行最小化以得到所述多个第二目标词对应的多个第二词向量。
可选的,所述递归神经网络为双向长短时记忆网络。
可选的,所述装置还包括:
预处理单元,用于对第一代码段进行分词得到多个第一目标词,对第二代码段进行分词得到多个第二目标词之前,对所述第一代码段进行预处理,以去除所述第一代码段中的冗余信息;对所述第二代码段进行预处理,以去除所述第二代码段中的冗余信息。
本申请实施例提供了一种代码相似度检测方法及装置,对第一代码段进行分词得到多个第一目标词,对第二代码段进行分词得到多个第二目标词,利用Glove模型对多个第一目标词进行空间转换得到多个第一词向量,利用Glove模型对多个第二目标词分别进行空间转换得到多个第二词向量,利用递归神经网络对多个第一词向量进行语义提取得到第一语义向量,利用递归神经网络对多个第二词向量进行语义提取得到第二语义向量,这样第一语义向量是包含第一代码段的语义信息的向量,第二语义向量是包含第二代码段的语义信息的向量,计算第一语义向量和第二语义向量的相似度,可以作为第一代码段和第二代码段的相似度,利用语义表征代码段,因此得到的相似度是考虑语义信息的相似度,具有更高的准确性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本申请实施例提供的一种代码相似度检测方法的流程图;
图2为本申请实施例提供的一种神经网络的结构示意图;
图3为本申请实施例提供的一种BiLSTM的工作原理示意图;
图4为本申请实施例提供的一种代码相似度检测装置的结构框图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明的具体实施方式做详细的说明。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其它不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施例的限制。
在使用不用的表征方式表征代码时对于代码中包含的信息的利用程度是有很大不同的,基于文本的方式只是将代码作为普通的文本编码,利用基本的文本相似度算法计算其相似度,没有考虑代码相较于普通文本的特殊性,只考虑了代码的文本特征,没有将代码结构特征信息利用起来。基于词汇的方式和基于文本的方式本质没有区别。其核心思想是将源代码经过解析器处理后得到的符号序列组织成符号语句,最后将这些重新组织好的语句进行相似度比较。这种方法从本质上讲与基于文本的方法区别不大,仍然没有很好地利用源代码的结构等信息。
基于语法的表征方式则更多地考虑了代码的语法结构。基于抽象语法树来表征代码的方式就是一种典型地基于源代码语法的表征方式。抽象语法树是源代码特有的一种表现形式,将源代码中的语法信息用树的数据结构表现出来,采用的算法在得到源代码的抽象语法树之后,进一步将抽象语法树的信息转换成线性结构,并通过这种转换之后的线性结构来计算代码之间的相似节点数,最终计算出代码之间的相似度。这种基于语法的表征方式比基于文本和基于词汇的表征方式更多地考虑到了代码的语法规则,而不是单纯地把源代码看成是普通字符串文本,因此可以对源代码中的语法结构信息加以利用。但基于语法的表征方式没有考虑代码的结构和语义功能信息,无法充分利用代码的全部信息。
基于语义的表征方式在考虑代码语法规则的基础上进一步利用了代码的功能信息,如数据流和控制流信息,是最贴合代码段核心的内容,然而目前基于语义的表征方式并不能很好的反应代码的信息。例如使用TF-IDF(term frequency–inverse documentfrequency)的加权向量表示方式中,首先,一种无监督的方法训练将代码片段作为加权的字向量序列,权值是由TF-IDF方式确定。然后,建立了一个暹罗神经网络(Siamese NeuralNetwork)训练模型构造代码片段的语义向量表示,之后计算余弦相似度用于度量代码段对之间的相似度评分。其仅以“词频”度量词的重要性,后续构成代码段的特征值序列,词之间各自独立,无法反映序列信息,而且很容易受到数据集偏斜的影响。
基于此,本申请实施例提供了一种代码相似度检测方法及装置,对第一代码段进行分词得到多个第一目标词,对第二代码段进行分词得到多个第二目标词,利用Glove模型对多个第一目标词进行空间转换得到多个第一词向量,利用Glove模型对多个第二目标词分别进行空间转换得到多个第二词向量,利用递归神经网络对多个第一词向量进行语义提取得到第一语义向量,利用递归神经网络对多个第二词向量进行语义提取得到第二语义向量,这样第一语义向量是包含第一代码段的语义信息的向量,第二语义向量是包含第二代码段的语义信息的向量,计算第一语义向量和第二语义向量的相似度,可以作为第一代码段和第二代码段的相似度,利用语义表征代码段,因此得到的相似度是考虑语义信息的相似度,具有更高的准确性。
为了更好的理解本发明的技术方案和技术效果,以下将结合附图对具体的实施例进行详细的描述。
本申请实施例提供了一种代码相似度检测方法,参考图1所示,为本申请实施例提供的一种代码相似度检测方法的流程图,该方法可以包括:
S101,对第一代码段进行分词得到多个第一目标词,对第二代码段进行分词得到多个第二目标词。
本申请实施例中,可以比较两个代码段的相似度,两个代码段中其中一个为源代码,另一个为被比较代码,分别记为第一代码段和第二代码段。可以对第一代码段进行分词得到多个第一目标词,对第二代码段进行分词得到多个第二目标词。
在对第一代码段进行分词得到多个第一目标词,对第二代码段进行分词得到多个第二目标词之前,还可以确定第二代码段和第二代码段所使用的语言,之后对第一代码段和第二代码段进行预处理,去除第一代码段和第二代码段中的无用和不需要关心的信息,即去除第一代码段和第二代码段中的冗余信息,以减少对第一代码段和第二代码段进行后续处理的工作量。
具体的,预处理环节主要是去除在代码比较过程中的干扰和冗余信息,例如空格、制表符,换行符、注释,打印的调试语句等。预处理根据检测到的代码使用的语言的不同,我们可以进一步在预处理阶段将一些带有代码语言特性的干扰信息忽略掉,比如Java代码中的import语句和package语句等。经过预处理阶段的代码,已经去除了大部分冗余干扰信息,只留下了对于词法分析来说有意义的字符流部分。
S102,利用Glove模型对多个第一目标词分别进行空间转换得到多个第一词向量,利用Glove模型对多个第二目标词分别进行空间转换得到多个第二词向量。
本申请实施例中,可以利用Glove模型对第一目标词和第二目标词进行向量化,具体的,可以利用Glove模型对多个第一目标词分别进行空间转换得到多个第一词向量,利用Glove模型对多个第二目标词分别进行空间转换得到多个第二词向量。
第一目标词和第二目标词可以通过词嵌入(word embedding)的方式表示为低维向量,第一目标词对应的低维向量可以包含第一目标词在第一代码段中的词法特征和语法特征,第二目标词对应的低维向量可以包含第二目标词在第二代码段中的词法特征和语法特征。词嵌入,即单词嵌入,就是把X所属空间的单词映射为到Y空间的多维向量,找到一个映射或者函数,生成在一个新的空间上的表达。
利用Glove模型将所述多个第一目标词分别进行空间转换得到多个第一词向量,可以具体为,根据所述多个第一目标词的初始词向量和所述多个第一目标词的上下文信息,建立Glove模型进行空间转换的第一损失函数,对所述第一损失函数进行最小化以得到所述多个第一目标词对应的多个第一词向量;利用Glove模型对所述多个第二目标词分别进行空间转换得到多个第二词向量,可以具体为,根据所述多个第二目标词的初始词向量和所述多个第二目标词的上下文信息,建立Glove模型进行空间转换的第二损失函数,对所述第二损失函数进行最小化以得到所述多个第二目标词对应的多个第二词向量。
其中,第一损失函数可以通过以下方式得到:将所述多个第一目标词两两组合得到多个第一词组;根据属于同一第一词组的两个第一目标词的初始词向量的内积,与所述两个第一目标词在同一个上下文窗口(context window)中共同出现次数,建立所述两个第一目标词对应的损失函数;基于所述两个第一目标词在同一个上下文窗口中共同出现次数,确定所述损失函数对应的函数权重;利用所述函数权重对所述损失函数进行加权平均,得到所述第一损失函数。
举例来说,第一代码端可以标识为X={w1,w2,...,wn},其中n表示,wi表示代码中第i个字符。利用语料库统计得到共现矩阵X,构建共现矩阵时会设置一个固定宽度的上下文窗口,矩阵中组成元素Xij表示第一目标词i和第一目标词j在上下文窗口中共同出现的次数,而且配合两个第一目标词在上下文窗口内共现时的距离做权重调节,通常来说,两个词的共现次数增加是以1为单位的,但是Glove模型利用两个第一目标词在上下文窗口内的距离做一个衰减函数,然后构建词向量和共现矩阵之间的近似关系。
据此可以构建如下公式:
其中,Xi表示第一目标词i在上下文中出现次数,N表示词汇表的大小。
条件概率Pik表示第一目标词k出现在第一目标词i上下文的概率,Xik表示第一目标词i和第一目标词k在上下文窗口中共同出现的次数,条件概率Pik可以表示为:
概率比Rijk可以表示为:
概率比Rijk满足表1所示的规律。
表1概率比对比表
R<sub>ijk</sub>的值 | 词j,k相关 | 词j,k不相关 |
词i,k相关 | 趋近于1 | 远大于1 |
词i,k不相关 | 远小于1 | 趋近于1 |
因此可以使用概率的比例来学习第一词向量,为了满足上述规律,试着构造函数如公式(4),
其中,ωi为第一目标词i对应的第一词向量,ωj为第一目标词j对应的第一词向量,ωk为第一目标词k对应的第一词向量。函数中参数是不同的变量,要表达线性向量空间之间概率差,可以对两个第一词向量做差,公式(4)变化为公式(5)。
第一词向量ωi和第一词向量ωj可以为同一类的向量,此时第一词向量ωi和第一词向量ωj的差值,与第一词向量ωi也属于同一类的向量,因此如上公式可以变形为:
F(ωi,ωk)=Pik (6)
公式(6)中左边是向量,右边是标量,将左侧转换为向量内积形式变换为标量,因为X是个对称矩阵,核心词和上下文是相对的,所以要求函数满足同态特性,即如公式(7):
令F=exp,ωTωk=log(Pik)=log(Xik)-log(Xi),最后为了公式满足对称性,添加偏置项bi,bk,就可以得到公式(8):
ωi Tωk+bi+bk=log(Xik) (8)
类比可得公式(9):
最后构建第一损失函数J,如公式(10):
第一损失函数既要满足语料库中在同一个上下文窗口中共同出现次数越多的词权重越大,又要遵循随着词频增加权重不能一直变大的原则,因此第一损失函数中包括:两个第一目标次对应的损失函数和该损失函数对应的权重函数f(Xij),f(Xij)满足以下几个条件:
1)f(0)=0;
3)词频过高时,权重不会过大,设置函数值上限。
在得到第一损失函数后,Glove模型的构建基本完成,由此可以看出,相比于基础的常用的Word2vec模型,Glove模型的确充分利用了所有语料,并考虑到不同的词的权重,所以性能相比于之前的模型更优越。
相应的,第二损失函数可以通过以下方式得到:将所述多个第二目标词两两组合得到多个第二词组;根据属于同一第二词组的两个第二目标词的初始词向量的内积,与所述两个第二目标词在同一个上下文窗口中共同出现次数,建立所述两个第二目标词对应的损失函数;基于所述两个第二目标词在同一个上下文窗口中共同出现次数,确定所述损失函数对应的函数权重;利用所述函数权重对所述损失函数进行加权平均,得到所述第二损失函数。第二损失函数的构建可以参考第一损失函数的构建方式,在此不再赘述。
S103,利用递归神经网络对多个第一词向量进行语义提取得到第一语义向量,利用递归神经网络对多个第二词向量进行语义提取得到第二语义向量。
在利用Glove模型将所述多个第一目标词分别进行空间转换得到多个第一词向量,利用Glove模型对所述多个第二目标词分别进行空间转换得到多个第二词向量之后,可以利用递归神经网络对多个第一词向量进行语义提取得到第一语义向量,利用递归神经网络对多个第二词向量进行语义提取得到第二语义向量。
神经网络是一种希望通过模拟人脑实现人工智能的机器学习技术,经典的神经网络包括三层,分别是输入层、隐藏层以及输出层,参考图2所示,为本申请实施例提供的一种神经网络的结构示意图。设计神经网络时,输入层负责接收信号,输出层最后整合输出内容,中间的隐藏层负责分解和处理接收到的数据,可以根据需要任意变化,结构图中箭头方向代表预测过程中数据的流动方向,输入是特征,输出是目标,神经网络作用就是利用已知属性对目标属性做预测,训练神经网络本质是对神经元之间的连接线权重的训练。图中的“圆圈”代表处理单元,也叫“神经元”,若干个神经元组成一层,多层一起构成“神经网络”。
递归神经网络(RNN)是递归人工神经网络的一种变体,在递归人工神经网络中,神经元之间的连接形成一个有向循环。这意味着输出不仅依赖于当前的输入,还依赖于前一步神经元的状态。不同于CNN依赖于空间局部性,RNN更依赖于顺序局部性或时间局部性,可以对序列内容建模。长短时记忆(Long-Short Term Memory,LSTM):一种特殊的RNN结构,它比传统的RNN能更精确地模拟时间序列及其长期依赖关系。
大数据时代,使获取大量的样本量来训练合适的表示代码特征的模型成为可能,目前已经可以找到可使用的代码语料库,其语料来源是Github,StackOverflow和其他编程Q&A社区。而且计算机的性能提升使模型训练速度加快。
递归神经网络为长短时记忆网络,具体为,可以为双向长短时记忆网络(BiLSTM),LSTM只能单向编码信息,而BiLSTM是由前向LSTM和后向LSTM组成,可以双向编码信息,提供输入序列每个节点完整的过去、未来上下文信息,相当于两层神经网络,生成两个隐层结果,将两个结果拼接起来作为BiLSTM模型的输出,如图3所示,为本申请实施例提供的一种BiLSTM的工作原理示意图,本发明采用BiLSTM模型获取推文的语义分布。
具体的,模型中输入的当前序列x(t),LSTM模型会根据当前序列x(t)和前一个序列的隐藏状态h(t-1)生成新隐藏状态h(t),BiLSTM由两条LSTM链构成,一个前向传播,一个后向传播,将两个链的输出连接在一起作为最终的共享表示,记为H,可以表示为:
H=BiLSTM(x(t),h(t-1)) (11)
在BiLSTM的训练过程中,初始状态和需要的静态参数随机初始化,在后续训练中再调优。本发明中将Glove模型生成的词嵌入向量以及代码解析器分析得到代码词法语法特征作为BiLSTM模型的输入,最终输出第一代码段的第一语义向量表示为vx,第二代码段的第二语义向量表示vy。
本申请实施例中,致力于找到代码更贴合的语义表征方式,将代码关键信息提取出来,使提取出的信息既包含代码段的词法信息,也包括语法结构信息,最重要的是提取出代码的语义信息,最终得到第一代码段和第二代码段映射到向量空间中的向量表示,又加入了代码中的结构信息即上下文信息,利用代码片段中结构、数据流和控制流信息,能得到更贴合代码本身的语义向量表示。
S104,计算第一语义向量和第二语义向量的相似度,作为第一代码段和第二代码段的相似度。
由于第一语义向量是包含第一代码段的语义信息的向量,第二语义向量是包含第二代码段的语义信息的向量,计算第一语义向量和第二语义向量的相似度,可以作为第一代码段和第二代码段的相似度,利用语义表征代码段,因此得到的相似度是考虑语义信息的相似度,具有更高的准确性。
第一语义向量和第二语义向量之间的相似度可以通过第一语义向量和第二语义向量之间的余弦距离表示,余弦距离可以衡量两个向量之间方向上的差异,n维向量的余弦距离可以表示为:
计算出的结果是两个向量之间夹角的余弦值,其取值范围为[-1,1],夹角与余弦值负相关,余弦结果越大,两个向量之间夹角越小,两个向量在向量空间中距离更近。
本申请实施例提供了一种代码相似度检测方法,对第一代码段进行分词得到多个第一目标词,对第二代码段进行分词得到多个第二目标词,利用Glove模型对多个第一目标词进行空间转换得到多个第一词向量,利用Glove模型对多个第二目标词分别进行空间转换得到多个第二词向量,利用递归神经网络对多个第一词向量进行语义提取得到第一语义向量,利用递归神经网络对多个第二词向量进行语义提取得到第二语义向量,这样第一语义向量是包含第一代码段的语义信息的向量,第二语义向量是包含第二代码段的语义信息的向量,计算第一语义向量和第二语义向量的相似度,可以作为第一代码段和第二代码段的相似度,利用语义表征代码段,因此得到的相似度是考虑语义信息的相似度,具有更高的准确性。
基于本申请实施例提供的一种代码相似度检测方法,本申请实施例还提供了一种代码相似度检测装置,参考图4所示,为本申请实施例提供的一种代码相似度检测装置的结构框图,该装置可以包括:
分词单元110,用于对第一代码段进行分词得到多个第一目标词,对第二代码段进行分词得到多个第二目标词;
空间转换单元120,用于利用Glove模型对所述多个第一目标词分别进行空间转换得到多个第一词向量,利用Glove模型对所述多个第二目标词分别进行空间转换得到多个第二词向量;
语义提取单元130,用于利用递归神经网络对所述多个第一词向量进行语义提取得到第一语义向量,利用递归神经网络对所述多个第二词向量进行语义提取得到第二语义向量;
相似度计算单元140,用于计算所述第一语义向量和所述第二语义向量的相似度,作为所述第一代码段和所述第二代码段的相似度。
可选的,所述空间转换单元,包括:
第一转换单元,用于根据所述多个第一目标词的初始词向量和所述多个第一目标词的上下文信息,建立Glove模型进行空间转换的第一损失函数,对所述第一损失函数进行最小化以得到所述多个第一目标词对应的多个第一词向量;
第二转换单元,用于根据所述多个第二目标词的初始词向量和所述多个第二目标词的上下文信息,建立Glove模型进行空间转换的第二损失函数,对所述第二损失函数进行最小化以得到所述多个第二目标词对应的多个第二词向量。
可选的,所述第一转换单元具体用于:
将所述多个第一目标词两两组合得到多个第一词组;根据属于同一第一词组的两个第一目标词的初始词向量的内积,与所述两个第一目标词在同一个上下文窗口中共同出现次数,建立所述两个第一目标词对应的损失函数;基于所述两个第一目标词在同一个上下文窗口中共同出现次数,确定所述损失函数对应的函数权重;利用所述函数权重对所述损失函数进行加权平均,得到所述第一损失函数;对所述第一损失函数进行最小化以得到所述多个第一目标词对应的多个第一词向量;
所述第二转换单元具体用于:
将所述多个第二目标词两两组合得到多个第二词组;根据属于同一第二词组的两个第二目标词的初始词向量的内积,与所述两个第二目标词在同一个上下文窗口中共同出现次数,建立所述两个第二目标词对应的损失函数;基于所述两个第二目标词在同一个上下文窗口中共同出现次数,确定所述损失函数对应的函数权重;利用所述函数权重对所述损失函数进行加权平均,得到所述第二损失函数,对所述第二损失函数进行最小化以得到所述多个第二目标词对应的多个第二词向量。
可选的,所述递归神经网络为双向长短时记忆网络。
可选的,所述装置还包括:
预处理单元,用于对第一代码段进行分词得到多个第一目标词,对第二代码段进行分词得到多个第二目标词之前,对所述第一代码段进行预处理,以去除所述第一代码段中的冗余信息;对所述第二代码段进行预处理,以去除所述第二代码段中的冗余信息。
本申请实施例提供了一种代码相似度检测方法及装置,对第一代码段进行分词得到多个第一目标词,对第二代码段进行分词得到多个第二目标词,利用Glove模型对多个第一目标词进行空间转换得到多个第一词向量,利用Glove模型对多个第二目标词分别进行空间转换得到多个第二词向量,利用递归神经网络对多个第一词向量进行语义提取得到第一语义向量,利用递归神经网络对多个第二词向量进行语义提取得到第二语义向量,这样第一语义向量是包含第一代码段的语义信息的向量,第二语义向量是包含第二代码段的语义信息的向量,计算第一语义向量和第二语义向量的相似度,可以作为第一代码段和第二代码段的相似度,利用语义表征代码段,因此得到的相似度是考虑语义信息的相似度,具有更高的准确性。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其它实施例的不同之处。
以上所述仅是本发明的优选实施方式,虽然本发明已以较佳实施例披露如上,然而并非用以限定本发明。任何熟悉本领域的技术人员,在不脱离本发明技术方案范围情况下,都可利用上述揭示的方法和技术内容对本发明技术方案做出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所做的任何的简单修改、等同变化及修饰,均仍属于本发明技术方案保护的范围内。
Claims (10)
1.一种代码相似度检测方法,其特征在于,包括:
对第一代码段进行分词得到多个第一目标词,对第二代码段进行分词得到多个第二目标词;
利用Glove模型对所述多个第一目标词分别进行空间转换得到多个第一词向量,利用Glove模型对所述多个第二目标词分别进行空间转换得到多个第二词向量;
利用递归神经网络对所述多个第一词向量进行语义提取得到第一语义向量,利用递归神经网络对所述多个第二词向量进行语义提取得到第二语义向量;
计算所述第一语义向量和所述第二语义向量的相似度,作为所述第一代码段和所述第二代码段的相似度。
2.根据权利要求1所述的方法,其特征在于,所述利用Glove模型将所述多个第一目标词分别进行空间转换得到多个第一词向量,包括:
根据所述多个第一目标词的初始词向量和所述多个第一目标词的上下文信息,建立Glove模型进行空间转换的第一损失函数,对所述第一损失函数进行最小化以得到所述多个第一目标词对应的多个第一词向量;
所述利用Glove模型对所述多个第二目标词分别进行空间转换得到多个第二词向量,包括:
根据所述多个第二目标词的初始词向量和所述多个第二目标词的上下文信息,建立Glove模型进行空间转换的第二损失函数,对所述第二损失函数进行最小化以得到所述多个第二目标词对应的多个第二词向量。
3.根据权利要求2所述的方法,其特征在于,根据所述多个第一目标词的初始词向量和所述多个第一目标词的上下文信息,建立Glove模型进行空间转换的第一损失函数,包括:
将所述多个第一目标词两两组合得到多个第一词组;根据属于同一第一词组的两个第一目标词的初始词向量的内积,与所述两个第一目标词在同一个上下文窗口中共同出现次数,建立所述两个第一目标词对应的损失函数;基于所述两个第一目标词在同一个上下文窗口中共同出现次数,确定所述损失函数对应的函数权重;利用所述函数权重对所述损失函数进行加权平均,得到所述第一损失函数;
根据所述多个第二目标词的初始词向量和所述多个第二目标词的上下文信息,建立Glove模型进行空间转换的第二损失函数,包括:
将所述多个第二目标词两两组合得到多个第二词组;根据属于同一第二词组的两个第二目标词的初始词向量的内积,与所述两个第二目标词在同一个上下文窗口中共同出现次数,建立所述两个第二目标词对应的损失函数;基于所述两个第二目标词在同一个上下文窗口中共同出现次数,确定所述损失函数对应的函数权重;利用所述函数权重对所述损失函数进行加权平均,得到所述第二损失函数。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述递归神经网络为双向长短时记忆网络。
5.根据权利要求1-3任一项所述的方法,其特征在于,对第一代码段进行分词得到多个第一目标词,对第二代码段进行分词得到多个第二目标词之前,所述方法还包括:
对所述第一代码段进行预处理,以去除所述第一代码段中的冗余信息;对所述第二代码段进行预处理,以去除所述第二代码段中的冗余信息。
6.一种代码相似度检测装置,其特征在于,包括:
分词单元,用于对第一代码段进行分词得到多个第一目标词,对第二代码段进行分词得到多个第二目标词;
空间转换单元,用于利用Glove模型对所述多个第一目标词分别进行空间转换得到多个第一词向量,利用Glove模型对所述多个第二目标词分别进行空间转换得到多个第二词向量;
语义提取单元,用于利用递归神经网络对所述多个第一词向量进行语义提取得到第一语义向量,利用递归神经网络对所述多个第二词向量进行语义提取得到第二语义向量;
相似度计算单元,用于计算所述第一语义向量和所述第二语义向量的相似度,作为所述第一代码段和所述第二代码段的相似度。
7.根据权利要求6所述的装置,其特征在于,所述空间转换单元,包括:
第一转换单元,用于根据所述多个第一目标词的初始词向量和所述多个第一目标词的上下文信息,建立Glove模型进行空间转换的第一损失函数,对所述第一损失函数进行最小化以得到所述多个第一目标词对应的多个第一词向量;
第二转换单元,用于根据所述多个第二目标词的初始词向量和所述多个第二目标词的上下文信息,建立Glove模型进行空间转换的第二损失函数,对所述第二损失函数进行最小化以得到所述多个第二目标词对应的多个第二词向量。
8.根据权利要求7所述的装置,其特征在于,所述第一转换单元具体用于:
将所述多个第一目标词两两组合得到多个第一词组;根据属于同一第一词组的两个第一目标词的初始词向量的内积,与所述两个第一目标词在同一个上下文窗口中共同出现次数,建立所述两个第一目标词对应的损失函数;基于所述两个第一目标词在同一个上下文窗口中共同出现次数,确定所述损失函数对应的函数权重;利用所述函数权重对所述损失函数进行加权平均,得到所述第一损失函数;对所述第一损失函数进行最小化以得到所述多个第一目标词对应的多个第一词向量;
所述第二转换单元具体用于:
将所述多个第二目标词两两组合得到多个第二词组;根据属于同一第二词组的两个第二目标词的初始词向量的内积,与所述两个第二目标词在同一个上下文窗口中共同出现次数,建立所述两个第二目标词对应的损失函数;基于所述两个第二目标词在同一个上下文窗口中共同出现次数,确定所述损失函数对应的函数权重;利用所述函数权重对所述损失函数进行加权平均,得到所述第二损失函数,对所述第二损失函数进行最小化以得到所述多个第二目标词对应的多个第二词向量。
9.根据权利要求6-8任一项所述的装置,其特征在于,所述递归神经网络为双向长短时记忆网络。
10.根据权利要求6-8任一项所述的装置,其特征在于,所述装置还包括:
预处理单元,用于对第一代码段进行分词得到多个第一目标词,对第二代码段进行分词得到多个第二目标词之前,对所述第一代码段进行预处理,以去除所述第一代码段中的冗余信息;对所述第二代码段进行预处理,以去除所述第二代码段中的冗余信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210385696.9A CN114742069A (zh) | 2022-04-13 | 2022-04-13 | 一种代码相似度检测方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210385696.9A CN114742069A (zh) | 2022-04-13 | 2022-04-13 | 一种代码相似度检测方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114742069A true CN114742069A (zh) | 2022-07-12 |
Family
ID=82282576
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210385696.9A Pending CN114742069A (zh) | 2022-04-13 | 2022-04-13 | 一种代码相似度检测方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114742069A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115758164A (zh) * | 2022-10-12 | 2023-03-07 | 清华大学 | 二进制代码相似度检测方法、模型训练方法及装置 |
CN116340185A (zh) * | 2023-05-19 | 2023-06-27 | 国网数字科技控股有限公司 | 一种软件开源代码成分分析方法、装置及设备 |
-
2022
- 2022-04-13 CN CN202210385696.9A patent/CN114742069A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115758164A (zh) * | 2022-10-12 | 2023-03-07 | 清华大学 | 二进制代码相似度检测方法、模型训练方法及装置 |
CN116340185A (zh) * | 2023-05-19 | 2023-06-27 | 国网数字科技控股有限公司 | 一种软件开源代码成分分析方法、装置及设备 |
CN116340185B (zh) * | 2023-05-19 | 2023-09-01 | 国网数字科技控股有限公司 | 一种软件开源代码成分分析方法、装置及设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113011533B (zh) | 文本分类方法、装置、计算机设备和存储介质 | |
US20220245365A1 (en) | Translation method and apparatus based on multimodal machine learning, device, and storage medium | |
CN112800776B (zh) | 双向gru关系抽取数据处理方法、系统、终端、介质 | |
CN111931506B (zh) | 一种基于图信息增强的实体关系抽取方法 | |
Rutherford et al. | A systematic study of neural discourse models for implicit discourse relation | |
CN110321563B (zh) | 基于混合监督模型的文本情感分析方法 | |
CN108874896B (zh) | 一种基于神经网络和幽默特征的幽默识别方法 | |
CN112784532B (zh) | 用于短文本情感分类的多头注意力记忆系统 | |
CN111414481A (zh) | 基于拼音和bert嵌入的中文语义匹配方法 | |
US11900250B2 (en) | Deep learning model for learning program embeddings | |
CN115357719B (zh) | 基于改进bert模型的电力审计文本分类方法及装置 | |
CN114742069A (zh) | 一种代码相似度检测方法及装置 | |
CN116661805B (zh) | 代码表示的生成方法和装置、存储介质及电子设备 | |
CN113657123A (zh) | 基于目标模板指导和关系头编码的蒙语方面级情感分析方法 | |
CN116628186B (zh) | 文本摘要生成方法及系统 | |
CN114818717A (zh) | 融合词汇和句法信息的中文命名实体识别方法及系统 | |
Peng et al. | Image to LaTeX with graph neural network for mathematical formula recognition | |
CN115759119A (zh) | 一种金融文本情感分析方法、系统、介质和设备 | |
CN117094291B (zh) | 基于智能写作的自动新闻生成系统 | |
CN112488111B (zh) | 一种基于多层级表达引导注意力网络的指示表达理解方法 | |
CN112349294B (zh) | 语音处理方法及装置、计算机可读介质、电子设备 | |
Göker et al. | Neural text normalization for turkish social media | |
CN116522165B (zh) | 一种基于孪生结构的舆情文本匹配系统及方法 | |
CN110377753B (zh) | 基于关系触发词与gru模型的关系抽取方法及装置 | |
CN116882402A (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 |