CN109977205B - 一种计算机自主学习源代码的方法 - Google Patents

一种计算机自主学习源代码的方法 Download PDF

Info

Publication number
CN109977205B
CN109977205B CN201910178229.7A CN201910178229A CN109977205B CN 109977205 B CN109977205 B CN 109977205B CN 201910178229 A CN201910178229 A CN 201910178229A CN 109977205 B CN109977205 B CN 109977205B
Authority
CN
China
Prior art keywords
graph
fda
code
source code
data
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.)
Active
Application number
CN201910178229.7A
Other languages
English (en)
Other versions
CN109977205A (zh
Inventor
鲁鸣鸣
谭丁武
毕文杰
刘海英
郑一基
易驰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Central South University
Original Assignee
Central South University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Central South University filed Critical Central South University
Priority to CN201910178229.7A priority Critical patent/CN109977205B/zh
Publication of CN109977205A publication Critical patent/CN109977205A/zh
Application granted granted Critical
Publication of CN109977205B publication Critical patent/CN109977205B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Machine Translation (AREA)

Abstract

本发明公开了一种计算机自主学习源代码的方法,其特征在于,该方法包括以下步骤:S1、数据收集模块,通过在线判题系统得到符合要求c++程序代码,由问题题号P、问题c++源代码文件S两部分组成;S2、数据预处理模块,主要是将c++程序代码解析成能涵盖程序静态语法和动态语义的FDA图;S3、模型训练模块,利用带有注意力机制的门控图神经网络‑GGANN模型学习c++程序代码中间表示形式FDA图,以此训练好模型中的参数;S4、聚类与可视化分析模块,展开程序代码分类任务,评估模型分类精确度;可视化学习到的代码向量表征,分析模型性能;本发明提出的计算机自主学习源代码的方法能够改善现有的人工阅读代码方式,同时有助于计算机和人类更好的进行代码交互。

Description

一种计算机自主学习源代码的方法
技术领域
本发明涉及深度学习-图神经网络与源代码挖掘领域,特别涉及一种计算机自主学习源代码的方法。
背景技术
随着开源代码仓库的出现,源代码挖掘受到了越来越多的关注,尤其是基于源代码语义的代码分类任务在源代码挖掘领域充当着重要的作用。因为通过机器学习而获得的源代码嵌入表达不仅能够为机器理解源代码铺平道路,而且还能促进机器自动编码的进展。
受到自然语言处理(Natural Language Processing)的启发,早期的源代码挖掘领域,研究者们倾向于将源代码看做文本序列或者是API序列,从而使得源代码数据能够适应于基于时序关系的RNN模型及其变种模型。基于这一思路,大量序列预测任务被挖掘。例如,API序列预测,代码中的函数/变量命名预测,源代码和代码功能描述之间的互译等。但是,不像自然语言一样,源代码中的字符本身不存在天然的序列化关系。而且,自然语言存在相对固定的词汇,而源代码中的变量名,函数名以及类名都是不受限制的。这就导致了,如果仅仅把源代码看成是序列化的简单字符串,那么具有相同语义结构,代表相同算法实现,但是具有不同变量名的两份代码可能被认为是不相同的两份代码。而基于程序开发的角度而言,这两份代码几乎没有任何差别。
现有的方法主要存在两点亟待解决的问题:1.缺少一种更加合理的方式能够蕴含源代码程序完整语义,例如程序实现的功能,程序是否能够编译成功,正确运行,程序运行逻辑等,的中间表达形式。2.目前应用于源代码分析的深度学习模型还不够成熟,有改进的空间。
发明内容
针对现有研究方法的不足,本发明提供了一种计算机自主学习源代码的方法,解决了现有研究工作中对于根据程序实现的功能对程序源代码进行自动分类相关任务的空白,并且在该解决方案上展示了高分类精度和高健壮性。
本专利从以下几个方向对存在的问题进行改进。我们提出了一个蕴含程序运行时信息,程序中函数调用信息以及程序静态语法信息的程序图(FDA图),这种图从静态和动态两个方面刻画了源代码的代码语义。另外,此方法对于之前应用于源代码分析上的深度学习模型Gated Graph Neural Network(GGNN)进行了改进,从而使得改进后的模型GatedGraph Attention Neural Network(GGANN)在挖掘源代码的任务上具有更好的性能。
为实现上述目的,本发明提供了如下技术方案:一种计算机自主学习源代码的方法,该方法包括以下步骤:
S1、数据收集模块,通过在线判题系统得到符合要求c++程序代码,所述c++代码由问题题号P、问题c++源代码文件S两部分组成;
S2、数据预处理模块,主要是将c++程序代码解析成能涵盖程序静态语法和动态语义的FDA图;
S3、模型训练模块,利用带有注意力机制的门控图神经网络-GGANN模型学习c++程序代码中间表示形式FDA图,以此训练好模型中的参数;
S4、聚类与可视化分析模块,展开程序代码分类任务,评估模型分类精确度;可视化学习到的代码向量表征,分析模型性能。
优选的,所述步骤S1中在线判题系统的c++源代码数据收集指的是仅仅保留能编译成功且运行结果正确的c++代码。
优选的,所述步骤S2包括FDA图生成模块、数据清洗模块以及打标签模块,
其中所述FDA图生成模块指的是将所述c++程序代码转化成蕴含代码功能的FDA图。
所述数据清洗模块指的是,删除c++程序代码行数小于10行的文件和所述FDA生成模块中出现异常的FDA图;即通过一定的数据筛选规则从所有的所述FDA图中删选出只符合自定义数据要求的FDA图;
所述打标签模块指的是给每个程序代码的FDA图生成类别标签,所述生成类别标签指给每个FDA图分配一个问题题号P,该问题题号P为FDA图表示的源代码文件S的问题题号。所述打标签模块主要是建立代码FDA图和程序问题题号的映射关系,方便后续工作中模型的有监督训练。
优选的,所述FDA图生成模块主要包含以下步骤:
第一步、借助开源的clang依赖库将c++程序代码解析成包含程序静态语法信息的抽象语法树;
第二步、将表示程序运行时信息加入所述抽象语法树以此扩展成蕴含代码功能的FDA图。
优选的,所述第二步中扩展内容主要包括程序运行时数据逻辑关系、函数逻辑关系以及程序运行计算逻辑的信息;
扩展方式主要分为三个步骤:步骤一、生成c++源代码的数据流图;步骤二、生成c++源代码的函数调用图;步骤三、将数据流图和函数调用图融合进抽象语法树,得到FDA图。
优选的,所述步骤S3包括word2vec模块、向量融合模块以及图模型训练模块,
其中所述word2vec模块指的是利用自然语言模型word2vec对FDA图中的文本数据做向量化处理;所述word2vec模块主要是为了给图训练模块鉴定基础工作,主要的目的是为了通过word2vec的手段将FDA图中顶点名称,顶点类型,顶点结构名等信息使用向量化表示。
所述向量融合模块,主要借助于One-Hot Encoding、Word Embedding技术做预训练工作;所述向量融合模块,包括对所述向量化的顶点名称,顶点类型,顶点结构名信息做向量拼接处理、特征选择操作以及特征融合操作。
所述图模型训练模块指将经过所述向量融合模块后的FDA图作为带有注意力机制的门控神经网络模型的输入数据,通过FDA图数据训练注意力机制的门控神经网络模型,选择并且调整注意力机制的门控神经网络模型参数。所述图模型训练模块,指的是使用我们改进后的图模型Gated Graph Attention Neural Network(GGANN)学习所述代码的FDA图,同时在训练过程中根据实际情况对模型进行参数调优。
优选的,所述图模型训练模块采用门控神经网络模型来学习FDA图中的嵌入表达,并且结合实际情况,对模型的两方面进行改进:引入注意力机制和引入FDA图中的边的动态嵌入表达,所述注意力机制模仿人的行为,重点关注输入序列数据中和当前位置的输出相关的部分,所述边的动态嵌入表达指的是随着时间展开,学习到的边的嵌入表达会发生变化。
优选的,所述word2vec模块使用到Word Embedding技术、自然语言处理技术和数据建模技术;所述向量融合模块涉及特征工程技术、特征选择技术和特征融合技术;所述图模型训练模块主要包括tensorflow技术、数据结构技术、矩阵变换与运算技术。
优选的,所述步骤S4主要是代码机械自动判定模块,所述代码机械自动判定模块包括聚类模块、机器自主分析代码功能模块以及机器根据题目自动判定代码模块,
所述聚类模块指的是,利用t分布随机邻域嵌入方法对学习到的源代码嵌入表达进行降维处理,然后使用K-Means或相似性算法对多维空间的嵌入表达进行聚类;所述聚类模块用来分析源代码嵌入表达的语义有效性;
所述机器自主分析代码功能模块指的是,输入一段c++源代码数据,将其解析成FDA图作为深度学习模型的输入,通过深度学习模型的计算与处理,输出描述所述c++源代码功能的信息;所述机器自主分析代码功能模块用来判断模型是否“理解”源代码的功能含义;
所述机器根据题目自动判定代码模块指的是,给出一个问题题号P’,任意份问题源代码文件S’,这些问题源代码文件S’有些能够解决问题P’,有些不能解决问题P’,将P’和S’都输入注意力机制的门控神经网络模型,通过注意力机制的门控神经网络模型计算与预测,由注意力机制的门控神经网络模型输出S’中哪些代码文件S’能够解决问题P’。所述机器根据题目自动判定代码模块主要是从题目题号与源代码一一对应的映射关系的角度检查模型是否有效。
优选的,数据收集模块包括数据库技术,web技术和基础的C++编程技术。
优选的,FDA图生成模块包括利用开源代码库clang解析C++源代码技术,编译原理技术,networkx技术,python技术,以及程序数据流分析技术。
优选的,数据清洗模块主要是为了对得到的的数据做进一步的选择,对于不合适或者不那么合适的数据做删除操作。主要涉及特征工程技术。
优选的,打标签模块主要包括是为有监督有类别标签的训练做数据准备。
优选的,Word2vec模块使用到了Word Embedding技术,自然语言处理技术,数据建模技术。
优选的,向量融合模块主要涉及特征工程技术,特征选择技术和特征融合技术。
优选的,模型训练模块,主要包括tensorflow技术,数据结构技术,以及矩阵变换与运算技术。
优选的,聚类模块主要使用无监督的K-means算法进行聚类,并且使用可视化技术对聚类结果做可视化展示和分析。
优选的,机器自主分析代码功能模块和机器根据题目自动判定代码模块主要从两个任务:模型可解释性角度和代码功能分类任务,对模型的能力做效果和指标评估。
本发明的有益效果:本发明将源代码抽象语法树AST和源代码运行时的数据流和控制流以及函数调用关系进行融合,从而生成能够代表源代码静态语法结构和运行时信息的代码中间表示FDA图,然后使用词嵌入方法word2vec的方法得到FDA中每个顶点的名称,类型的嵌入表示,最后使用Gated Graph Attention Neural Network(GGANN)模型学习已经完成顶点嵌入表达初始化的FDA图。对于每一份源代码,通过该方法最后能够得到一个代表该代码的多维空间向量。之后,我们使用t-SNE方法对学习到的空间向量进行降维处理,并且利用可视化和聚类方法验证得到模型学习到的代码含义。最后,我们使用顶点类别分类任务和代码功能分类任务验证模型对于源代码嵌入表达的有效性。相对于传统方法有以下优点:
1.传统方法只考虑源代码的语法结构等静态信息,我们在静态信息的基础上融入数据流、控制流、函数调用关系等运行时动态信息。这对于表示以及学习源代码嵌入表达很有帮助的。
2.应用场景新颖,传统方法未曾有过相关应用场景的工作。传统方法基本使用序列化模型LSTM、树卷积模型TBCNN,我们的工作采用改进后的图模型GGANN,并且实验效果得到有效提升。
3.针对模型改进,我们加入注意力机制刻画数据之间的相似关系,从而使得模型迭代过程中信息传递更加高效和紧凑。
4.得到高维向量后,引入t-SNE降维技术对嵌入表达进行降维、聚类、可视化分析等操作,然后分析以及评估模型刻画源代码语义的能力。
5.本发明针对源代码嵌入表达进行了代码功能分类的任务,传统方法鲜有开展该任务的。
6.本发明将最新的数据挖掘技术、词向量技术、降维技术、图神经网络模型、深度学习特征预处理技术、可视化技术等运用到源代码嵌入学习中来。
附图说明
图1为本发明原理框图;
图2为本发明框图的结构示意图;
图3是本发明中所述的FDA示意图;
图4是本发明所述的AST图;
图5是本发明所述的数据流图;
图6是本发明所述的函数调用图;
图7是聚类可视化效果图;
图8是分类精确度指标图;
图9是模型交叉熵指标对比图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明主要基于在线判题(Online Judge)系统的C++程序代码-问题对数据和深度学习图模型提出来的,主要为了利用深度学习模型学习源代码在多维空间的向量表征。从而辅助日常开发工作以及在线编程教学考核任务的实施。
进一步,本发明公开了一种计算机自主学习源代码的方法,该方法包括以下步骤:S1.通过在线判题(OJ)系统得到符合要求的c++代码程序;所述c++代码由问题题号P、问题c++源代码文件S两部分组成;
S2.将c++程序代码解析成能涵盖程序静态语法和动态语义的图-FDA图。
S3.利用带有注意力机制的门控图神经网络学习FDA图,以此训练好模型中的参数。
S4.聚类与可视化分析模型,给出一个问题题号P’,任意份问题源代码文件S’,这些问题源代码文件S’有些能够解决问题P’,有些不能解决问题P’,将P’和S’都输入注意力机制的门控神经网络模型,通过注意力机制的门控神经网络模型计算与预测,由注意力机制的门控神经网络模型输出S’中哪些代码文件S’能够解决问题P’;可视化学习到的向量表征,分析模型性能。
步骤1,管理员通过在在线判题(OJ)系统发布编程题目,学生线上提交关于这些题目解决方案的c++代码。我们通过系统的后台数据库收集这些编译成功,运行结果正确的代码作为原始数据集。
步骤2:为了将代码解析成FDA图。我们首先使用开源依赖库clang将c++代码文件解析成文本解析树AST。AST中每个结点表示程序语法结构中的语法单元,蕴含着变量名,类型名以及方法名等信息。然后通过静态分析手段和代码动态逻辑分析技术扩充该AST树。扩充内容主要包括程序运行时数据逻辑关系,函数逻辑关系以及程序运行计算逻辑等信息。扩充方式主要分为三个子步骤:1.生成c++源代码的数据流图。如图4所示,表示生成的数据流图。图中不同颜色的边代表不同数据逻辑或者数据关系。2.生成c++源代码的函数调用图。如图5所示,表示生成的函数调用图。3.将数据流图和函数调用图融合进文本解析树AST,以此形成新的程序代码表示图FDA。如图3所示,表示融合而成的FDA图。
步骤3:为了使用深度学习方法学习到FDA图的向量表达,我们采用更适合当前FDA图数据的门控图神经网络用来学习其嵌入表达。同时,对于以后模型的一些不足,我们从模型本身进行改正,使得模型对于当前任务具有更好的性能。
步骤4:为了验证我们的深度学习是否学习到有意义,有价值的源代码嵌入表达,我们从两个大的任务验证模型有效性。一是顶点分类任务,二是FDA图分类任务,也就是c++源代码功能分类任务。为了验证模型的鲁棒性,我们特意挑选出容易混淆的代码作为模型的输入数据,以此考察模型是否足够健壮,容错率足够高。
如步骤2所述抽象语法树(AST),其实就是使用树状结构表示源代码的语法结构,树的每一个节点就代表源代码中的一个结构。当我们对源代码语法分析时,其实我们是在程序设计语言的语法规则指导下才能进行的。我们使用语法规则描述该语言的各种语法成分的是如何组成的,通常用上下文无关文法或与之等价的Backus-Naur范式(BNF)将相应程序设计语言的语法规则准确的描述出来。
定义1:上下文无关文法,若一个形式文法G=(N,Σ,P,S)的产生式规则都取如下的形式:V->w,其中V∈N,w∈(N∪Σ)*。而字符V总可以被字串w自由替换,而无需考虑字符V出现的上下文。这就叫做上下文无关文法。上下文无关文法拥有足够强的表达力来表示大多数程序设计语言的语法;实际上,几乎所有程序设计语言都是通过上下文无关文法来定义的。
定义2:Backus-Naur范式是由John Backus和Peter Naur引入的一种形式化符号来描述给定语言的语法,经常用来表达上下文无关文法。
如步骤2所述数据流图(Data Flow Graph),简称DFG,它从数据传递和加工角度,以图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具及用于表示程序逻辑的一种图示方法。
如步骤2所述函数调用图(Function Call Graph),简称FCG。函数调用图是一种广受欢迎的静态分析代码的方法,它能够从代码块的角度描述程序中的函数嵌套关系。
如步骤3所述,我们采用门控神经网络神经网络模型用来学习FDA图中的嵌入表达。并且结合实际情况,对模型进行了改进。我们主要从两方面进行改进:1.引入注意力机制2.引入FDA图中的边的动态嵌入表达。
定义3:门控神经网络(Gated Graph Neural Network),简称GGNN。这是由英国微软研究院提出的一种适用于图结构数据的新型深度学习模型。这个模型以图结构的数据为模型输入,旨在学习出图中顶点在多维空间的嵌入表达和图的拓扑结构,目前在很多领域都得到应用,例如知识图谱,人际关系,论文引用等等场景。
定义4:注意力机制。注意力机制模仿人的行为,重点关注输入序列数据中和当前位置的输出相关的部分,对于当前深度学习模型建模起到了重要的辅助作用。作为一种通用的思想,注意力机制在包括语音、图像、自然语言处理多种场景中都得到了应用。
如步骤4所述引入FDA图中的边的动态嵌入表达:本领域最新成果GGNN模型并没有考虑学习FDA图中的边的嵌入表达向量。在我们的模型中,我们考虑边的信息,因此引入边的动态嵌入表达。所述边的动态嵌入表达指的是随着时间展开,学习到的边的嵌入表达会发生变化。
如步骤4所述结点分类任务,我们使用t-SNE降维技术,聚类算法和可视化技术对学习到的图结点进行可视化分析。证明了我们的方法能够很好学习到代码中的语义以及模式,如图2。图2展示了聚类效果,经过分析和计算,图2中的可视化效果和我们的预期结果相符合,因此间接证实了我们方法的有效性。
如步骤4所述FDA图分类任务,我们使用模型学习到的FDA图的嵌入表达进行分类任务。如图7描述了我们的模型在FDA图分类任务上的分类精度,并且将我们的模型与之前该领域最新方法TBCNN模型和GGNN模型相比较,实验证明我们的模型在分类任务上,精度得到了提升。
如步骤4所述FDA图分类任务:给模型输入一段c++程序代码,由模型给出该c++程序代码能解决的题目的题号。
如步骤4所述容易混淆的代码:在线判题系统中,存在一些问题属于类似问题。类似问题指的是那些存在基础和进阶关系的问题集合,他们题目大体相似,只有细节上不同。因此,这些问题的解决方案的源代码很相近。如果我们的模型能够很好的区分这些问题,那么模型的健壮性和区分能力得到了有效的验证。
如步骤4所述验证模型的鲁棒性,我们使用交叉熵评价指标来评价我们的模型。如图8所示,是我们的模型与本领域最新成果的比较。
定义5:交叉熵评价指标。交叉熵可在神经网络(机器学习)中作为损失函数,p表示真实标记的分布,q则为训练后的模型的预测标记分布,交叉熵损失函数可以衡量p与q的相似性。差异越大则交叉熵越大,差异越小则交叉熵越小,特别地,若二者相同则熵为0。一个模型的交叉熵越趋近于0,表明这个模型的性能越好。
所述聚类算法:于分布式矢量之间的距离度量通常反映它们之间的语义相似性,因此,对于给定的嵌入表达向量,我们旨在揭示这些向量代表的元素之间的潜在语义相似性。本发明使用k-means聚类算法评估本文方法的有效性。
在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (4)

1.一种计算机自主学习源代码的方法,其特征在于,该方法包括以下步骤:
S1、数据收集,通过在线判题系统得到符合要求的c++程序代码,所述c++程序代码由问题题号P、问题c++源代码文件S两部分组成;
S2、数据预处理,将所述c++程序代码解析成能涵盖程序静态语法和动态语义的FDA图;所述数据预处理还包括FDA图生成、数据清洗以及打标签,
其中所述FDA图生成指的是将所述c++程序代码转化成蕴含代码功能的FDA图;所述数据清洗指的是,删除c++程序代码行数小于10行的文件和所述FDA生成中出现异常的FDA图;所述打标签指的是将经过所述数据清洗处理后的每个c++程序代码的FDA图生成类别标签,所述生成类别标签指给每个FDA图分配一个问题题号P,该问题题号P为FDA图表示的源代码文件S的问题题号;
所述FDA图生成包含以下步骤:
第一步、借助开源的clang依赖库将c++程序代码解析成包含程序静态语法信息的抽象语法树;
第二步、将表示程序运行时信息加入所述抽象语法树以此扩展成蕴含代码功能的FDA图;
所述第二步中扩展内容包括程序运行时数据逻辑关系、函数逻辑关系以及程序运行计算逻辑的信息;
扩展方式分为三个步骤:步骤一、生成c++源代码的数据流图;步骤二、生成c++源代码的函数调用图;步骤三、将数据流图和函数调用图融合进抽象语法树,得到FDA图;
S3、模型训练,利用带有注意力机制的门控图神经网络模型学习所述步骤S2中得到的FDA图,以此训练好注意力机制的门控图神经网络模型中的参数;
利用自然语言模型word2vec对FDA图中的文本数据做向量化处理;将FDA图中顶点名称、顶点类型、顶点结构名信息使用向量化表示;对所述向量化的顶点名称、顶点类型、顶点结构名做向量拼接处理、特征选择操作以及特征融合操作;将经过向量融合的FDA图作为带有注意力机制的门控神经网络模型的输入数据,通过FDA图数据训练注意力机制的门控神经网络模型,选择并且调整注意力机制的门控神经网络模型参数;
采用门控神经网络模型来学习FDA图中的嵌入表达,引入注意力机制和引入FDA图中的边的动态嵌入表达;
S4、聚类与可视化分析,展开程序代码分类任务;输入一段c++源代码数据,将其解析成FDA图作为注意力机制的门控神经网络模型的输入,通过注意力机制的门控神经网络模型的计算与处理,输出描述所述c++源代码功能的信息;
给出一个问题题号P’,任意份问题源代码文件S’,这些问题源代码文件S’有些能够解决问题P’,有些不能解决问题P’,将P’和S’都输入注意力机制的门控神经网络模型,通过注意力机制的门控神经网络模型计算与预测,由注意力机制的门控神经网络模型输出S’中哪些代码文件S’能够解决问题P’;
评估所述注意力机制的门控图神经网络模型分类精确度;可视化学习到的代码向量表征,分析所述注意力机制的门控图神经网络模型性能。
2.如权利要求1所述的一种计算机自主学习源代码的方法,其特征在于:所述步骤S1中在线判题系统的c++源代码数据收集指的是仅仅保留能编译成功且运行结果正确的c++代码。
3.根据权利要求1所述的一种计算机自主学习源代码的方法,其特征在于:所述word2vec使用到Word Embedding技术、自然语言处理技术和数据建模技术;向量融合涉及特征工程技术、特征选择技术和特征融合技术;图模型训练包括tensorflow技术、数据结构技术、矩阵变换与运算技术。
4.根据权利要求1所述的一种计算机自主学习源代码的方法,其特征在于:所述步骤S4还包括利用t分布随机邻域嵌入方法对所述步骤S3学习到的源代码嵌入表达进行降维处理,然后使用K-Means或相似性算法对所述步骤S3得到的多维空间的嵌入表达进行聚类。
CN201910178229.7A 2019-03-08 2019-03-08 一种计算机自主学习源代码的方法 Active CN109977205B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910178229.7A CN109977205B (zh) 2019-03-08 2019-03-08 一种计算机自主学习源代码的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910178229.7A CN109977205B (zh) 2019-03-08 2019-03-08 一种计算机自主学习源代码的方法

Publications (2)

Publication Number Publication Date
CN109977205A CN109977205A (zh) 2019-07-05
CN109977205B true CN109977205B (zh) 2021-06-22

Family

ID=67078292

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910178229.7A Active CN109977205B (zh) 2019-03-08 2019-03-08 一种计算机自主学习源代码的方法

Country Status (1)

Country Link
CN (1) CN109977205B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110781933B (zh) * 2019-10-14 2022-08-05 杭州电子科技大学 一种用于理解图卷积神经网络的可视分析方法
CN111274134B (zh) * 2020-01-17 2023-07-11 扬州大学 基于图神经网络的漏洞识别与预测方法、系统、计算机设备和存储介质
CN111651198B (zh) * 2020-04-20 2021-04-13 北京大学 代码摘要自动化生成方法及装置
CN112288079B (zh) * 2020-11-17 2024-05-14 北京轩宇信息技术有限公司 图神经网络模型训练方法、软件缺陷检测方法及系统
CN112329801B (zh) * 2020-12-03 2022-06-14 中国石油大学(华东) 一种卷积神经网络非局部信息构建方法
CN112306494A (zh) * 2020-12-03 2021-02-02 南京航空航天大学 一种基于卷积和循环神经网络的代码分类及聚类方法
CN113095074A (zh) * 2021-03-22 2021-07-09 北京工业大学 中文电子病历的分词方法及系统
CN115455438B (zh) * 2022-11-09 2023-02-07 南昌航空大学 一种程序切片漏洞检测方法、系统、计算机及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104850493A (zh) * 2015-04-24 2015-08-19 百度在线网络技术(北京)有限公司 一种检测源代码漏洞的方法和装置
CN106033516A (zh) * 2015-03-18 2016-10-19 中国移动通信集团陕西有限公司 一种检测终端源代码安全的方法、装置及系统
CN107729925A (zh) * 2017-09-26 2018-02-23 中国科学技术大学 对程序竞赛型源代码按照解题方法做自动分类与评分的方法
CN108664391A (zh) * 2018-03-13 2018-10-16 北京邮电大学 一种面向程序状态的故障分类方法、变异测试方法及设备
CN109101235A (zh) * 2018-06-05 2018-12-28 北京航空航天大学 一种软件程序的智能解析方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106033516A (zh) * 2015-03-18 2016-10-19 中国移动通信集团陕西有限公司 一种检测终端源代码安全的方法、装置及系统
CN104850493A (zh) * 2015-04-24 2015-08-19 百度在线网络技术(北京)有限公司 一种检测源代码漏洞的方法和装置
CN107729925A (zh) * 2017-09-26 2018-02-23 中国科学技术大学 对程序竞赛型源代码按照解题方法做自动分类与评分的方法
CN108664391A (zh) * 2018-03-13 2018-10-16 北京邮电大学 一种面向程序状态的故障分类方法、变异测试方法及设备
CN109101235A (zh) * 2018-06-05 2018-12-28 北京航空航天大学 一种软件程序的智能解析方法

Also Published As

Publication number Publication date
CN109977205A (zh) 2019-07-05

Similar Documents

Publication Publication Date Title
CN109977205B (zh) 一种计算机自主学习源代码的方法
CN110245496B (zh) 一种源代码漏洞检测方法及检测器和其训练方法及系统
Allamanis et al. A convolutional attention network for extreme summarization of source code
CN112541180B (zh) 一种基于语法特征和语义特征的软件安全漏洞检测方法
CN111931506B (zh) 一种基于图信息增强的实体关系抽取方法
CN112215013B (zh) 一种基于深度学习的克隆代码语义检测方法
CN111651974B (zh) 一种隐式篇章关系分析方法和系统
US20180053107A1 (en) Aspect-based sentiment analysis
CN110765014B (zh) 一种Python绘图程序题自动评测方法
Konstas et al. Inducing document plans for concept-to-text generation
CN113191148B (zh) 一种基于半监督学习和聚类的轨道交通实体识别方法
CN110245238B (zh) 基于规则推理和句法模式的图嵌入方法及系统
CN112100322B (zh) 一种基于知识图谱的api元素比较结果自动生成方法
CN113901229B (zh) 基于句法图卷积的汉越双语新闻事件因果关系抽取方法
KR20210023452A (ko) 속성 단위 리뷰 분석 장치 및 방법
CN113139054B (zh) 一种基于Transformer的代码编程语言分类方法
CN115357719B (zh) 基于改进bert模型的电力审计文本分类方法及装置
CN113138920B (zh) 基于知识图谱与语义角色标注的软件缺陷报告分派方法及装置
WO2018174816A1 (en) Method and apparatus for semantic coherence analysis of texts
US20220012021A1 (en) Artificial intelligence-based intelligent programming assistance
CN116661805B (zh) 代码表示的生成方法和装置、存储介质及电子设备
CN116484024A (zh) 一种基于知识图谱的多层次知识库构建方法
Paassen et al. Mapping python programs to vectors using recursive neural encodings
Wang et al. Aspect-based sentiment analysis with graph convolutional networks over dependency awareness
Mukherjee et al. From informal process diagrams to formal process models

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