CN112230905B - 一种结合深度学习与后向切片的程序自动生成方法 - Google Patents
一种结合深度学习与后向切片的程序自动生成方法 Download PDFInfo
- Publication number
- CN112230905B CN112230905B CN202011183895.9A CN202011183895A CN112230905B CN 112230905 B CN112230905 B CN 112230905B CN 202011183895 A CN202011183895 A CN 202011183895A CN 112230905 B CN112230905 B CN 112230905B
- Authority
- CN
- China
- Prior art keywords
- program
- neural network
- sketch
- label
- candidate
- 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
Links
Images
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
- G06F8/31—Programming languages or programming paradigms
-
- 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/045—Combinations of 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/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- General Physics & Mathematics (AREA)
- Artificial Intelligence (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computational Linguistics (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Mathematical Physics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种结合深度学习与后向切片的程序自动生成方法,包括:获取目标程序并解析得到程序草图,从程序草图中抽取标签得到用于训练模型的标签与程序草图的数据对,将标签与程序草图的数据对作为训练数据,在改进的encoder‑decoder神经网络架构下的程序合成方法中进行模型训练得到程序合成模型;获取任务规范,对任务规范的编程任务描述解析得到标签,将标签输入程序合成模型生成候选程序草图,根据预设的启发式策略对候选程序草图进行变量填充生成候选程序,用静态向后切片方法去除候选程序的冗余代码得到精准程序。本发明可以扩展程序搜索空间以提升程序合成的精度和能力,从而扩展程序生成的规模。
Description
技术领域
本发明涉及软件工程领域,尤其涉及一种结合深度学习与后向切片的程序自动生成方法。
背景技术
程序合成,又叫程序自动生成,是智能化软件开发中的一个重要研究方向。它的目的是让机器自动合成代码,从而提高软件开发自动化程度,提升程序员开发效率,让开发人员从底层代码细节中解放从而专于与软件的高层设计。程序合成的任务是从底层编程语言中自动查找或构造满足以某种形式约束表示的用户意图的程序。程序合成不同于程序员完成一项变成任务,它是一种针对用户意图构造出相关程序的软件开发活动。它关注让计算机理解用户需要什么,进而去自动化编程,其最终目标是让机器能够自动编写代码。程序合成一直是编程领域中最为热门和核心的问题之一,早在1932年就考虑过通过组合较小子问题的解来构造具有证明的可解释解(算法)的想法。目前,该方向的研究已经得到学术界和工业界的广泛关注。美国国防高级计划署DARPA在2014年发起了MUSE(mining andunderstanding software enclaves)项目,其目的是挖掘大规模代码中的知识应用于软件开发中的各项任务,该项目已经取得了一些成果。此外,如Google、Microsoft、Facebook等企业界著名的IT公司都在该方向投入了大量的资源开展研究工作。
程序合成的过程被划分为三个维度:用于表达用户意图的约束、搜索的程序空间和使用的搜索技术。各种不同的程序合成方法通过这三个维度来划分,其核心挑战是搜索程序的可能广阔空间,找到符合规范的程序。
在传统的演绎式程序综合中,规范是一个适当逻辑的正式陈述。研究人员认为软件是用数学定义良好的编程语言构建的,因此软件可以用纯形式的术语来构思。演绎综合方法假设用户提供了表达意图的一个完整的正式规范,在许多情况下,这被证明与编写程序本身一样复杂。这推动了了基于归纳规范的新程序合成方法。在这个方法内,规范可以是不完整的,例如Gulwani等人提出利用<输入-输出>数据对来进行归纳编程的程序合成方法,该方法通过将搜索空间限制到领域特定语言(Domain-Specific Language,DSL)和分治法来提高搜索算法效率。该技术已经在微软产品Microsoft Excel 2013的快速填充功能中得到了使用,并取得了很好的效果。另外,Desai等人还提出了利用自然语言描述的规约来进行程序合成的方法,该方法通过对包含<自然语言-领域特定语言>数据对的训练集进行学习,能够将自然语言翻译为领域特定语言然后再执行程序合成工作。归纳式程序合成区别于演绎式程序的一点就是不需要提供一个完整的规范,然而这也导致了归纳式程序合成无法保证在程序的正确性。
随着大量开源软件和开源社区的发展,遍布在互联网上已经存在的各类程序代码及其相关资源包含着各种知识引起了计算机科学家们的关注,对大数据的处理分析也正成为新一代信息技术融合应用的结点。正如互联网中的海量数据使得大数据的应用成为了热点,如今互联网中的大量代码也催生了利用大规模代码资源库中已有的知识来解决软件工程问题的新思路。如何利用互联网群体智慧和知识来支持智能化的程序搜索与构造技术,已经得到了越来越多科研工作者的重视。
基于深度学习的程序合成从大量成功的、广泛使用的开源软件中自动学习内在知识,从而自动生成目标功能的代码。深度学习的希望和动力在于它能从实例中归纳出来并处理噪音,并且可以将其作为黑盒来取代启发式和查找功能。学习知识的过程被称之为模型训练阶段。在模型训练阶段,需要使用不同种类编程任务的训练数据来对模型进行训练。深度学习程序合成系统通常结合了概率模型,并且可以利用随机梯度下降算法完成模型训练。模型训练完成之后就可以应用,模型根据新任务的约束描述预测出各种操作原语语句出现在代码片段中的概率。然而这种编解码器方法的潜在问题是,神经网络需要将源语句的所有信息压缩到一个固定长度的向量中,然后通过这个向量连接编码器和解码器。而随着输入句子长度的增加,基础编解码器的性能确实会迅速下降。其次,无论是基于搜索的还是生成式的程序合成,神经程序生成为了尽可能的降低空间搜索的复杂度和尽快地找到答案,通常生成长度有限。除了长度以外,程序合成技术还局限于生成规模较小、功能单一的程序。此外,对于合成得到的代码,很难在逻辑上验证其正确性.对于通过给定<输入-输出>数据对得到的程序,由于无法覆盖到程序运行的所有可能情况,因此正确性很难验证。而没<输入-输出>数据对的归纳式合成方法更加难以验证程序正确性,这对于用户的使用来说是一个非常大的困扰。可以看出,程序合成还处于起步阶段,扩展基于深度学习的程序合成的通用性、提升基于深度学习的程序合成的准确性的工作非常重要。
发明内容
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种结合深度学习与后向切片的程序自动生成方法,扩展程序搜索空间,以提升程序合成的精度和能力,从而扩展程序生成的规模。
为解决上述技术问题,本发明提出的技术方案为:
一种结合深度学习与后向切片的程序自动生成方法,包括以下步骤:
S1)获取目标程序并解析得到程序草图,从程序草图中抽取标签得到用于训练模型的标签与程序草图的数据对,所述标签包括API调用,所述API调用包括指定的非API操作,将标签与程序草图的数据对作为训练数据,在改进的encoder-decoder神经网络架构下的程序合成方法中进行模型训练得到程序合成模型;
S2)获取任务规范,对任务规范的编程任务描述解析得到标签,将标签输入程序合成模型生成候选程序草图,根据预设的启发式策略对候选程序草图进行变量填充生成候选程序,用静态向后切片方法去除候选程序的冗余代码得到精准程序。
进一步的,步骤S1)具体包括以下步骤:
S11)清洗过程:在目标网站上选择指定的项目并获取其中可用的java程序,再进行数据清洗删除掉一些没有意义的程序;
S12)解析草图:构建领域特定语言,并通过构建的领域特定语言分别将各java程序解析成对应的程序草图,将各java程序中指定的非API操作封装到API调用中;
S13)抽取标签:从各程序草图中抽取程序涉及的类型、非API操作,API调用这三类标签,分别将每个程序草图以及对应的标签组合成用于训练模型的标签与程序草图的数据对;
S14)训练模型:将所有标签与程序草图的数据对作为训练数据,在改进的encoder-decoder神经网络架构下的程序合成方法中进行模型训练得到程序合成模型。
进一步的,步骤S1)中改进的encoder-decoder神经网络中,encoder是前馈神经网络,decoder是长短期记忆神经网络,编码器由三个前馈神经网络组成,译码器由两个长短期记忆神经网络组成,每个长短期记忆神经网络包括三个用于迭代的神经元。
进一步的,步骤S1)中改进的encoder-decoder神经网络架构下的程序合成方法中进行模型训练的具体步骤包括:
A1)根据解码器和前馈神经网络的结果计算得到每个前馈神经网络对应的注意力值,函数表达式如下:
score(he,3,t,f(Xlabel,i))=he,3,t·f(Xlabel,i)
上式中,i为前馈神经网络的序号,f(Xlabel,i)为前馈神经网络的结果,h为解码器的隐藏状态;
A2)对每个前馈神经网络对应的注意力值与解码器的当前时间步分别计算加权和得到每个前馈神经网络对应的注意力权重值,并对所有的注意力权重值进行标准化,函数表达式如下:
上式中,i为前馈神经网络的序号,f(Xlabel,i)为前馈神经网络的结果,h为解码器的隐藏状态,score(he,3,t,f(Xlabel,i))为前馈神经网络对应的注意力值;
A3)根据标准化后的注意力权重值与对应的前馈神经网络的结果得到注意力向量,函数表达式如下:
上式中,i为前馈神经网络的序号,f(Xlabel,i)为前馈神经网络的结果,αe,t(i)为前馈神经网络对应的注意力权重值;
A4)将注意力向量按照预设规则与解码器中长短期记忆神经网络的输入进行拼接,使其参与到每个时间步中,预设规则的函数表达式如下:
上式中,inpt为当前时间步t下解码器的输入,ct为注意力权值,outt-1为上一个时间步解码器的输出,infer&t=0意为在进行推断并且当前时间状态为初始状态的条件,infer&t>0意为在进行推断并且当前时间状态为非初始状态的条件,Wa和ba为通过注意力机制计算出的输入值的对齐矩阵和偏置,为计算的中间值,代表了注意力机制的参与,inpt为最终用于计算的值。
进一步的,步骤S12)中指定的非API操作包括用于加减乘除运算的非API操作。
进一步的,步骤S2)具体包括以下步骤:
S21)解析标签:获取用户输入的任务规范,从任务规范的编程任务描述中解析出API调用、非API操作、程序涉及的类型这三类标签;
S22)预测生成草图:将API调用、非API操作、程序涉及的类型分别输入训练好的程序合成模型,程序合成模型生成至少一个候选程序草图,将所有候选程序草图组成候选程序草图的集合;
S23)启发式策略生成程序:根据预设的启发式策略分别对候选程序草图的集合中的候选程序草图进行变量填充生成候选程序;
S24)切片优化:从候选程序中选取目标程序进行静态后向切片,去除目标程序中包含不可达代码和无关代码的冗余代码,最终得到指定数量的精准程序。
进一步的,步骤S23)中预设的启发式策略包括变量选择策略,具体包括:对于相邻的API调用或非API操作,在变量候选列表中优先选择上下文中最近分配的变量;对于API调用或非API操作中的相同类型的参数,在变量候选列表中优先选择较少引用的变量;将变量名包含的语义知识中的信息添加到目标变量与变量候选列表之间的相似性距离计算中。
进一步的,步骤S23)中预设的启发式策略包括新建变量初始化策略,具体包括:对于新建变量中的基本类型选择经验性的初始化值,对于新建变量中的非基本类型固定为null。
进一步的,步骤S24)具体包括以下步骤:
B1)在候选程序中筛选指定数量的返回值为非空的程序作为目标程序;
B2)针对目标程序分别构建对应的程序依赖图;
B3)分别从目标程序中提取返回语句作为切片语句,提取返回变量作为切片变量,根据每个目标程序对应的切片语句、切片变量和程序依赖图对目标程序切片得到精准程序。
与现有技术相比,本发明的优点在于:
(1)本发明通过改进的encoder-decoder神经网络对于程序合成模型的架构进行调整改进,同时将指定的非API操作封装为API调用,相比于目前程序合成技术通常只能生成一些规模较小并且功能单一的程序的问题,我们进行的改进解决了模型架构的缺陷和程序搜索空间的限制,以提升程序合成的精度和能力,从而扩展程序生成的规模;
(2)本发明针对程序合成得到的候选程序进行程序切片去除候选程序的冗余代码,提升程序精简率,从而提升结果的有效性,解决了归纳式程序合成无法保证生成结果正确性的问题,同时避免增加完整规范来验证代码正确性存在的时间过长且效率不高的问题。
附图说明
图1为本发明实施例的框架示意图。
图2为本发明实施例的步骤流程图。
图3为本发明实施例的模型训练的流程图。
图4为本发明实施例的程序合成的流程图。
图5为本发明实施例的程序切片优化的框架示意图。
具体实施方式
以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。
如图1和图2所示,本发明的结合深度学习与后向切片的程序自动生成方法,包括以下步骤:
S1)获取目标程序并解析得到程序草图,从程序草图中抽取标签得到用于训练模型的标签与程序草图的数据对,将标签与程序草图的数据对作为训练数据,在改进的encoder-decoder神经网络架构下的程序合成方法中进行模型训练得到程序合成模型;
S2)获取任务规范,对任务规范的编程任务描述解析得到标签,将标签输入程序合成模型生成候选程序草图,根据预设的启发式策略对候选程序草图进行变量填充生成候选程序,用静态向后切片方法去除候选程序的冗余代码得到精准程序。
如图3所示,本实施例的步骤S1)具体包括以下步骤:
S11)清洗过程:对互联网资源中的代码数据进行清洗筛选,本实施例将github作为目标网站,在github上根据星级排名选择前700的项目,然后保留其中可用的java程序,再进行数据清洗删除掉一些没有意义的程序;
S12)解析草图:构建DSL(领域特定语言),分别将各java程序解析成对应的程序草图,将各java程序中指定的非API操作封装到API调用中,以扩展程序合成的能力和范围;
本实施例中,我们根据规定的抽象草图的语法,构建DSL代码自动化地将程序泛化为抽象草图,降低模型训练难度,抽象草图的结构源于程序的抽象语法树,但舍弃了例如变量名等底层抽象,保存了API调用,并且我们还将一些常用的非API操作例如加减乘除封装成API,以使得合成的程序支持这些非API操作,其语法如下:
Y::=skip|call Cexp|call Cop|Y1;Y2|if Cseq then Y1 else Y2|while Cseqdo Y1|try Y1 Catch
Cop::=ι.op(ε1,…,εk)
op::=+|-|*|/|&&||||>|>=|==|!=|<|<=
Cseq::=List of(Cexp|Cop)
其中Y为程序草图,包含了空、API调用、非API操作、调用序列、判断结构、循环结构和异常处理结构,Cop为非API操作,ι为操作返回类型,ε为涉及的参数类型;op定义了常见二元操作;Cseq为操作序列,Cexp为API调用;
由于大多数程序合成关注于合成包含API调用的程序,我们可以以此为基础将非API操作封装到API调用中,这种方法的优点是,我们可以通过重用当前模块来解决非API合成问题,例如,基于图搜索的程序合成将API调用视为图中的节点,我们同样可以将非API操作处理成图中的节点来进行合成任务;
S13)抽取标签:根据步骤12)中程序草图的语法,从各程序草图中抽取程序涉及的类型、非API操作,API调用这三类标签,分别将每个程序草图以及对应的标签组合成用于训练模型的标签与程序草图的数据对,每个程序草图可以组成一或多对标签与程序草图的数据对;
S14)训练模型:将所有标签与程序草图的数据对作为训练数据,在改进的encoder-decoder神经网络架构下的程序合成方法中进行模型训练得到程序合成模型。
本实施例中,我们借鉴注意机制调整改进encoder-decoder神经网络用于解决信息遗忘和长序列生成的问题,其目标是推导出从编码端向量捕获信息的上下文向量,从而帮助预测解码器的当前隐藏状态,目前的注意机制主要应用于RNN、LSTM等带有时间序列的网络结构,我们的目标是借鉴其原理并将其通用于各种encoder-decoder网络。
例如当encoder是前馈神经网络(feed-forward neural network,FFNN),而decoder是长短期记忆神经网络(Long Short-Term Memory,LSTM),改进的encoder-decoder神经网络中,编码器由三个前馈神经网络组成,译码器由两个长短期记忆神经网络组成,每个长短期记忆神经网络包括三个用于迭代的神经元,该改进的encoder-decoder神经网络架构下的程序合成方法中进行模型训练的具体步骤包括:
A1)根据解码器和前馈神经网络的结果计算得到每个前馈神经网络对应的注意力值,函数表达式如下:
score(he,3,t,f(Xlabel,i))=he,3,t·f(Xlabel,i) (1)
上式中,i为前馈神经网络的序号,f(Xlabel,i)为前馈神经网络的结果,h为解码器的隐藏状态;
A2)对每个前馈神经网络对应的注意力值与解码器的当前时间步分别计算加权和得到每个前馈神经网络对应的注意力权重值,并对所有的注意力权重值进行标准化,函数表达式如下:
上式中,i为前馈神经网络的序号,f(Xlabel,i)为前馈神经网络的结果,h为解码器的隐藏状态,score(he,3,t,f(Xlabel,i))为前馈神经网络对应的注意力值;
A3)根据标准化后的注意力权重值与对应的前馈神经网络的结果得到注意力向量,函数表达式如下:
上式中,i为前馈神经网络的序号,f(Xlabel,i)为前馈神经网络的结果,αe,t(i)为前馈神经网络对应的注意力权重值;
A4)将注意力向量按照预设规则与解码器中长短期记忆神经网络的输入进行拼接,使其参与到每个时间步中,预设规则的函数表达式如下:
上式中,inpt为当前时间步t下解码器的输入,ct为注意力权值,outt-1为上一个时间步解码器的输出,infer&t=0意为在进行推断并且当前时间状态为初始状态的条件,infer&t>0意为在进行推断并且当前时间状态为非初始状态的条件,Wa和ba为通过注意力机制计算出的输入值的对齐矩阵和偏置,为计算的中间值,代表了注意力机制的参与,inpt为最终用于计算的值。
如图4所示,本实施例的步骤S2)具体包括以下步骤:
S21)解析标签:获取用户输入的任务规范,任务规范的编程任务描述中包含了方法级别的函数头部和一些目标程序中会用到的API调用、非API操作或程序涉及的类型,从编程任务描述中解析出API调用、非API操作、程序涉及的类型这三类标签;
S22)预测生成草图:将标签输入训练好的程序合成模型,程序合成模型生成至少一个候选程序草图,将所有候选程序草图组成候选程序草图的集合;
S23)启发式策略生成程序:根据预设的启发式策略分别对程序草图的集合中的程序草图进行变量填充生成候选程序,我们尝试使用一些启发式策略用于改进草图填充、提升填充的正确率,本实施例中我们根据程序安全化技术来生成程序,启发式策略包括变量选择策略,具体包括:
对于相邻的API调用或非API操作,在变量候选列表中优先选择上下文中最近分配的变量,因为这个变量很可能在下一个调用中被使用;
对于API调用或非API操作中的相同类型的参数,在变量候选列表中优先选择较少引用的变量,它可以避免在相同的操作中使用相同的变量;
将变量名包含的语义知识中的信息添加到目标变量与变量候选列表之间的相似性距离计算中;
在这一阶段,除了变量选择以外,还需要对新建的变量进行初始化,因此启发式策略还包括新建变量初始化策略,具体包括:
对于新建变量中的基本类型选择经验性的初始化值,例如0、1、0.0、1.0、“”、true、false等,对于新建变量中的非基本类型固定为null,从而在确保生成的程序语法正确的前提下,提高生成代码的灵活性;
S24)切片优化:对候选程序进行后向切片,去除不可达代码和无关代码,如图4所示,本实施例中用静态向后切片方法检测并去除候选程序的冗余代码,最终得到精准程序以提高合成结果,具体包括以下步骤:
B1)在候选程序中筛选指定数量的返回值为非空的程序作为目标程序,本实施例中指定十个返回值为非空的程序作为目标程序;
B2)针对目标程序分别构建对应的程序依赖图(PDG),本实施例中,我们使用PDG辅助程序切片,PDG由节点和边组成,节点是每个语句,边表示语句之间的数据依赖和控制依赖,因此通过PDG可以较为直观的确定语句之间的依赖关系,为程序切片提供依据;
B3)分别从目标程序中提取返回语句作为切片语句,提取返回变量作为切片变量,根据每个目标程序对应的切片语句、切片变量和程序依赖图对目标程序切片,最终得到了十个丢弃了不可达代码和无关代码的精准程序作为最终结果。
上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。
Claims (9)
1.一种结合深度学习与后向切片的程序自动生成方法,其特征在于,包括以下步骤:
S1)获取目标程序并解析得到程序草图,从程序草图中抽取标签得到用于训练模型的标签与程序草图的数据对,所述标签包括API调用,所述API调用包括指定的非API操作,将标签与程序草图的数据对作为训练数据,在改进的encoder-decoder神经网络架构下的程序合成方法中进行模型训练得到程序合成模型;
S2)获取任务规范,对任务规范的编程任务描述解析得到标签,将标签输入程序合成模型生成候选程序草图,根据预设的启发式策略对候选程序草图进行变量填充生成候选程序,用静态向后切片方法去除候选程序的冗余代码得到精准程序。
2.根据权利要求1所述的结合深度学习与后向切片的程序自动生成方法,其特征在于,步骤S1)具体包括以下步骤:
S11)清洗过程:在目标网站上选择指定的项目并获取其中可用的java程序,再进行数据清洗删除掉一些没有意义的程序;
S12)解析草图:构建领域特定语言,并通过构建的领域特定语言分别将各java程序解析成对应的程序草图,将各java程序中指定的非API操作封装到API调用中;
S13)抽取标签:从各程序草图中抽取程序涉及的类型、非API操作,API调用这三类标签,分别将每个程序草图以及对应的标签组合成用于训练模型的标签与程序草图的数据对;
S14)训练模型:将所有标签与程序草图的数据对作为训练数据,在改进的encoder-decoder神经网络架构下的程序合成方法中进行模型训练得到程序合成模型。
3.根据权利要求1所述的结合深度学习与后向切片的程序自动生成方法,其特征在于,步骤S1)中改进的encoder-decoder神经网络中,encoder是前馈神经网络,decoder是长短期记忆神经网络,编码器由三个前馈神经网络组成,译码器由两个长短期记忆神经网络组成,每个长短期记忆神经网络包括三个用于迭代的神经元。
4.根据权利要求3所述的结合深度学习与后向切片的程序自动生成方法,其特征在于,步骤S1)中改进的encoder-decoder神经网络架构下的程序合成方法中进行模型训练的具体步骤包括:
A1)根据解码器和前馈神经网络的结果计算得到每个前馈神经网络对应的注意力值,函数表达式如下:
score(he,3,t,f(Xlabel,i))=he,3,t·f(Xlabel,i)
上式中,i为前馈神经网络的序号,f(Xlabel,i)为前馈神经网络的结果,h为解码器的隐藏状态;
A2)对每个前馈神经网络对应的注意力值与解码器的当前时间步分别计算加权和得到每个前馈神经网络对应的注意力权重值,并对所有的注意力权重值进行标准化,函数表达式如下:
上式中,i为前馈神经网络的序号,f(Xlabel,i)为前馈神经网络的结果,h为解码器的隐藏状态,score(he,3,t,f(Xlabel,i))为前馈神经网络对应的注意力值;
A3)根据标准化后的注意力权重值与对应的前馈神经网络的结果得到注意力向量,函数表达式如下:
上式中,i为前馈神经网络的序号,f(Xlabel,i)为前馈神经网络的结果,αe,t(i)为前馈神经网络对应的注意力权重值;
A4)将注意力向量按照预设规则与解码器中长短期记忆神经网络的输入进行拼接,使其参与到每个时间步中,预设规则的函数表达式如下:
5.根据权利要求2所述的结合深度学习与后向切片的程序自动生成方法,其特征在于,步骤S12)中指定的非API操作包括用于加减乘除运算的非API操作。
6.根据权利要求1所述的结合深度学习与后向切片的程序自动生成方法,其特征在于,步骤S2)具体包括以下步骤:
S21)解析标签:获取用户输入的任务规范,从任务规范的编程任务描述中解析出API调用、非API操作、程序涉及的类型这三类标签;
S22)预测生成草图:将API调用、非API操作、程序涉及的类型分别输入训练好的程序合成模型,程序合成模型生成至少一个候选程序草图,将所有候选程序草图组成候选程序草图的集合;
S23)启发式策略生成程序:根据预设的启发式策略分别对候选程序草图的集合中的候选程序草图进行变量填充生成候选程序;
S24)切片优化:从候选程序中选取目标程序进行静态后向切片,去除目标程序中包含不可达代码和无关代码的冗余代码,最终得到指定数量的精准程序。
7.根据权利要求6所述的结合深度学习与后向切片的程序自动生成方法,其特征在于,步骤S23)中预设的启发式策略包括变量选择策略,具体包括:对于相邻的API调用或非API操作,在变量候选列表中优先选择上下文中最近分配的变量;对于API调用或非API操作中的相同类型的参数,在变量候选列表中优先选择较少引用的变量;将变量名包含的语义知识中的信息添加到目标变量与变量候选列表之间的相似性距离计算中。
8.根据权利要求6所述的结合深度学习与后向切片的程序自动生成方法,其特征在于,步骤S23)中预设的启发式策略包括新建变量初始化策略,具体包括:对于新建变量中的基本类型选择经验性的初始化值,对于新建变量中的非基本类型固定为null。
9.根据权利要求6所述的结合深度学习与后向切片的程序自动生成方法,其特征在于,步骤S24)具体包括以下步骤:
B1)在候选程序中筛选指定数量的返回值为非空的程序作为目标程序;
B2)针对目标程序分别构建对应的程序依赖图;
B3)分别从目标程序中提取返回语句作为切片语句,提取返回变量作为切片变量,根据每个目标程序对应的切片语句、切片变量和程序依赖图对目标程序切片得到精准程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011183895.9A CN112230905B (zh) | 2020-10-29 | 2020-10-29 | 一种结合深度学习与后向切片的程序自动生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011183895.9A CN112230905B (zh) | 2020-10-29 | 2020-10-29 | 一种结合深度学习与后向切片的程序自动生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112230905A CN112230905A (zh) | 2021-01-15 |
CN112230905B true CN112230905B (zh) | 2022-06-21 |
Family
ID=74121469
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011183895.9A Active CN112230905B (zh) | 2020-10-29 | 2020-10-29 | 一种结合深度学习与后向切片的程序自动生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112230905B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018184214A1 (en) * | 2017-04-07 | 2018-10-11 | Intel Corporation | Systems and methods for providing deeply stacked automated program synthesis |
CN110673840A (zh) * | 2019-09-23 | 2020-01-10 | 山东师范大学 | 一种基于标签图嵌入技术的自动代码生成方法及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10970363B2 (en) * | 2017-10-17 | 2021-04-06 | Microsoft Technology Licensing, Llc | Machine-learning optimization of data reading and writing |
-
2020
- 2020-10-29 CN CN202011183895.9A patent/CN112230905B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018184214A1 (en) * | 2017-04-07 | 2018-10-11 | Intel Corporation | Systems and methods for providing deeply stacked automated program synthesis |
CN110673840A (zh) * | 2019-09-23 | 2020-01-10 | 山东师范大学 | 一种基于标签图嵌入技术的自动代码生成方法及系统 |
Non-Patent Citations (2)
Title |
---|
基于深度学习的程序生成与补全技术研究进展;胡星等;《软件学报》;20190515;第30卷(第05期);第1206-1223页 * |
程序合成研究进展;张银珠等;《软件》;20190430;第40卷(第4期);第25-30页 * |
Also Published As
Publication number | Publication date |
---|---|
CN112230905A (zh) | 2021-01-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Alzubaidi et al. | A survey on deep learning tools dealing with data scarcity: definitions, challenges, solutions, tips, and applications | |
Polosukhin et al. | Neural program search: Solving programming tasks from description and examples | |
US20210142008A1 (en) | Named entity disambiguation using entity distance in a knowledge graph | |
CN113360915B (zh) | 基于源代码图表示学习的智能合约多漏洞检测方法及系统 | |
CN108885632A (zh) | 用于实时数据流编程的高效状态机 | |
CN101751385B (zh) | 一种采用层次管道过滤器体系结构的多语言信息抽取方法 | |
CN113064586B (zh) | 一种基于抽象语法树增广图模型的代码补全方法 | |
WO2006060717A2 (en) | Xml-based symbolic language and interpreter | |
Kant | Recent advances in neural program synthesis | |
KR102405578B1 (ko) | 지식 그래프를 이용한 상황 인지형 다중 문장 관계 추출 방법 및 장치 | |
Tiwang et al. | A deep learning model for source code generation | |
CN113065322B (zh) | 一种代码段注释生成方法、系统及可读存储介质 | |
Japa et al. | A population-based hybrid approach for hyperparameter optimization of neural networks | |
Dhall et al. | Text generation using long short-term memory networks | |
Liu et al. | Universal representation for code | |
CN112230905B (zh) | 一种结合深度学习与后向切片的程序自动生成方法 | |
Arora et al. | Code semantic detection | |
CN116560666A (zh) | 基于多层级代码生成的ai前端统一计算方法、装置及介质 | |
Mediouni et al. | Improved learning for stochastic timed models by state-merging algorithms | |
Zhou et al. | Survey of intelligent program synthesis techniques | |
Elbosaty et al. | Within-Project Defect Prediction Using Improved CNN Model via Extracting the Source Code Features | |
Yang | Neurosymbolic Machine Learning for Reasoning | |
CN115879868B (zh) | 一种专家系统与深度学习相融合的智能合约安全审计方法 | |
Cao et al. | Deep specification mining with attention | |
CN117573096B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |