当前位置: 首页 > 专利查询>中南大学专利>正文

一种函数调用序列生成方法和系统技术方案

技术编号:17995314 阅读:29 留言:0更新日期:2018-05-19 12:26
本发明专利技术提供一种函数调用序列生成方法和系统,生成方法包括:将入口函数输入训练好的序列生成模型中,获取入口函数的函数调用序列;其中,训练好的序列生成模型通过下述步骤获取:获取函数表和函数调用关系图;构建函数表中每一入口函数的对比函数调用序列;将任一入口函数输入待训练的序列生成模型获取训练函数调用序列;获取任一入口函数的训练函数调用序列与对比函数调用序列之间的差距,基于差距对模型的输入量进行更新,循环执行上一步骤,直至差距低于预设差距阈值,获取训练好的序列生成模型。本发明专利技术使得生成方法更具有实用性。本发明专利技术能够使得训练好的序列生成模型生成的函数调用序列反映函数间的调用关系。

【技术实现步骤摘要】
一种函数调用序列生成方法和系统
本专利技术涉及机器学习领域,更具体地,涉及一种函数调用序列生成方法和系统。
技术介绍
随着人工智能的快速发展,机器学习与深度学习研究的持续火热,越来越多的工作集中在机器代码生成领域。机器代码的自动生成,一直是计算机科学和人工智能研究者们追求的目标。虽然目前的很多研究,取得了一定成果,但是还是面临着一些局限,这些局限具体体现在:生成的代码只能解决简单的问题(比如:冒泡排序,加减法等),还难以应对真实的应用需求。大部分的研究集中于领域特定语言的研究中,即大部分的研究者都采用自定义的简单编程语言,让机器学习这些简单单元的统计组合规则,从而实现代码的自动生成。这样带来的局限在于:多样的源代码库没有得到有效利用,然而实际生活中人们开发的程序又是最与实际应用需求相关的。
技术实现思路
本专利技术提供一种克服上述问题的一种函数调用序列生成方法和系统。根据本专利技术的一个方面,提供一种函数调用序列生成方法,包括:将入口函数输入训练好的序列生成模型中,获取所述入口函数的函数调用序列;其中,所述训练好的序列生成模型通过下述步骤获取:从开源代码库中获取函数表和所述函数表中多个函数的函数调用关系图;根据所述函数调用关系图构建所述函数表中每一入口函数的对比函数调用序列;将所述函数表中的任一入口函数输入待训练的序列生成模型,获取所述任一入口函数的训练函数调用序列;获取所述任一入口函数的训练函数调用序列与所述任一入口函数的对比函数调用序列之间的差距,并基于所述差距对所述序列生成模型的输入量进行更新,循环执行上一步骤,直至所述差距低于预设差距阈值,获取所述训练好的序列生成模型。优选地,所述序列生成模型由多个长短时间记忆网络构成,是以时刻和层为维度的二维模型;所述序列生成模型每层的长度相等,每一时刻的长度相等;所述序列生成模型在任一时刻任一层上设有一个长短时间记忆网络。优选地,所述将所述函数表中的任一入口函数输入待训练的序列生成模型,获取所述任一入口函数的训练函数调用序列进一步包括:将所述函数表中的任一入口函数输入待训练的序列生成模型,获取一个或多个所述任一入口函数的第一函数调用序列;通过下式获取每一所述一个或多个所述任一入口函数的第一函数调用序列的生成概率: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平台中的开源项目的代码都用于产生序列生成模型的训练集。利用广域的互联网开源代码资源,可以任意丰富训练集。进一步地,开本文档来自技高网...
一种函数调用序列生成方法和系统

【技术保护点】
一种函数调用序列生成方法,其特征在于,包括:将入口函数输入训练好的序列生成模型中,获取所述入口函数的函数调用序列;其中,所述训练好的序列生成模型通过下述步骤获取:从开源代码库中获取函数表和所述函数表中多个函数的函数调用关系图;根据所述函数调用关系图构建所述函数表中每一入口函数的对比函数调用序列;将所述函数表中的任一入口函数输入待训练的序列生成模型,获取所述任一入口函数的训练函数调用序列;获取所述任一入口函数的训练函数调用序列与所述任一入口函数的对比函数调用序列之间的差距,并基于所述差距对所述序列生成模型的输入量进行更新,循环执行上一步骤,直至所述差距低于预设差距阈值,获取所述训练好的序列生成模型。

【技术特征摘要】
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所述的生成方法,其特征在于,所述从开源代码库中获取函数表和所述函数表中多个函数的函数调用关系图进一步包括:根据文档生...

【专利技术属性】
技术研发人员:李海峰张文泽邓敏
申请(专利权)人:中南大学
类型:发明
国别省市:湖南,43

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1