CN116738963A - 基于多头注意力机制的深度学习代码抄袭检测方法 - Google Patents
基于多头注意力机制的深度学习代码抄袭检测方法 Download PDFInfo
- Publication number
- CN116738963A CN116738963A CN202310257808.7A CN202310257808A CN116738963A CN 116738963 A CN116738963 A CN 116738963A CN 202310257808 A CN202310257808 A CN 202310257808A CN 116738963 A CN116738963 A CN 116738963A
- Authority
- CN
- China
- Prior art keywords
- refers
- vector
- abstract syntax
- code
- ast
- 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
- 230000007246 mechanism Effects 0.000 title claims abstract description 51
- 238000001514 detection method Methods 0.000 title claims abstract description 24
- 238000013135 deep learning Methods 0.000 title claims abstract description 12
- 239000013598 vector Substances 0.000 claims abstract description 120
- 238000013528 artificial neural network Methods 0.000 claims abstract description 11
- 230000000306 recurrent effect Effects 0.000 claims abstract description 11
- 238000000354 decomposition reaction Methods 0.000 claims abstract description 9
- 238000000034 method Methods 0.000 claims description 40
- 230000006870 function Effects 0.000 claims description 21
- 239000011159 matrix material Substances 0.000 claims description 21
- 239000004698 Polyethylene Substances 0.000 claims description 16
- 230000008569 process Effects 0.000 claims description 10
- 238000006243 chemical reaction Methods 0.000 claims description 9
- 239000012634 fragment Substances 0.000 claims description 7
- 238000004364 calculation method Methods 0.000 claims description 6
- 238000002372 labelling Methods 0.000 claims description 5
- 230000004913 activation Effects 0.000 claims description 3
- 238000007689 inspection Methods 0.000 claims description 3
- -1 polyethylene Polymers 0.000 claims description 3
- 229920000573 polyethylene Polymers 0.000 claims description 3
- 238000006467 substitution reaction Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000010801 machine learning Methods 0.000 description 2
- 230000035945 sensitivity Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/194—Calculation of difference between files
-
- 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/205—Parsing
- G06F40/211—Syntactic parsing, e.g. based on context-free grammar [CFG] or unification grammars
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/253—Grammatical analysis; Style critique
-
- 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
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/30—Semantic analysis
-
- 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/0464—Convolutional networks [CNN, ConvNet]
-
- 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)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Artificial Intelligence (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Bioinformatics & Computational Biology (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种基于多头注意力机制的深度学习代码抄袭检测方法,包括:1)使用代码解析工具将源代码解析成抽象语法树;2)以语句节点作为分解粒度,将抽象语法树以深度优先遍历的方式分解成一组抽象语法子树;3)使用递归神经网络生成抽象语法子树的代码向量,使用多头自注意力机制、残差网络获取抽象语法子树的代码向量的特征,采用全连接网络将抽象语法子树的代码向量表示成一个固定长度的向量,通过余弦相似性计算两份代码的相似性,相似性超过阈值的代码判定为抄袭,未超过阈值的判定为未抄袭;4)使用注意力机制,将判定为抄袭的两份代码进行源代码相似性的标注。本发明实现了端到端的源代码抄袭检测算法,可实现更灵活和精确的下游应用。
Description
技术领域
本发明涉及代码相似性和代码抄袭检测的技术领域,尤其是指一种基于多头注意力机制的深度学习代码抄袭检测方法。
背景技术
代码抄袭检测是指检测出存在于代码库中两个及两个以上相同或者相似的源代码片段,并进行代码相似性标注的过程,在使用在线判别系统(Online Judge System)的大学编程课程中起着重要作用。
在典型的大学编程课程中,代码抄袭检测工具一般使用非机器学习的方法来完成。这些方法虽然能够很好的检测代码混淆程度低的抄袭代码对,但是对于高程度的混淆,如代码结构的重构和语句的等价替换,却依旧敏感。随着代码抄袭检测领域的不断发展,有三类源代码信息抽取的方法得到了发展,它们分别是:1、基于抽象语法树的抄袭检测方法,这类方法使用源代码上的句法信息,如for语句的句法结构,if语句的句法结构等;2、基于图的代码抄袭检测方法,这类方法使用源代码上的语义信息,如语句块的跳转;3、基于程序行为的代码抄袭检测方法,这类方法使用程序的运行行为信息。非机器学习的方法,通过使用以上三类方法将源代码表示成中间形式,然后采用贪心字符串平铺(Greedy StringTiling)等方法计算代码对的相似性,这类方法不需要训练模型,但易受代码结构的影响,同时难以识别语句的等价替换,其检测精度仍然需要完善。
发明内容
本发明的目的在于克服现有技术的缺点与不足,提出了一种基于多头注意力机制的深度学习代码抄袭检测方法,能够使用源代码的句法信息进行代码抄袭检测,缓解对代码结构敏感和语句的等价替换的问题,同时为检测语义抄袭提供了一个探索方向,进一步可以实现更灵活和精确的下游应用。
为实现上述目的,本发明所提供的技术方案为,基于多头注意力机制的深度学习代码抄袭检测方法,包括以下步骤:
1)使用代码解析工具将源代码解析成抽象语法树;
2)以语句节点作为分解粒度,将抽象语法树以深度优先遍历的方式分解成一组抽象语法子树;
3)使用递归神经网络生成抽象语法子树的代码向量,使用多头自注意力机制、残差网络获取抽象语法子树的代码向量的特征,采用全连接网络的方式将抽象语法子树的代码向量表示成一个固定长度的向量,最后通过余弦相似性计算两份代码的相似性,相似性超过阈值的代码判定为抄袭,未超过阈值的判定为未抄袭;
4)使用注意力机制,将判定为抄袭的两份代码进行源代码相似性的标注。
进一步,在步骤1)中,抽象语法树指的是编译原理中语法分析的结果,语法分析以词法分析的结果为输入,语法检查的同时并输出一棵语法树;给定一段代码text,生成抽象语法树ast的过程由公式定义为:
tokens=lexer(text)
ast=parser(tokens)
式中,lexer是指词法分析器,tokens是指词法分析的结果即单词序列,parser是指语法分析器,ast即抽象语法树。
进一步,在步骤2)中,根据步骤1)所得抽象语法树ast,将抽象语法树ast分解成一组抽象语法子树sub_asts,具体分解的过程如下:
A)初始化语句节点集S={},令节点node指向抽象语法树ast的根节点;
B)访问节点node,如果当前节点node∈Logics,那么S=node∪S;
C)访问当前节点node的子节点;
D)重复B)和C),直至遍历完抽象语法树;
Logics={MethodDeclaration,LocalVariable,ForStatement,TryStatement,WhileStatement,ReturnStatement}
式中,Logics指的是语句节点集合,MethodDeclaration指的是方法声明语句、LocalVariable指的是变量声明语句、ForStatement指的是for语句、TryStatement指的是try语句、WhileStatement指的是while语句、ReturnStatement指的是return语句;
一棵抽象语法树ast的分解结果为一组抽象语法子树sub_asts:
sub_asts=[sub_ast1,sub_ast2,sub_ast3,...,sub_asti]
式中,sub_asti指的是第i棵抽象语法子树。
进一步,所述步骤3)包括以下步骤:
3.1)使用bigclonebench和googlejam4数据集,生成抽象语法树的语料库,然后使用无监督的word2vec算法模型对抽象语法树的节点生成对应的向量:
asts=parser(codes)
sequences=dfs(asts)
we=word2vec(sequences)
式中,codes是指bigclonebench和googlejam4数据集中的所有代码片段,dfs是指以深度优先遍历的方式生成抽象语法树的节点序列,sequences是dfs生成的所有的序列,word2vec是指使用词嵌入的算法模型生成抽象语法树节点的向量表示,we∈Rv×d是指词向量矩阵,其中v是指词汇量的大小,d是向量维度,R是指向量空间;
3.2)使用递归神经网络生成抽象语法子树sub_ast的向量,具体为:
给定一棵抽象语法子树sub_ast,用n表示非叶子节点,用m表示节点n的子节点数量,那么节点n的向量表示为:
式中,xn是指节点n的独热编码,νecn是指节点n对应的向量,we T是指向量矩阵we的转置;
式中,wn∈Rd×k是指可学习的权重矩阵,k是输出维度,bn是节点n的偏置项,hi是节点n第i个子节点的隐藏状态,h是更新之后的隐藏状态,σ是激活函数;通过上式,就能够自底向上递归地计算抽象语法子树中所有节点的向量,从而提取所有节点的词法和语法信息,生成抽象语法子树sub_ast的向量h,那么步骤3.1)中的一组抽象语法子树sub_asts就转换成了向量ht:
ht=[h1,h2,h3,...,hi]
式中,hi表示第i棵抽象语法子树的向量;
3.3)使用位置编码生成时序信息,具体为:
式中,pos是指抽象语法子树在一组抽象语法子树中从左到右的位置,u是指节点向量的第u个维度,sin和cos分别指正弦函数和余弦函数,PEcos和PEsin分别指以正弦函数和余弦函数的方式生成时序信息,正弦函数和余弦函数能够将位置外推到比训练期间遇到的序列长度更长的序列,从而使得位置编码拥有更好的泛化性,那么步骤3.2)所得向量ht就转换成了hp:
hpi=PEsin(hi)+PEcos(hi)
hp=[hp1,hp2,hp3,...,hpi]
式中,hpi指的是hi经过转换后所得的向量;
3.4)使用注意力机制进一步提取特征,可缩放注意力机制的数学定义:
Qi'=QWi' Q
Ki'=KWi' K
Vi'=VWi' V
式中,Q是指查询query,指的是抽象语法子树的向量;K是指键key,V是指值value,K和V相同,且在可缩放注意力机制它们的值与Q相同,Qi'、Ki'、Vi'分别对应Q、K、V经过转化后的向量;分别对应Q、K、V的中第i'个可学习的权重矩阵,do是指向量的输出维度,dmodel是指矩阵中的第一个维度,dmodel由dmodel/h=do确定;headi'是指第i'个注意力头;
多头注意力机制是可缩放注意力机制的扩展,能够不同向量空间学习向量的特征,具体为:
multihead(Q,K,V)=Concat(head1,head2,head3,...,headi')
式中,是一个可学习的权重矩阵,Concat是向量连接运算;multihead是指多头注意力计算;多头注意力机制即使用多个可缩放注意力对抽象语法子树的向量进行特征深化,最后将多个可缩放注意力的计算结果连接在一起;
经过多头注意力机制后,步骤3.3)所得向量hp转成了向量ha,具体如下:
hai=multihead(hpi,hpi,hpi)
ha=[ha1,ha2,ha3,...,hai]
式中,hai是指hpi经过多头注意力机制转换后所得的向量;
3.5)使用残差网络,连接步骤3.2)中的向量ht和经过注意力机制的向量ha,具体如下:
res=ha+ht
式中,ha和ht两个向量相加即得到残差网络的输出res;
3.6)使用线性网络层将步骤3.5)的输出投影到一维向量,所得的一维向量即为代码对的相似值,即:
s=add(resx,-resy)Wl
式中,resx和resy是指代码x和代码y经过残差网络所得的两个特征向量,add是指线性相加,s是代码x和代码y的相似值,Wl∈Rd是指线性网络层可学习的权重矩阵。
进一步,在步骤4)中,使用注意力机制将判定为相似的两个代码进行标注,相似性标注阶段使用的是递归神经网络所得输出ht;相似性标注以抽象语法子树为单位,计算代码对的子树之间的相似度超过阈值的代码片段,即:
scoresij=htxihtyj
pairs=mark(scoresij)
式中,htxi是指代码x的向量ht的第i个向量分量,htyj是指代码y的向量ht的第j个向量分量,scoresij是指htxi和htyj相似性得分,mark是指将超过阈值ε的抽象语法子树标记出来,pairs是指被标记的两个代码中的片段。
本发明与现有技术相比,具有如下优点与有益效果:
1、本发明首次采用多头注意力机制进行代码抄袭检测,缓解对代码结构敏感的问题,同时为检测语义抄袭提供了一个方案。
2、本发明可以学习代码的词法和语法信息,为代码的向量表示提供了更完善的信息。
3、本发明与代码抄袭检测的相似性标定方法相比,提高了语义解释。
4、本发明可通过数据集扩充识别新的代码抄袭手段。
5、本发明方法在代码抄袭检测任务中具有广泛的使用空间,操作简单、适应性强,具有广阔的应用前景。
附图说明
图1为本发明逻辑流程示意图。
图2为本发明的架构示意图。图中parse指的是词法分析和语法分析,splits指的是抽象语法树的划分,RvNN指的是递归神经网络,PE指的是位置编码,MultiHead指的是多头注意力,residual指的是残差连接,add指的是线性相加。
具体实施方式
下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。
如图1和图2所示,本实施例提供了一种基于多头注意力机制的深度学习代码抄袭检测方法,使用了抽象语法树的语法信息及多头注意力机制,其包括以下步骤:
1)使用代码解析工具将源代码解析成抽象语法树;
抽象语法树指的是编译原理中语法分析的结果,语法分析以词法分析的结果为输入,语法检查的同时并输出一棵语法树;给定一段代码text,生成抽象语法树ast的过程由公式可定义为:
tokens=lexer(text)
ast=parser(tokens)
式中,lexer是指词法分析器,tokens是指词法分析的结果即单词序列,parser是指语法分析器,ast即抽象语法树。
2)根据步骤1)所得抽象语法树ast,进一步将抽象语法树ast分解成一组抽象语法子树sub_asts,具体分解的过程如下:
A)初始化语句节点集S={},令节点node指向抽象语法树ast的根节点。
B)访问节点node,如果当前节点node∈Logics,那么S=node∪S。
C)访问当前节点node的子节点。
D)重复B)和C),直至遍历完抽象语法树。
Logics={MethodDeclaration,LocalVariable,ForStatement,TryStatement,WhileStatement,ReturnStatement}
式中,Logics指的是语句节点集合,MethodDeclaration指的是方法声明语句、LocalVariable指的是变量声明语句、ForStatement指的是for语句、TryStatement指的是try语句、WhileStatement指的是while语句、ReturnStatement指的是return语句。
一颗抽象语法树ast的分解结果为一组抽象语法子树sub_asts:
sub_asts=[sub_ast1,sub_ast2,sub_ast3,...,sub_asti]
式中,sub_asti指的是第i棵抽象语法子树。
3)使用递归神经网络生成抽象语法子树的代码向量,使用多头自注意力机制、残差网络获取抽象语法子树的代码向量的特征,采用全连接网络的方式将抽象语法子树的代码向量表示成一个固定长度的向量,最后通过余弦相似性计算两份代码的相似性,相似性超过阈值的代码判定为抄袭,未超过阈值的判定为未抄袭,包括以下步骤:
3.1)使用bigclonebench和googlejam4数据集,生成抽象语法树的语料库,然后使用无监督的word2vec算法模型对抽象语法树的节点生成对应的向量:
asts=parser(codes)
sequences=dfs(asts)
we=word2vec(sequences)
式中,codes是指bigclonebench和googlejam4数据集中的所有代码片段,dfs是指以深度优先遍历的方式生成抽象语法树的节点序列,sequences是dfs生成的所有的序列,word2vec是指使用词嵌入的算法模型生成抽象语法树节点的向量表示,we∈Rv×d是指词向量矩阵,其中v是指词汇量的大小,d是向量维度,R是指向量空间;
3.2)使用递归神经网络生成抽象语法子树sub_ast的向量,具体为:
给定一棵抽象语法子树sub_ast,用n表示非叶子节点,用m表示节点n的子节点数量,那么节点n的向量可表示为:
式中,xn是指节点n的独热编码,νecn是指节点n对应的向量,we T是指向量矩阵we的转置。
式中,wn∈Rd×k是指可学习的权重矩阵,其中d是向量维度、k是输出维度,bn是节点n的偏置项,hi是节点n第i个子节点的隐藏状态,h是更新之后的隐藏状态,σ是激活函数。通过上式,就可以自底向上递归地计算抽象语法子树中所有节点的向量,从而提取所有节点的词法和语法信息,生成抽象语法子树sub_ast的向量h,那么步骤3.1)中的一组抽象语法子树sub_asts就转换成了向量ht:
ht=[h1,h2,h3,...,hi]
式中,hi表示第i棵抽象语法子树的向量;
3.3)使用位置编码生成时序信息,具体为:
式中,pos是指抽象语法子树在一组抽象语法子树中从左到右的位置,u是指节点向量的第u个维度,sin和cos分别指正弦函数和余弦函数,PEcos和PEsin分别指以正弦函数和余弦函数的方式生成时序信息,正弦函数和余弦函数能够将位置外推到比训练期间遇到的序列长度更长的序列,从而使得位置编码拥有更好的泛化性,那么步骤3.2)所得向量ht就转换成了hp:
hpi=PEsin(hi)+PEcos(hi)
hp=[hp1,hp2,hp3,...,hpi]
式中,hpi指的是hi经过转换后所得的向量。
3.4)使用注意力机制进一步提取特征,具体而言,可缩放注意力机制的数学定义:
Qi'=QWi' Q
Ki'=KWi' K
Vi'=VWi' V
式中,Q是指查询query,指的是抽象语法子树的向量;K是指键key,V是指值value,K和V相同,且在可缩放注意力机制它们的值与Q相同,Qi'、Ki'、Vi'分别对应Q、K、V经过转化后的向量;分别对应Q、K、V的中第i'个可学习的权重矩阵,do是指向量的输出维度,dmodel是指矩阵中的第一个维度,dmodel由dmodel/h=do确定;headi'是指第i'个注意力头;
多头注意力机制是可缩放注意力机制的扩展,可以不同向量空间学习向量的特征,具体而言:
multihead(Q,K,V)=Concat(head1,head2,head3,...,headi')
式中,是一个可学习的权重矩阵,Concat是向量连接运算;multihead是指多头注意力计算;多头注意力机制即使用多个可缩放注意力对抽象语法子树的向量进行特征深化,最后将多个可缩放注意力的计算结果连接在一起;
经过多头注意力机制后,步骤3.3)所得hp转成了ha,具体如下:
hai=multihead(hpi,hpi,hpi)
ha=[ha1,ha2,ha3,...,hai]
式中,hai是指hpi经过多头注意力机制转换后所得的向量。
3.5)使用残差网络,连接步骤3.2)中的向量ht和经过注意力机制的向量ha,具体如下:
res=ha+ht
ha和ht两个向量相加即得到残差网络的输出res。
3.6)使用线性网络层步骤3.5)的输出投影到一维向量,所得的一维向量即为该代码对的相似值,即:
s=add(resx,-resy)Wl
式中,resx和resy是指代码x和代码y经过残差网络所得的两个特征向量,add是指线性相加,s是代码x和代码y的相似值,Wl∈Rd是指线性网络层可学习的权重矩阵。
4)使用注意力机制将判定为相似的两个代码进行标注,相似性标注阶段主要使用的是步骤3.2)递归神经网络所得输出ht。相似性标注以抽象语法子树为单位,计算代码对的子树之间的相似度超过阈值的代码片段,即
scoresij=htxihtyj
pairs=mark(scoresij)
式中,htxi是指代码x的向量ht的第i个向量分量,htyj是指代码y的向量ht的第j个向量分量,scoresij是指htxi和htyj相似性得分,mark是指将超过阈值ε的抽象语法子树标记出来,ε的取值为35.0,pairs是指被标记的两个代码中的片段。
由以上公式可知,本方法的代码相似性标注是以子树为粒度的。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。
Claims (5)
1.基于多头注意力机制的深度学习代码抄袭检测方法,其特征在于,包括以下步骤:
1)使用代码解析工具将源代码解析成抽象语法树;
2)以语句节点作为分解粒度,将抽象语法树以深度优先遍历的方式分解成一组抽象语法子树;
3)使用递归神经网络生成抽象语法子树的代码向量,使用多头自注意力机制、残差网络获取抽象语法子树的代码向量的特征,采用全连接网络的方式将抽象语法子树的代码向量表示成一个固定长度的向量,最后通过余弦相似性计算两份代码的相似性,相似性超过阈值的代码判定为抄袭,未超过阈值的判定为未抄袭;
4)使用注意力机制,将判定为抄袭的两份代码进行源代码相似性的标注。
2.根据权利要求1所述的基于多头注意力机制的深度学习代码抄袭检测方法,其特征在于,在步骤1)中,抽象语法树指的是编译原理中语法分析的结果,语法分析以词法分析的结果为输入,语法检查的同时并输出一棵语法树;给定一段代码text,生成抽象语法树ast的过程由公式定义为:
tokens=lexer(text)
ast=parser(tokens)
式中,lexer是指词法分析器,tokens是指词法分析的结果即单词序列,parser是指语法分析器,ast即抽象语法树。
3.根据权利要求2所述的基于多头注意力机制的深度学习代码抄袭检测方法,其特征在于,在步骤2)中,根据步骤1)所得抽象语法树ast,将抽象语法树ast分解成一组抽象语法子树sub_asts,具体分解的过程如下:
A)初始化语句节点集S={},令节点node指向抽象语法树ast的根节点;
B)访问节点node,如果当前节点node∈Logics,那么S=node∪S;
C)访问当前节点node的子节点;
D)重复B)和C),直至遍历完抽象语法树;
Logics={MethodDeclaration,LocalVariable,ForStatement,TryStatement,WhileStatement,ReturnStatement}
式中,Logics指的是语句节点集合,MethodDeclaration指的是方法声明语句、LocalVariable指的是变量声明语句、ForStatement指的是for语句、TryStatement指的是try语句、WhileStatement指的是while语句、ReturnStatement指的是return语句;
一棵抽象语法树ast的分解结果为一组抽象语法子树sub_asts:
sub_asts=[sub_ast1,sub_ast2,sub_ast3,...,sub_asti]
式中,sub_asti指的是第i棵抽象语法子树。
4.根据权利要求3所述的基于多头注意力机制的深度学习代码抄袭检测方法,其特征在于,所述步骤3)包括以下步骤:
3.1)使用bigclonebench和googlejam4数据集,生成抽象语法树的语料库,然后使用无监督的word2vec算法模型对抽象语法树的节点生成对应的向量:
asts=parser(codes)
sequences=dfs(asts)
we=word2vec(sequences)
式中,codes是指bigclonebench和googlejam4数据集中的所有代码片段,dfs是指以深度优先遍历的方式生成抽象语法树的节点序列,sequences是dfs生成的所有的序列,word2vec是指使用词嵌入的算法模型生成抽象语法树节点的向量表示,we∈Rv×d是指词向量矩阵,其中v是指词汇量的大小,d是向量维度,R是指向量空间;
3.2)使用递归神经网络生成抽象语法子树sub_ast的向量,具体为:
给定一棵抽象语法子树sub_ast,用n表示非叶子节点,用m表示节点n的子节点数量,那么节点n的向量表示为:
式中,xn是指节点n的独热编码,νecn是指节点n对应的向量,we T是指向量矩阵we的转置;
式中,wn∈Rd×k是指可学习的权重矩阵,k是输出维度,bn是节点n的偏置项,hi是节点n第i个子节点的隐藏状态,h是更新之后的隐藏状态,σ是激活函数;通过上式,就能够自底向上递归地计算抽象语法子树中所有节点的向量,从而提取所有节点的词法和语法信息,生成抽象语法子树sub_ast的向量h,那么步骤3.1)中的一组抽象语法子树sub_asts就转换成了向量ht:
ht=[h1,h2,h3,...,hi]
式中,hi表示第i棵抽象语法子树的向量;
3.3)使用位置编码生成时序信息,具体为:
式中,pos是指抽象语法子树在一组抽象语法子树中从左到右的位置,u是指节点向量的第u个维度,sin和cos分别指正弦函数和余弦函数,PEcos和PEsin分别指以正弦函数和余弦函数的方式生成时序信息,正弦函数和余弦函数能够将位置外推到比训练期间遇到的序列长度更长的序列,从而使得位置编码拥有更好的泛化性,那么步骤3.2)所得向量ht就转换成了hp:
hpi=PEsin(hi)+PEcos(hi)
hp=[hp1,hp2,hp3,...,hpi]
式中,hpi指的是hi经过转换后所得的向量;
3.4)使用注意力机制进一步提取特征,可缩放注意力机制的数学定义:
Qi'=QWi' Q
Ki'=KWi' K
Vi'=VWi' V
式中,Q是指查询query,指的是抽象语法子树的向量;K是指键key,V是指值value,K和V相同,且在可缩放注意力机制它们的值与Q相同,Qi'、Ki'、Vi'分别对应Q、K、V经过转化后的向量;分别对应Q、K、V的中第i'个可学习的权重矩阵,do是指向量的输出维度,dmodel是指矩阵中的第一个维度,dmodel由dmodel/h=do确定;headi'是指第i'个注意力头;
多头注意力机制是可缩放注意力机制的扩展,能够不同向量空间学习向量的特征,具体为:
multihead(Q,K,V)=Concat(head1,head2,head3,...,headi')
式中,是一个可学习的权重矩阵,Concat是向量连接运算;multihead是指多头注意力计算;多头注意力机制即使用多个可缩放注意力对抽象语法子树的向量进行特征深化,最后将多个可缩放注意力的计算结果连接在一起;
经过多头注意力机制后,步骤3.3)所得向量hp转成了向量ha,具体如下:
hai=multihead(hpi,hpi,hpi)
ha=[ha1,ha2,ha3,...,hai]
式中,hai是指hpi经过多头注意力机制转换后所得的向量;
3.5)使用残差网络,连接步骤3.2)中的向量ht和经过注意力机制的向量ha,具体如下:
res=ha+ht
式中,ha和ht两个向量相加即得到残差网络的输出res;
3.6)使用线性网络层将步骤3.5)的输出投影到一维向量,所得的一维向量即为代码对的相似值,即:
s=add(resx,-resy)Wl
式中,resx和resy是指代码x和代码y经过残差网络所得的两个特征向量,add是指线性相加,s是代码x和代码y的相似值,Wl∈Rd是指线性网络层可学习的权重矩阵。
5.根据权利要求4所述的基于多头注意力机制的深度学习代码抄袭检测方法,其特征在于,在步骤4)中,使用注意力机制将判定为相似的两个代码进行标注,相似性标注阶段使用的是递归神经网络所得输出ht;相似性标注以抽象语法子树为单位,计算代码对的子树之间的相似度超过阈值的代码片段,即:
scoresij=htxihtyj
pairs=mark(scoresij)
式中,htxi是指代码x的向量ht的第i个向量分量,htyj是指代码y的向量ht的第j个向量分量,scoresij是指htxi和htyj相似性得分,mark是指将超过阈值ε的抽象语法子树标记出来,pairs是指被标记的两个代码中的片段。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310257808.7A CN116738963A (zh) | 2023-03-16 | 2023-03-16 | 基于多头注意力机制的深度学习代码抄袭检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310257808.7A CN116738963A (zh) | 2023-03-16 | 2023-03-16 | 基于多头注意力机制的深度学习代码抄袭检测方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116738963A true CN116738963A (zh) | 2023-09-12 |
Family
ID=87912146
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310257808.7A Pending CN116738963A (zh) | 2023-03-16 | 2023-03-16 | 基于多头注意力机制的深度学习代码抄袭检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116738963A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117875434A (zh) * | 2024-03-13 | 2024-04-12 | 中国科学技术大学 | 一种用于扩展输入上下文长度的金融大模型长度外推方法 |
-
2023
- 2023-03-16 CN CN202310257808.7A patent/CN116738963A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117875434A (zh) * | 2024-03-13 | 2024-04-12 | 中国科学技术大学 | 一种用于扩展输入上下文长度的金融大模型长度外推方法 |
CN117875434B (zh) * | 2024-03-13 | 2024-06-04 | 中国科学技术大学 | 一种用于扩展输入上下文长度的金融大模型长度外推方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Hu et al. | Deep code comment generation | |
Hu et al. | Deep code comment generation with hybrid lexical and syntactical information | |
Yu et al. | Syntaxsqlnet: Syntax tree networks for complex and cross-domaintext-to-sql task | |
CN108446540B (zh) | 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统 | |
Perez et al. | Cross-language clone detection by learning over abstract syntax trees | |
Vidal et al. | Probabilistic finite-state machines-part II | |
Lin et al. | Grammar-based neural text-to-sql generation | |
Harer et al. | Tree-transformer: A transformer-based method for correction of tree-structured data | |
CN112215013B (zh) | 一种基于深度学习的克隆代码语义检测方法 | |
CN109977205B (zh) | 一种计算机自主学习源代码的方法 | |
CN112306494A (zh) | 一种基于卷积和循环神经网络的代码分类及聚类方法 | |
CN116661805B (zh) | 代码表示的生成方法和装置、存储介质及电子设备 | |
CN112784576B (zh) | 一种文本依存句法分析方法 | |
CN110442880A (zh) | 一种机器翻译译文的翻译方法、装置及存储介质 | |
CN113190219A (zh) | 一种基于递归神经网络模型的代码注释生成方法 | |
CN113657123A (zh) | 基于目标模板指导和关系头编码的蒙语方面级情感分析方法 | |
CN114742069A (zh) | 一种代码相似度检测方法及装置 | |
CN116738963A (zh) | 基于多头注意力机制的深度学习代码抄袭检测方法 | |
CN114064117A (zh) | 一种基于字节码和神经网络的代码克隆检测方法及系统 | |
CN115658846A (zh) | 一种适用于开源软件供应链的智能搜索方法及装置 | |
CN117573096A (zh) | 一种融合抽象语法树结构信息的智能代码补全方法 | |
Kowsher et al. | Lemmatization algorithm development for bangla natural language processing | |
CN115408506B (zh) | 联合语义解析和语义成分匹配的nl2sql的方法 | |
Xiang et al. | G3R: A Graph-Guided Generate-and-Rerank Framework for Complex and Cross-domain Text-to-SQL Generation | |
Ganascia | Extraction of recurrent patterns from stratified ordered trees |
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 |