CN115587318A - 一种基于神经网络的源码分类方法 - Google Patents
一种基于神经网络的源码分类方法 Download PDFInfo
- Publication number
- CN115587318A CN115587318A CN202211302051.0A CN202211302051A CN115587318A CN 115587318 A CN115587318 A CN 115587318A CN 202211302051 A CN202211302051 A CN 202211302051A CN 115587318 A CN115587318 A CN 115587318A
- Authority
- CN
- China
- Prior art keywords
- code
- ast
- embedding
- neural network
- vector
- 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
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- Machine Translation (AREA)
Abstract
本发明提供一种基于神经网络的源码分类方法。该方法包括:将待分类源码转换为AST;定义并初始化整个AST叶子节点对应的向量矩阵,记作从AST中随机抽取n条路径{p1,…,pn};针对抽取到的任一条路径pi,可将其转换为二元组<xs,xe>;从value_vocab中分别查询到当前路径pi上起始节点和末端节点的向量,进而得到当前路径pi的向量ci,记作:ci作为全连接神经网络中的一个神经元的输入,得到对应的输出n条路径{p1,…,pn}对应的n个向量{c1,…,cn}输入到含有n个神经元的全连接神经网络后,得到n个输出将所有的输出聚合为代码嵌入v;定义一个类别标签矩阵,记作将代码嵌入v与tags_vocab中每一个训练函数标签的嵌入进行运算后得到代码嵌入v的预测分布。
Description
技术领域
本发明涉及代码分析技术领域,尤其涉及一种基于神经网络的源码分类方法。
背景技术
对代码进行分析研究具有很多的应用场景,例如代码抄袭检测,软件漏洞搜索等。现有的代码分析方法主要存在以下三种:
第一种代码分析方法:由于程序语言与自然语言有着天然的相似性,都是由一些单词组成且都能够被语法树表示,因此一些学者借鉴自然语言的一些技术来分析代码。例如,代码被表示为一个序列应用在漏洞检测、代码克隆以及代码分类任务中。尽管与自然语言有着一些共性,但代码本身也拥有一些独特的性质,如自定义的标识符,更强的结构特征等。仅仅利用自然语言的处理方法来处理代码难免会造成大量的信息丢失。
第二种代码分析方法:为了建立更加适合代码分析的算法模型,一些学者借助本身的专家领域知识,制订了一系列规则来对代码进行分析研究。但是该方法过于依赖专家领域知识的传统方法面临以下几个问题:(1)数据集较小时模型表现较好,但当数据集过于庞大时,规则的制订会变得更加复杂,难以适应海量且复杂的代码数据集。(2)依赖研究人员的专家知识来提取特征,提取的特征数目有限且当前任务不一定适用当前特征。(3)花费大量时间与精力制定的规则通常只针对当前任务,可迁移性差。
第三种代码分析方法:为了减少对专家领域知识的依赖,近年来许多学者致力于将深度学习应用在代码分析研究上。这些模型多是借助代码的控制流图或抽象语法树(abstract syntax tree,AST)来表示代码,通过对这些中间表示进行分析来提取代码的信息。其中,Alon等人提出的一种名为code2vec的方法,该方法的分析过程为:首先将代码转为对应的AST,然后将AST表示为一个路径集合,路径集合中的每条路径都可以用一个三元组来表示,通过神经网络并利用一个注意力机制可生成对应代码的嵌入。该方法相比于其他算法(如CNN和LSTM等),具有结构简单,训练速度快的优点。但还是存在以下两方面问题:(1)针对中间的路径表示,算法仅根据组成路径的每一个字母进行一个哈希计算的叠加来作为当前路径的标识。这会导致两条基本相同的路径得到的标识完全不同,不但丢失了关键信息,也大大增加了训练模型的时间花销。(2)聚合路径时需要额外训练一个注意力参数,增加了模型复杂度。
发明内容
为了减少对专家领域知识的依赖,同时降低代码分类型的复杂度和训练时间,本发明提供一种基于神经网络的源码分类方法。
本发明提供的基于神经网络的源码分类方法,包括:
步骤1:将待分类源码转换为AST;
步骤3:从AST中随机抽取n条路径{p1,...,pn};针对抽取到的任一条路径pi,将其转换为二元组<xs,xe>;其中,xs为当前路径pi上起始节点对应的值,xe为当前路径pi上末端节点对应的值;
步骤4:从value_vocab中分别查询到当前路径pi上起始节点和末端节点的向量,进而得到当前路径pi的向量ci,记作: 其中,value_vocabs表示起始节点的向量,value_vocabe表示末端节点的向量;
步骤7:将代码嵌入v与tags_vocab中每一个训练函数标签的嵌入进行运算后得到代码嵌入v的预测分布。
进一步地,在训练所述全连接神经网络时,采用交叉熵损失函数作为损失函数。
本发明的有益效果:
本发明的构思是将代码片段表示为代码向量,然后根据代码函数体来预测代码函数的功能。整个过程不需要任何专家领域的知识来参与模型的训练,只需要将预处理好的代码数据作为模型输入进行训练即可。
并且,本发明提出了一种更为简单的二元组表示方法来表示路径,避免使用哈希算法来为AST路径生成标识符,减少了模型训练所需的参数。并且,提出的神经网络模型不需要再额外训练一个注意力机制,使得模型结构更加简单。
附图说明
图1为本发明实施例提供的基于神经网络的源码分类方法的流程示意图;
图2为本发明实施例提供的全连接神经网络模型的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本发明实施例提供一种基于神经网络的源码分类方法,包括以下步骤:
S101:将待分类源码转换为AST;
具体地,value_vocab的每一行元素代表一个终端节点对应的向量。||表示集合。训练时,可能有多个训练集,例如,有三个训练集时,若三个训练集的终端节点个数分别为x1,x2,x3,则|X|表示{x1,x2,x3}。终端节点是指没有孩子节点的节点,也称为叶子节点。在提取路径时,每个路径会有两个终端节点,起始点和结尾点,这两个点是没有孩子节点的。
S103:从AST中随机抽取n条路径{p1,…,pn};针对抽取到的任一条路径pi,将其转换为二元组<xs,xe>;其中,xs为当前路径pi上起始节点对应的值,xe为当前路径pi上末端节点对应的值;
S104:从value_vocab中分别查询到当前路径pi上起始节点和末端节点的向量,进而得到当前路径pi的向量ci,记作: 其中,value_vocabs表示起始节点的向量,value_vocabe表示末端节点的向量;
具体地,tags_vocab的每一行元素代表一个训练函数标签的嵌入。可以采用tagi表示tags_vocab中第i行的元素。
具体地,全连接神经网络模型的结构示意图如图2所示。在训练全连接神经网络模型时,采用交叉熵损失函数作为损失函数,形式如下:交叉熵损失函数的表达式如下:其中,q为样本的预测分布,p为样本的真实分布,ytrue表示样本的真实标签。也就是说,损失是q(ytrue)的负对数,q(ytrue)越倾向于1,损失越接近0。因此,最小化这种损失就相当于最x大化模型分配给真实标签ytrue的可能性。
本发明实施例中,提出了一种更为简单的二元组表示方法来表示路径,避免使用哈希算法来为AST路径生成标识符,减少了模型训练所需的参数。并且,提出的神经网络模型不需要再额外训练一个注意力机制,使得模型结构更加简单。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (4)
1.一种基于神经网络的源码分类方法,其特征在于,包括:
步骤1:将待分类源码转换为AST;
步骤3:从AST中随机抽取n条路径{p1,…,pn};针对抽取到的任一条路径pi,将其转换为二元组<xs,xe>;其中,xs为当前路径pi上起始节点对应的值,xe为当前路径pi上末端节点对应的值;
步骤4:从value_vocab中分别查询到当前路径pi上起始节点和末端节点的向量,进而得到当前路径pi的向量ci,记作: 其中,value_vocabs表示起始节点的向量,value_vocabe表示末端节点的向量;
步骤7:将代码嵌入v与tags_vocab中每一个训练函数标签的嵌入进行运算后得到代码嵌入v的预测分布。
4.根据权利要求1所述的一种基于神经网络的源码分类方法,其特征在于,在训练所述全连接神经网络时,采用交叉熵损失函数作为损失函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211302051.0A CN115587318A (zh) | 2022-10-24 | 2022-10-24 | 一种基于神经网络的源码分类方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211302051.0A CN115587318A (zh) | 2022-10-24 | 2022-10-24 | 一种基于神经网络的源码分类方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115587318A true CN115587318A (zh) | 2023-01-10 |
Family
ID=84781362
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211302051.0A Pending CN115587318A (zh) | 2022-10-24 | 2022-10-24 | 一种基于神经网络的源码分类方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115587318A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116432125A (zh) * | 2023-06-01 | 2023-07-14 | 中南大学 | 基于哈希算法的代码分类方法 |
-
2022
- 2022-10-24 CN CN202211302051.0A patent/CN115587318A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116432125A (zh) * | 2023-06-01 | 2023-07-14 | 中南大学 | 基于哈希算法的代码分类方法 |
CN116432125B (zh) * | 2023-06-01 | 2023-09-05 | 中南大学 | 基于哈希算法的代码分类方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Li et al. | Semi-supervised graph classification: A hierarchical graph perspective | |
CN112395466B (zh) | 一种基于图嵌入表示和循环神经网络的欺诈节点识别方法 | |
WO2018105656A1 (ja) | ルールセットを選択可能な推論エンジンを有するプログラム記録媒体、装置及び方法 | |
Alrawashdeh et al. | Fast activation function approach for deep learning based online anomaly intrusion detection | |
CN111078876A (zh) | 一种基于多模型集成的短文本分类方法和系统 | |
CN112131888A (zh) | 分析语义情感的方法、装置、设备及存储介质 | |
CN113010683B (zh) | 基于改进图注意力网络的实体关系识别方法及系统 | |
CN116402352A (zh) | 一种企业风险预测方法、装置、电子设备及介质 | |
CN115587318A (zh) | 一种基于神经网络的源码分类方法 | |
CN110245682B (zh) | 一种基于话题的网络表示学习方法 | |
CN113254649A (zh) | 敏感内容识别模型的训练方法、文本识别方法及相关装置 | |
CN113392868A (zh) | 一种模型训练的方法、相关装置、设备及存储介质 | |
CN116258504A (zh) | 银行客户关系管理系统及其方法 | |
CN115795035A (zh) | 基于进化神经网络的科技服务资源分类方法、系统及其计算机可读存储介质 | |
Vu et al. | HCt-SNE: Hierarchical constraints with t-SNE | |
CN112765989B (zh) | 基于表示分类网络的变长文本语义识别方法 | |
CN113326676A (zh) | 一种将金融文本结构化为表格的深度学习模型装置 | |
CN110825851A (zh) | 基于中值转化模型的句子对关系判别方法 | |
CN117520551B (zh) | 一种小样本文本自动分类方法及系统 | |
Asaduzzaman et al. | A Novel Salary Prediction System Using Machine Learning Techniques | |
CN111158640B (zh) | 一种基于深度学习的一对多需求分析识别方法 | |
Pinchaud | Information theoretic learning of robust deep representations | |
Quint et al. | Contrastive Attribution with Feature Visualization | |
Hong et al. | Handwritten formula data enhancement based on Edmonds' algorithm | |
Jaeckle et al. | Attention for Adversarial Attacks: Learning from your Mistakes |
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 |