CN108053033A - 一种函数调用序列生成方法和系统 - Google Patents
一种函数调用序列生成方法和系统 Download PDFInfo
- Publication number
- CN108053033A CN108053033A CN201711444796.XA CN201711444796A CN108053033A CN 108053033 A CN108053033 A CN 108053033A CN 201711444796 A CN201711444796 A CN 201711444796A CN 108053033 A CN108053033 A CN 108053033A
- Authority
- CN
- China
- Prior art keywords
- function
- sequence
- calling sequence
- trained
- model
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
Abstract
本发明提供一种函数调用序列生成方法和系统,生成方法包括:将入口函数输入训练好的序列生成模型中,获取入口函数的函数调用序列;其中,训练好的序列生成模型通过下述步骤获取:获取函数表和函数调用关系图;构建函数表中每一入口函数的对比函数调用序列;将任一入口函数输入待训练的序列生成模型获取训练函数调用序列;获取任一入口函数的训练函数调用序列与对比函数调用序列之间的差距,基于差距对模型的输入量进行更新,循环执行上一步骤,直至差距低于预设差距阈值,获取训练好的序列生成模型。本发明使得生成方法更具有实用性。本发明能够使得训练好的序列生成模型生成的函数调用序列反映函数间的调用关系。
Description
技术领域
本发明涉及机器学习领域,更具体地,涉及一种函数调用序列生成方法和系统。
背景技术
随着人工智能的快速发展,机器学习与深度学习研究的持续火热,越来越多的工作集中在机器代码生成领域。机器代码的自动生成,一直是计算机科学和人工智能研究者们追求的目标。虽然目前的很多研究,取得了一定成果,但是还是面临着一些局限,这些局限具体体现在:
生成的代码只能解决简单的问题(比如:冒泡排序,加减法等),还难以应对真实的应用需求。大部分的研究集中于领域特定语言的研究中,即大部分的研究者都采用自定义的简单编程语言,让机器学习这些简单单元的统计组合规则,从而实现代码的自动生成。这样带来的局限在于:多样的源代码库没有得到有效利用,然而实际生活中人们开发的程序又是最与实际应用需求相关的。
发明内容
本发明提供一种克服上述问题的一种函数调用序列生成方法和系统。
根据本发明的一个方面,提供一种函数调用序列生成方法,包括:将入口函数输入训练好的序列生成模型中,获取所述入口函数的函数调用序列;其中,所述训练好的序列生成模型通过下述步骤获取:从开源代码库中获取函数表和所述函数表中多个函数的函数调用关系图;根据所述函数调用关系图构建所述函数表中每一入口函数的对比函数调用序列;将所述函数表中的任一入口函数输入待训练的序列生成模型,获取所述任一入口函数的训练函数调用序列;获取所述任一入口函数的训练函数调用序列与所述任一入口函数的对比函数调用序列之间的差距,并基于所述差距对所述序列生成模型的输入量进行更新,循环执行上一步骤,直至所述差距低于预设差距阈值,获取所述训练好的序列生成模型。
优选地,所述序列生成模型由多个长短时间记忆网络构成,是以时刻和层为维度的二维模型;所述序列生成模型每层的长度相等,每一时刻的长度相等;所述序列生成模型在任一时刻任一层上设有一个长短时间记忆网络。
优选地,所述将所述函数表中的任一入口函数输入待训练的序列生成模型,获取所述任一入口函数的训练函数调用序列进一步包括:将所述函数表中的任一入口函数输入待训练的序列生成模型,获取一个或多个所述任一入口函数的第一函数调用序列;通过下式获取每一所述一个或多个所述任一入口函数的第一函数调用序列的生成概率:P(S)=P(w1,w2,…wk)=P(w1)P(w2|w1)P(w3|w1,w2)…P(wk|w1,w2,…wk-1)
其中,P(S)为生成函数序列S的概率,P(w1,w2,…wk)表示为一个由w1,w2...wk构成的序列的概率,w1,w2,…wk为第K个函数,P(wi|wi-1)为在函数wi-1生成的情况下生成函数wi的概率;将生成概率最大的第一函数调用序列作为所述任一入口函数的训练函数调用序列。
优选地,所述从开源代码库中获取函数表和所述函数表中多个函数的函数调用关系图进一步包括:根据文档生成工具获取所述开源代码库的帮助文档;提取所述帮助文档中的函数表和所述函数表中多个函数的函数调用关系图;其中,所述函数表中包括多个函数和所述多个函数对应的多个函数信息,所述函数调用关系图用于描述所述多个函数之间的调用关系。
优选地,所述函数调用关系图为有向图,所述函数调用关系图中任一节点为所述函数表中的任一函数。
优选地,所述文档生成工具为Doxygen。
优选地,所述入口函数的函数调用序列长度为预设值。
根据本发明的另一个方面,提供一种函数调用序列生成系统,包括:获取序列模块,用于将入口函数输入训练好的序列生成模型中,获取所述入口函数的函数调用序列;其中,所述训练好的序列生成模型通过下述子模块获取:代码库获取子模块,用于从开源代码库中获取函数表和所述函数表中多个函数的函数调用关系图;对比序列获取子模块,用于基于深度优先搜索的方法,根据所述函数调用关系图构建所述函数表中每一入口函数的对比函数调用序列;训练序列获取子模块,用于将所述函数表中的任一入口函数输入待训练的序列生成模型,获取所述任一入口函数的训练函数调用序列;获取训练好模型子模块,用于获取所述任一入口函数的训练函数调用序列与所述任一入口函数的对比函数调用序列之间的差距,并基于所述差距对所述序列生成模型的输入量进行更新,循环执行上一步骤,直至所述差距低于预设差距阈值,获取所述训练好的序列生成模型。
根据本发明的再一个方面,提供一种用于函数调用序列生成的电子设备,包括存储器和处理器,所述处理器和所述存储器通过总线完成相互间的通信;所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如上述任一项所述的生成方法。
根据本发明的还一个方面,提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,使所述计算机执行如上述任一项所述的生成方法。
本发明提供的一种函数调用序列生成方法和系统,通过设置从开源代码库中获取函数表和函数调用关系图,能够利用多样的代码库提供的数据,使得本发明提供的函数调用序列生成方法更具有实用性。通过深度优先搜索的方法获取对比函数调用序列,能够使得训练好的序列生成模型生成的函数调用序列反映函数间的调用关系。
附图说明
图1为本发明实施例中的训练好的序列生成模型获取流程图;
图2为本发明实施例中的一种函数调用关系图的结构示意图;
图3为本发明实施例中的一种通过深度优先搜索构建对比函数调用序列的示意图;
图4为本发明实施例中的一种序列生成模型的结构示意图;
图5为本发明实施例中的一种从开源代码库中获取相关信息的示意图;
图6是示出本发明实施例中的一种用于函数调用序列生成的电子设备的结构框图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
本发明实施例基于上述现有技术的问题,提出了一种函数调用序列生成方法。直接从现有的开源代码库出发构建训练集,探索直接基于源代码的机器代码生成任务。同时,考虑到函数作为日常编程中最频繁使用的基本单元,本发明实施例首先从源代码里面的函数入手,通过源代码里面函数间的自动调用组合来实现机器代码生成的任务。
本发明实施例提供一种函数调用序列生成方法,包括:将入口函数输入训练好的序列生成模型中,获取所述入口函数的函数调用序列。图1为本发明实施例中的训练好的序列生成模型获取流程图,如图1所示,其中,所述训练好的序列生成模型通过下述步骤获取:从开源代码库中获取函数表和所述函数表中多个函数的函数调用关系图;根据所述函数调用关系图构建所述函数表中每一入口函数的对比函数调用序列;将所述函数表中的任一入口函数输入待训练的序列生成模型,获取所述任一入口函数的训练函数调用序列;获取所述任一入口函数的训练函数调用序列与所述任一入口函数的对比函数调用序列之间的差距,并基于所述差距对所述序列生成模型的输入量进行更新,循环执行上一步骤,直至所述差距低于预设差距阈值,获取所述训练好的序列生成模型。
具体地,开源代码库优选为Github平台。需要说明的是,用于实施本发明实施例中的数据是具有完整性的,完整性指的是整个选定的Github平台中的开源项目的代码都用于产生序列生成模型的训练集。利用广域的互联网开源代码资源,可以任意丰富训练集。
进一步地,开源代码库里面的函数考虑了各个函数间的功能结构,而这些功能结构能够体现各个函数之间的相互调用关系。可以说,函数直接的内在功能结构决定了函数之间的相互调用关系,而函数间的相互调用关系又能够很好的反映出函数之间的功能结构。
具体来说为了学习函数间的内在功能结构,应从开源代码库出发,将这些代码库里面的函数作为基本处理单元,开源代码库是由里面包含的函数通过相互调用组合而成的,那么学习开源代码库里面函数的内在结构,其实就是学习函数间的相互调用关系。函数间的调用关系,可以用有向的函数调用图来简化表示,虽然这种表示省略了一些分支判断和循环信息,但是函数调用图还是能直观的反映出函数间的纯粹调用关系,我们可以通过开源代码库里面函数的函数调用图来学习开源代码里面函数的内在结构。图2为本发明实施例中的一种函数调用关系图的结构示意图,如图2所示,函数调用关系图反应的函数的调用关系是较为复杂的。
具体地,开源代码库里面的函数调用关系,虽然可以用函数调用关系图来简化表示,但计算机直接处理这种图结构也还是比较困难的。因此,为了简化计算机处理的难度,本发明实施例首先从函数调用关系图出发,构建函数的调用序列,让计算机通过处理这种函数调用序列来学习函数调用图结构。本发明的实施例中,采用不同的搜索方法,根据所述函数调用关系图构建所述函数表中每一入口函数的对比函数调用序列。通过图学习序列,不同的搜索方法包括深度优先,广度优先以及随机游走的方式,不同的方式能够反映函数间的不同调用关系。在本实施例中采用的方式是深度优先搜索的方法,但是理论上本实列支持可使用任意的搜索方式构建。对于深度优先搜索的方法,是从一个函数出发,反应该函数与其他函数的调用关系,可以理解为调用的深度。图3为本发明实施例中的一种通过深度优先搜索构建对比函数调用序列的示意图,本实施例也请参考图3。
进一步地,在本实施例提供的函数调用序列生成方法中,所述获取所述任一入口函数的训练函数调用序列与所述任一入口函数的对比函数调用序列之间的差距,并基于所述差距对所述序列生成模型的输入量进行更新,循环执行上一步骤,直至所述差距低于预设差距阈值,获取所述训练好的序列生成模型。这一步骤是序列生成模型不断训练的过程,直至对比函数调用序列和训练函数调用序列之间的差距达到预设差距阈值。具体的实施方式是通过损失函数获取所述任一入口函数的训练函数调用序列与所述任一入口函数的对比函数调用序列之间的差距,并基于所述差距,利用反向传播算法对所述序列生成模型的输入量进行更新,循环执行上一步骤,直至所述差距低于预设差距阈值,获取所述训练好的序列生成模型。本步骤是在机器学习领域进行模型不断训练的常规方式。
本发明提供的一种函数调用序列生成方法,通过设置从开源代码库中获取函数表和函数调用关系图,能够利用多样的代码库提供的数据,使得本发明提供的函数调用序列生成方法更具有实用性。通过深度优先搜索的方法获取对比函数调用序列,能够使得训练好的序列生成模型生成的函数调用序列反映函数间的调用关系。
作为一个优选实施例,本发明还可采用广度优先搜索的方法或综合深度广度的随机游走的方法构建对比函数调用序列。对于广度优先搜索,该种搜索方式表现的是从一个函数出发,该函数调用了哪些函数,可以理解为调用的广度。深度上出发,遍历所有的路径,那么所有路径的集合从某种程度上来说也包含了广度上的信息。
上述实施例中提出了序列生成模型,本实施例对于序列生成模型做出进一步地解释说明。图4为本发明实施例中的一种序列生成模型的结构示意图,本实施例请参见图4。
所述序列生成模型由多个长短时间记忆网络构成,是以时刻和层为维度的二维模型;所述序列生成模型每层的长度相等,每一时刻的长度相等;所述序列生成模型在任一时刻任一层上设有一个长短时间记忆网络。
为解决序列问题的数据中序列长度有差距的问题,本领域的技术人员设计了循环神经网络(recurrent neural network,RNN)来处理序列问题。但是普通的RNN存在两个问题。一是长距离依赖,二是梯度消失和梯度爆炸,这种问题在处理长序列的时候尤为明显。
为了解决以上问题,本领域的技术人员提出了长短时间记忆网络(Long Short-Term Memory,LSTM)。这种RNN架构专门用于解决RNN模型的梯度消失和梯度爆炸问题。由三个乘法门控制记忆块的激活状态:输入门(input gate)、输出门(output gate)、忘记门又称遗忘门(forget gate)。这种结构可以使之前输入的信息保存在网络中,并一直向前传递,输入门打开时新的输入才会改变网络中保存的历史状态,输出门打开时保存的历史状态会被访问到,并影响之后的输出,忘记们用于清空之前保存的历史信息。
具体地,图4中每一小矩形为一个长短时间记忆网络,本实施例中的序列生成模型优选为两层。序列生成模型的输入量是入口函数。
基于上述实施例,所述将所述函数表中的任一入口函数输入待训练的序列生成模型,获取所述任一入口函数的训练函数调用序列进一步包括:将所述函数表中的任一入口函数输入待训练的序列生成模型,获取一个或多个所述任一入口函数的第一函数调用序列。通过下式获取每一所述一个或多个所述任一入口函数的第一函数调用序列的生成概率:
P(S)=P(w1,w2,…wk)=P(w1)P(w2|w1)P(w3|w1,w2)…P(wk|w1,w2,…wk-1)
其中,P(S)为生成函数序列S的概率,P(w1,w2,…wk)表示一个由w1,w2...wk构成的序列的概率,w1,w2,…wk为第K个函数,P(wi|wi-1)为在函数wi-1生成的情况下生成函数wi的概率;将生成概率最大的第一函数调用序列作为所述任一入口函数的训练函数调用序列。
基于上述实施例,所述从开源代码库中获取函数表和所述函数表中多个函数的函数调用关系图进一步包括:根据文档生成工具获取所述开源代码库的帮助文档;提取所述帮助文档中的函数表和所述函数表中多个函数的函数调用关系图;其中,所述函数表中包括多个函数和所述多个函数对应的多个函数信息,所述函数调用关系图用于描述所述多个函数之间的调用关系。
进一步地,所述文档生成工具为Doxygen。
具体地,Doxygen是一种开源跨平台的,以类似JavaDoc风格描述的文档系统,完全支持C、C++、Java、Objective-C和IDL语言,部分支持PHP、C#。注释的语法与Qt-Doc、KDoc和JavaDoc兼容。Doxygen可以从一套归档源文件开始,生成HTML格式的在线类浏览器,或离线的LATEX、RTF参考手册。
图5为本发明实施例中的一种从开源代码库中获取相关信息的示意图,本实施例请参考图5。
图5中表示获取的信息见下表1。
表1获取的信息表
数据集 | 函数库数目 | 序列数目 |
OTB | 4641 | 96286 |
QGIS | 21324 | 256871 |
基于上述实施例,所述函数调用关系图为有向图,所述函数调用关系图中任一节点为所述函数表中的任一函数。
举例来说,如果存在节点1指向节点2的边,那么则说明在函数1里面调用了函数2。
基于上述实施例,所述入口函数的函数调用序列长度为预设值。
下面以一个具体的例子来进一步说明本发明提供的一种函数调用序列生成方法。
首先进行数据准备,利用OTB的深度优先序列,以及随机游走序列。分别将这两种基础序列数据分为20%的验证数据,20%的测试数据,60%的训练数据,进行本发明实施例提供的函数调用序列生成方法。
下面提出两个概念,一是模型生成的平均精度,二是困惑度。
其中,模型生成的平均精度的计算公式如下:
其中,p表示生成准确的个数,即目标值(targets)与预测值(predictions)对应位置处相同的个数,sum表示总个数,accuracy_mean为模型生成的平均精度。
困惑度可以用来衡量序列生成模型的好坏,一般来说,困惑度越小,就表示训练出的模型越好。在我们的实验中,困惑度由下式给出:
其中,perplexity为困惑度衡量的模型生成的序列与训练集原有序列的相似程度,N为序列长度,为第i个目标函数出现的概率。
获得的本发明实施例中的序列生成模型的模型生成的平均精度和困惑度见下表2:
表2模型生成的平均精度和困惑度表
数据集合 | 模型生成的平均精度 | 困惑度 |
QGIS | 48.25% | 85.18 |
OTB | 65.78% | 14.51 |
序列生成模型训练完成后,生成了三个文本文件:输入值(inputs)、目标标签值(targets)和预测值(predicctions)。部分结果见下表:
表3输入值表、目标标签值表和生成值表
输入值表
22 | 17 | 25 | 3 | 19 | 1 | 5 | 26 | 15 | 13 | 2 | 24 | 2 | 0 | 23 | 14 | 9 | 4 | 3 | 6 |
11 | 0 | 4 | 23 | 14 | 9 | 1 | 35 | 34 | 26 | 15 | 13 | 2 | 0 | 9 | 4 | 3 | 6 | 7 | 8 |
11 | 0 | 9 | 4 | 3 | 6 | 7 | 8 | 42 | 48 | 41 | 1 | 5 | 26 | 15 | 13 | 2 | 24 | 2 | 0 |
15 | 13 | 2 | 24 | 2 | 0 | 12 | 11 | 0 | 4 | 3 | 6 | 7 | 8 | 10 | 31 | 17 | 16 | 20 | 18 |
3 | 6 | 7 | 8 | 10 | 22 | 17 | 25 | 16 | 20 | 18 | 19 | 1 | 5 | 26 | 15 | 13 | 2 | 24 | 2 |
目标标签值表
17 | 25 | 3 | 19 | 1 | 5 | 26 | 15 | 13 | 2 | 24 | 2 | 0 | 23 | 14 | 9 | 4 | 3 | 6 | 7 |
0 | 4 | 23 | 14 | 9 | 1 | 35 | 34 | 26 | 15 | 13 | 2 | 0 | 9 | 4 | 3 | 6 | 7 | 8 | 10 |
0 | 9 | 4 | 3 | 6 | 7 | 8 | 42 | 48 | 41 | 1 | 5 | 26 | 15 | 13 | 2 | 24 | 2 | 0 | 12 |
13 | 2 | 24 | 2 | 0 | 12 | 11 | 0 | 4 | 3 | 6 | 7 | 8 | 10 | 31 | 17 | 16 | 20 | 18 | 22 |
6 | 7 | 8 | 10 | 22 | 17 | 25 | 16 | 20 | 18 | 19 | 1 | 5 | 26 | 15 | 13 | 2 | 24 | 2 | 0 |
生成值表
17 | 25 | 16 | 19 | 1 | 21 | 29 | 15 | 13 | 2 | 24 | 2 | 0 | 11 | 28 | 9 | 4 | 3 | 6 | 7 |
0 | 23 | 3 | 28 | 9 | 1 | 21 | 34 | 26 | 15 | 13 | 2 | 24 | 11 | 4 | 3 | 6 | 7 | 8 | 10 |
0 | 23 | 4 | 3 | 6 | 7 | 8 | 10 | 41 | 41 | 1 | 21 | 29 | 15 | 13 | 2 | 24 | 2 | 0 | 11 |
13 | 2 | 0 | 2 | 0 | 11 | 11 | 0 | 9 | 3 | 6 | 7 | 8 | 10 | 31 | 17 | 25 | 20 | 18 | 22 |
6 | 7 | 8 | 10 | 31 | 17 | 25 | 16 | 20 | 18 | 36 | 1 | 21 | 29 | 15 | 13 | 2 | 24 | 2 | 0 |
对应于上述三个表中的数据,对三个表中的值进行还原,得到入口函数的函数调用序列。
输入值:
wrt_IM wrt_AP wrt_H wrt_L ossimplugins::details::len<unk>x_rsnegetdimen print_ne s_wsne x_wsne nl_donewrec x_wsne l_write lwrt_A donewreclwrt_I lwrt_L wrt_L wrt_A
lwrt_C l_write lwrt_L lwrt_A donewrec lwrt_I<unk>getname getnumgetdimen print_ne s_wsne x_wsne l_write lwrt_I lwrt_L wrt_L wrt_A wrt_AW wrt_G
lwrt_C l_write lwrt_I lwrt_L wrt_L wrt_A wrt_AW wrt_G wrt_E wrt_Fsignbit_f2c<unk>x_rsne getdimen print_ne s_wsne x_wsne nl_donewrec x_wsne l_write
print_ne s_wsne x_wsne nl_donewrec x_wsne l_write lwrt_F lwrt_C l_write lwrt_L wrt_L wrt_A wrt_AW wrt_G w_ed w_ned wrt_AP mv_cur wrt_Z wrt_I
wrt_L wrt_A wrt_AW wrt_G w_ed wrt_IM wrt_AP wrt_H mv_cur wrt_Z wrt_Iossimplugins::details::len<unk>x_rsne getdimen print_ne s_wsne x_wsne nl_donewrec x_wsne
目标标签值:
wrt_AP wrt_H wrt_L ossimplugins::details::len<unk>x_rsne getdimenprint_ne s_wsne x_wsne nl_donewrec x_wsne l_write lwrt_A donewrec lwrt_Ilwrt_L wrt_L wrt_A wrt_AW
l_write lwrt_L lwrt_A donewrec lwrt_I<unk>getname getnum getdimenprint_ne s_wsne x_wsne l_write lwrt_I lwrt_L wrt_L wrt_A wrt_AW wrt_G w_ed
l_write lwrt_I lwrt_L wrt_L wrt_A wrt_AW wrt_G wrt_E wrt_F signbit_f2c<unk>x_rsne getdimen print_ne s_wsne x_wsne nl_donewrec x_wsne l_writelwrt_F
s_wsne x_wsne nl_donewrec x_wsne l_write lwrt_F lwrt_C l_write lwrt_Lwrt_L wrt_A wrt_AW wrt_G w_ed w_ned wrt_AP mv_cur wrt_Z wrt_I wrt_IM
wrt_A wrt_AW wrt_G w_ed wrt_IM wrt_AP wrt_H mv_cur wrt_Z wrt_Iossimplugins::details::len<unk>x_rsne getdimen print_ne s_wsne x_wsne nl_donewrec x_wsne l_write
生成值:
wrt_AP wrt_H mv_cur ossimplugins::details::len<unk>e_rsli s_rsneprint_ne s_wsne x_wsne nl_donewrec x_wsne l_write lwrt_C l_g lwrt_I lwrt_Lwrt_L wrt_A wrt_AW
l_write lwrt_A wrt_L l_g lwrt_I<unk>e_rsli getnum getdimen print_nes_wsne x_wsne nl_donewrec lwrt_C lwrt_L wrt_L wrt_A wrt_AW wrt_G w_ed
l_write lwrt_A lwrt_L wrt_L wrt_A wrt_AW wrt_G w_ed signbit_f2csignbit_f2c<unk>e_rsli s_rsne print_ne s_wsne x_wsne nl_donewrec x_wsne l_write lwrt_C
s_wsne x_wsne l_write x_wsne l_write lwrt_C lwrt_C l_write lwrt_Iwrt_L wrt_A wrt_AW wrt_G w_ed w_ned wrt_AP wrt_H wrt_Z wrt_I wrt_IM
wrt_A wrt_AW wrt_G w_ed w_ned wrt_AP wrt_H mv_cur wrt_Z wrt_I f__icvt<unk>e_rsli s_rsne print_ne s_wsne x_wsne nl_donewrec x_wsne l_write
基于上述实施例,本实施例提供一种函数调用序列生成系统,包括:获取序列模块,用于将入口函数输入训练好的序列生成模型中,获取所述入口函数的函数调用序列;其中,所述训练好的序列生成模型通过下述子模块获取:代码库获取子模块,用于从开源代码库中获取函数表和所述函数表中多个函数的函数调用关系图;对比序列获取子模块,用于基于深度优先搜索的方法,根据所述函数调用关系图构建所述函数表中每一入口函数的对比函数调用序列;训练序列获取子模块,用于将所述函数表中的任一入口函数输入待训练的序列生成模型,获取所述任一入口函数的训练函数调用序列;获取训练好模型子模块,用于获取所述任一入口函数的训练函数调用序列与所述任一入口函数的对比函数调用序列之间的差距,并基于所述差距对所述序列生成模型的输入量进行更新,循环执行上一步骤,直至所述差距低于预设差距阈值,获取所述训练好的序列生成模型。
基于上述实施例,图6是示出本发明实施例中的一种用于函数调用序列生成的电子设备的结构框图。参照图6,所述电子设备包括:处理器(processor)601、存储器(memory)602和总线604;其中,所述处理器601和所述存储器602通过所述总线604完成相互间的通信;所述处理器601用于调用所述存储器602中的程序指令,以执行上述各生成方法实施例所提供的方法,例如包括:将入口函数输入训练好的序列生成模型中,获取所述入口函数的函数调用序列;其中,所述训练好的序列生成模型通过下述步骤获取:从开源代码库中获取函数表和所述函数表中多个函数的函数调用关系图;基于深度优先搜索的方法,根据所述函数调用关系图构建所述函数表中每一入口函数的对比函数调用序列;将所述函数表中的任一入口函数输入待训练的序列生成模型,获取所述任一入口函数的训练函数调用序列;获取所述任一入口函数的训练函数调用序列与所述任一入口函数的对比函数调用序列之间的差距,并基于所述差距对所述序列生成模型的输入量进行更新,循环执行上一步骤,直至所述差距低于预设差距阈值,获取所述训练好的序列生成模型。
基于上述实施例,本实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:将入口函数输入训练好的序列生成模型中,获取所述入口函数的函数调用序列;其中,所述训练好的序列生成模型通过下述步骤获取:从开源代码库中获取函数表和所述函数表中多个函数的函数调用关系图;基于深度优先搜索的方法,根据所述函数调用关系图构建所述函数表中每一入口函数的对比函数调用序列;将所述函数表中的任一入口函数输入待训练的序列生成模型,获取所述任一入口函数的训练函数调用序列;获取所述任一入口函数的训练函数调用序列与所述任一入口函数的对比函数调用序列之间的差距,并基于所述差距对所述序列生成模型的输入量进行更新,循环执行上一步骤,直至所述差距低于预设差距阈值,获取所述训练好的序列生成模型。
基于上述实施例,本实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法,例如包括:将入口函数输入训练好的序列生成模型中,获取所述入口函数的函数调用序列;其中,所述训练好的序列生成模型通过下述步骤获取:从开源代码库中获取函数表和所述函数表中多个函数的函数调用关系图;基于深度优先搜索的方法,根据所述函数调用关系图构建所述函数表中每一入口函数的对比函数调用序列;将所述函数表中的任一入口函数输入待训练的序列生成模型,获取所述任一入口函数的训练函数调用序列;获取所述任一入口函数的训练函数调用序列与所述任一入口函数的对比函数调用序列之间的差距,并基于所述差距对所述序列生成模型的输入量进行更新,循环执行上一步骤,直至所述差距低于预设差距阈值,获取所述训练好的序列生成模型。
本发明提供的一种函数调用序列生成方法和系统,通过设置从开源代码库中获取函数表和函数调用关系图,能够利用多样的代码库提供的数据,使得本发明提供的函数调用序列生成方法更具有实用性。通过深度优先搜索的方法获取对比函数调用序列,能够使得训练好的序列生成模型生成的函数调用序列反映函数间的调用关系。
最后,本发明的方法仅为较佳的实施方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种函数调用序列生成方法,其特征在于,包括:
将入口函数输入训练好的序列生成模型中,获取所述入口函数的函数调用序列;
其中,所述训练好的序列生成模型通过下述步骤获取:
从开源代码库中获取函数表和所述函数表中多个函数的函数调用关系图;
根据所述函数调用关系图构建所述函数表中每一入口函数的对比函数调用序列;
将所述函数表中的任一入口函数输入待训练的序列生成模型,获取所述任一入口函数的训练函数调用序列;
获取所述任一入口函数的训练函数调用序列与所述任一入口函数的对比函数调用序列之间的差距,并基于所述差距对所述序列生成模型的输入量进行更新,循环执行上一步骤,直至所述差距低于预设差距阈值,获取所述训练好的序列生成模型。
2.根据权利要求1所述的生成方法,其特征在于,所述序列生成模型由多个长短时间记忆网络构成,是以时刻和层为维度的二维模型;
所述序列生成模型每层的长度相等,每一时刻的长度相等;
所述序列生成模型在任一时刻任一层上设有一个长短时间记忆网络。
3.根据权利要求1所述的生成方法,其特征在于,所述将所述函数表中的任一入口函数输入待训练的序列生成模型,获取所述任一入口函数的训练函数调用序列进一步包括:
将所述函数表中的任一入口函数输入待训练的序列生成模型,获取一个或多个所述任一入口函数的第一函数调用序列;
通过下式获取每一所述一个或多个所述任一入口函数的第一函数调用序列的生成概率:
P(S)=P(w1,w2,…wk)=P(w1)P(w2|w1)P(w3|w1,w2)…P(wk|w1,w2,…wk-1)
其中,P(S)为生成函数序列S的概率,P(w1,w2,…wk)表示为一个由w1,w2...wk构成的序列的概率,w1,w2,…wk为第K个函数,P(wi|wi-1)为在函数wi-1生成的情况下生成函数wi的概率;
将生成概率最大的第一函数调用序列作为所述任一入口函数的训练函数调用序列。
4.根据权利要求1所述的生成方法,其特征在于,所述从开源代码库中获取函数表和所述函数表中多个函数的函数调用关系图进一步包括:
根据文档生成工具获取所述开源代码库的帮助文档;
提取所述帮助文档中的函数表和所述函数表中多个函数的函数调用关系图;其中,所述函数表中包括多个函数和所述多个函数对应的多个函数信息,所述函数调用关系图用于描述所述多个函数之间的调用关系。
5.根据权利要求4所述的生成方法,其特征在于,所述函数调用关系图为有向图,所述函数调用关系图中任一节点为所述函数表中的任一函数。
6.根据权利要求4所述的生成方法,其特征在于,所述文档生成工具为Doxygen。
7.根据权利要求4所述的生成方法,其特征在于,所述入口函数的函数调用序列长度为预设值。
8.一种函数调用序列生成系统,其特征在于,包括:
获取序列模块,用于将入口函数输入训练好的序列生成模型中,获取所述入口函数的函数调用序列;
其中,所述训练好的序列生成模型通过下述子模块获取:
代码库获取子模块,用于从开源代码库中获取函数表和所述函数表中多个函数的函数调用关系图;
对比序列获取子模块,用于基于深度优先搜索的方法,根据所述函数调用关系图构建所述函数表中每一入口函数的对比函数调用序列;
训练序列获取子模块,用于将所述函数表中的任一入口函数输入待训练的序列生成模型,获取所述任一入口函数的训练函数调用序列;
获取训练好模型子模块,用于获取所述任一入口函数的训练函数调用序列与所述任一入口函数的对比函数调用序列之间的差距,并基于所述差距对所述序列生成模型的输入量进行更新,循环执行上一步骤,直至所述差距低于预设差距阈值,获取所述训练好的序列生成模型。
9.一种用于函数调用序列生成的电子设备,其特征在于,包括存储器和处理器,所述处理器和所述存储器通过总线完成相互间的通信;所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如权利要求1至7任一所述的生成方法。
10.一种计算机程序产品,其特征在于,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,使所述计算机执行如权利要求1至7任一所述的生成方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711444796.XA CN108053033A (zh) | 2017-12-27 | 2017-12-27 | 一种函数调用序列生成方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711444796.XA CN108053033A (zh) | 2017-12-27 | 2017-12-27 | 一种函数调用序列生成方法和系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108053033A true CN108053033A (zh) | 2018-05-18 |
Family
ID=62128523
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711444796.XA Pending CN108053033A (zh) | 2017-12-27 | 2017-12-27 | 一种函数调用序列生成方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108053033A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109002684A (zh) * | 2018-06-20 | 2018-12-14 | 北京大学 | 一种区间信息分析方法 |
CN112241782A (zh) * | 2019-07-17 | 2021-01-19 | 国际商业机器公司 | 具有建模原语的神经编程解释器 |
CN112905181A (zh) * | 2019-12-04 | 2021-06-04 | 杭州海康威视数字技术股份有限公司 | 一种模型编译、运行方法及装置 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5790798A (en) * | 1996-05-31 | 1998-08-04 | Witness Systems, Inc. | Method and apparatus for simultaneously monitoring computer user screen and telephone activity from a remote location |
CN103853532A (zh) * | 2012-11-29 | 2014-06-11 | 国际商业机器公司 | 用于函数调用的方法和装置 |
CN105653956A (zh) * | 2016-03-02 | 2016-06-08 | 中国科学院信息工程研究所 | 基于动态行为依赖图的Android恶意软件分类方法 |
WO2017083768A1 (en) * | 2015-11-12 | 2017-05-18 | Jarc Anthony Michael | Surgical system with training or assist functions |
CN107102861A (zh) * | 2017-04-25 | 2017-08-29 | 中南大学 | 一种获取开源代码库中函数的向量的方法和系统 |
EP3223155A1 (en) * | 2016-03-25 | 2017-09-27 | Worldline | Method for computing equivalence between two execution models |
CN107480435A (zh) * | 2017-07-31 | 2017-12-15 | 广东精点数据科技股份有限公司 | 一种应用于临床数据的自动搜索机器学习系统及方法 |
CN107506414A (zh) * | 2017-08-11 | 2017-12-22 | 武汉大学 | 一种基于长短期记忆网络的代码推荐方法 |
-
2017
- 2017-12-27 CN CN201711444796.XA patent/CN108053033A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5790798A (en) * | 1996-05-31 | 1998-08-04 | Witness Systems, Inc. | Method and apparatus for simultaneously monitoring computer user screen and telephone activity from a remote location |
CN103853532A (zh) * | 2012-11-29 | 2014-06-11 | 国际商业机器公司 | 用于函数调用的方法和装置 |
WO2017083768A1 (en) * | 2015-11-12 | 2017-05-18 | Jarc Anthony Michael | Surgical system with training or assist functions |
CN105653956A (zh) * | 2016-03-02 | 2016-06-08 | 中国科学院信息工程研究所 | 基于动态行为依赖图的Android恶意软件分类方法 |
EP3223155A1 (en) * | 2016-03-25 | 2017-09-27 | Worldline | Method for computing equivalence between two execution models |
CN107102861A (zh) * | 2017-04-25 | 2017-08-29 | 中南大学 | 一种获取开源代码库中函数的向量的方法和系统 |
CN107480435A (zh) * | 2017-07-31 | 2017-12-15 | 广东精点数据科技股份有限公司 | 一种应用于临床数据的自动搜索机器学习系统及方法 |
CN107506414A (zh) * | 2017-08-11 | 2017-12-22 | 武汉大学 | 一种基于长短期记忆网络的代码推荐方法 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109002684A (zh) * | 2018-06-20 | 2018-12-14 | 北京大学 | 一种区间信息分析方法 |
CN109002684B (zh) * | 2018-06-20 | 2021-08-06 | 北京大学 | 一种区间信息分析方法 |
CN112241782A (zh) * | 2019-07-17 | 2021-01-19 | 国际商业机器公司 | 具有建模原语的神经编程解释器 |
CN112905181A (zh) * | 2019-12-04 | 2021-06-04 | 杭州海康威视数字技术股份有限公司 | 一种模型编译、运行方法及装置 |
CN112905181B (zh) * | 2019-12-04 | 2023-10-10 | 杭州海康威视数字技术股份有限公司 | 一种模型编译、运行方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102302609B1 (ko) | 신경망 아키텍처 최적화 | |
Zaccone et al. | Deep Learning with TensorFlow: Explore neural networks and build intelligent systems with Python | |
CN108959396B (zh) | 机器阅读模型训练方法及装置、问答方法及装置 | |
CN111431742B (zh) | 网络信息检测方法、装置、存储介质和计算机设备 | |
CN107544960B (zh) | 一种基于变量绑定和关系激活的自动问答方法 | |
CN108053033A (zh) | 一种函数调用序列生成方法和系统 | |
WO2014058575A2 (en) | Modeling data generating process | |
CN110309911A (zh) | 神经网络模型验证方法、装置、计算机设备和存储介质 | |
CN109523014A (zh) | 基于生成式对抗网络模型的新闻评论自动生成方法及系统 | |
CN110781686B (zh) | 一种语句相似度计算方法、装置及计算机设备 | |
CN112084789A (zh) | 文本处理方法、装置、设备及存储介质 | |
CN115017178A (zh) | 数据到文本生成模型的训练方法和装置 | |
CN112131888A (zh) | 分析语义情感的方法、装置、设备及存储介质 | |
CN111966361A (zh) | 用于确定待部署模型的方法、装置、设备及其存储介质 | |
Pereira et al. | Development of a mobile dose prediction system based on artificial neural networks for NPP emergencies with radioactive material releases | |
CN113726545A (zh) | 基于知识增强生成对抗网络的网络流量生成方法及装置 | |
Sonawane et al. | ChatBot for college website | |
KR20210147771A (ko) | 신경망의 불확실성에 기반한 지식 증강 방법 및 장치 | |
CN112748953A (zh) | 基于神经网络模型的数据处理方法、装置及电子设备 | |
CN114995729A (zh) | 一种语音绘图方法、装置及计算机设备 | |
CN113821610A (zh) | 信息匹配方法、装置、设备及存储介质 | |
CN117829242B (zh) | 模型处理方法及相关设备 | |
CN109740162A (zh) | 文本表示方法、装置及介质 | |
CN112949882A (zh) | 一种负荷预测的方法、装置及电子设备 | |
CN113254597B (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20180518 |
|
RJ01 | Rejection of invention patent application after publication |