[发明专利]一种软件程序的智能解析方法有效
申请号: | 201810568286.1 | 申请日: | 2018-06-05 |
公开(公告)号: | CN109101235B | 公开(公告)日: | 2021-03-19 |
发明(设计)人: | 王旭;孙海龙;张建;刘旭东 | 申请(专利权)人: | 北京航空航天大学 |
主分类号: | G06F8/41 | 分类号: | G06F8/41 |
代理公司: | 北京中创阳光知识产权代理有限责任公司 11003 | 代理人: | 尹振启 |
地址: | 100191*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 软件 程序 智能 解析 方法 | ||
1.一种软件程序的智能解析方法,所述智能解析方法为基于AST的序列化神经网络,所述基于AST的序列化神经网络是一种层次化的向量表示方法,其实现步骤为,步骤1-1:在最底层,将原始程序转化成AST之后进一步分割得到对应的代码块序列,所述代码块之间是有次序之分的,且与原始的语句顺序相吻合;步骤1-2:每个代码块由一种递归式的编码器来将子树编码成向量,所述t是向量长度为正整数;步骤1-3:将得到的向量序列经过双向循环层以提取代码块之间的依赖特征;步骤1-4:所有的时间步的多维特征经过池化层采样得到最终的单个向量表示形式;
所述所有的时间步的多维特征经过池化层采样得到最终的单个向量的方法为,序列中代码块的表达形式为,所述T为一个序列中代码块的数量,t为正整数,在t时刻,序列中代码块隐藏状态的向量计算方式为:
其中,表示重置门,用于控制前一个状态对当前状态的影响;表示更新门,用于将历史状态与当前状态结合;是候选状态,用于与历史状态以及当前更新的状态进行线性组合计算,以决定最终的当前状态,所述、、、、是权重矩阵,所述、、是偏置项,是sigmoid激活函数,是t-1时刻的状态,是最终的当前状态,为当前更新的状态;在进行迭代计算之后,前向的依赖信息便自动获取到,除此之外,使用了反向的GRU,并且将这两个方向计算得到的隐藏状态连接到一起组成t时刻的状态,所述用于与历史状态以及当前更新的状态进行线性组合计算,以决定t时刻状态的过程用公式表述如下:
最终,再用最大池化或平均池化来对每一时刻的隐藏状态进行采样,得到整个程序的向量表示r。
2.如权利要求1所述的方法,其特征在于,在将程序转化成AST之后,首先以前序遍历的方式得到树的标识符序列,并利用现有的词嵌入技术将每个标识符转化成向量的形式,然后将原始的AST分割成代码块序列;所述 AST分割成代码块序列的方法为,输入某个程序的AST的根节点,当遍历器访问到的某个元素为复合语句的头部,所述头部包括函数定义,控制语句;调用构造器将此头部语句的不包含嵌套的复合语句元素的子树形式构造出来;如果当前访问的元素是复合语句,则对于其中的所有的单个语句递归地调用遍历器或者构造子树;最终,所有的构造出来的子树被存入到了一个全局的有序集合中,即为所述的代码块序列。
3.如权利要求2所述的方法,其特征在于,所述代码块的编码方法为, 对于给定的代码块t,n表示其中的非终节点,C表示其子节点的集合,具体的编码步骤为:
步骤3-1:根据公式得到所述非终节点的词向量,其中是经过词向量训练方法得到的预训练的权重,是该节点的one-hot向量表示形式;
步骤3-2:对节点n的向量表示与其子节点的向量表示组合计算,
其中,是权重矩阵,是偏置项,是子节点的向量表示,是激活函数;
步骤3-3:经过递归计算,每个节点都有了其向量表示,对于代码块中的N个节点,利用池化对其进行特征采样,以得到该代码块的向量表示,所述特征采样的计算方式为:
所述k表示向量的k个元素,i为N个节点的索引。
4.如权利要求2所述的方法,其特征在于,包括一种对代码块的批量计算方法批量计算多个代码块,以深度优先的方式从每个代码块的根节点开始计算,首先,对于所有节点,利用矩阵相乘的方式根据步骤3-1批量计算所有节点的所有的词向量,然后检查每个节点是否有子节点并且按照节点所属的索引进行迭代更新,递归地批量计算其子节点的向量后,按照步骤3-2中的公式进行向量的隐藏状态更新,将所有的以向量表示的节点置入一个全局的张量中,最后对该张量进行池化,得到每个代码块的最终向量表示。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京航空航天大学,未经北京航空航天大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810568286.1/1.html,转载请声明来源钻瓜专利网。