← 返回列表

一种基于语义流图的程序语言缺陷定位方法、系统及介质

申请号: CN202311639788.6
申请人: 山东大学
更新日期: 2026-03-09

专利详细信息

项目 内容
专利名称 一种基于语义流图的程序语言缺陷定位方法、系统及介质
专利类型 发明授权
申请号 CN202311639788.6
申请日 2023/12/4
公告号 CN117349186B
公开日 2024/3/5
IPC主分类号 G06F11/36
权利人 山东大学
发明人 余仲星; 杨振宇; 杜雅莉
地址 山东省青岛市即墨区滨海公路72号山东大学(青岛第周苑C座)

摘要文本

本发明公开了一种基于语义流图的程序语言缺陷定位方法、系统及介质,涉及程序语言和深度学习领域。本发明获取包含带有自然语言描述的程序语言文本数据集和带有错误信息标记的程序语言文本数据集,构建语义流图;将语义流图和对应的程序语言文本输入到预训练模型获取文本特征向量;通过多层感知机将错误信息特征向量和程序语言文本特征向量映射到同一向量空间;计算错误信息和程序语言文本之间的相似度;利用分类器对相似度结果进行分类并判断程序语言文本与错误信息的相关度进而输出判定为错误的程序语言文本。本发明通过语义流图的方式使程序语言缺陷定位模型显式的学习程序语言知识,缓解了深度学习模型学习程序知识能力不足的问题。 (更多数据,详见专利查询网)

专利主权项内容

1.一种基于语义流图的程序语言缺陷定位方法,其特征在于,包括:获取带有自然语言描述的程序语言数据集和带有错误信息标记的程序语言数据集,所述带有自然语言描述的程序语言数据集包含程序语言文本和其对应的自然语言注释,带有错误信息标记的程序语言数据集包含错误报告、错误的程序语言文本以及程序语言文本中错误的具体位置信息;将带有自然语言描述的程序语言数据集进行预处理,保留自然语言描述并对程序语言文本构建语义流图,语义流图包括程序变量节点、变量节点之间的边、变量的类型以及变量的角色;根据得到的语义流图构建邻接矩阵,并进行掩码操作;所述邻接矩阵包括语义流图中的变量依赖关系邻接矩阵、语义流图中的节点与变量类型的对应关系邻接矩阵、语义流图中的节点与变量角色的对应关系邻接矩阵以及语义流图与程序语言文本的对应关系邻接矩阵;将语义流图的变量节点、变量类型、变量角色、邻接矩阵、程序语言文本以及对应的自然语言描述输入到基于程序语义流图的预训练模型中并以自监督的方式进行训练;在基于程序语义流图的预训练模型的基础上构建程序语言缺陷定位模型并使用带有错误信息标记的程序语言文本数据对模型进行有监督训练;将带有真实错误的程序语言本文输入到训练得到的程序语言缺陷定位模型中,通过计算程序语言文本与错误信息的相似度来判别此程序语言文本是否与错误有关,当错误信息和程序语言的特征向量的相似度高于指定阈值则分类器判断为此程序文本为错误程序,并将错误程序文本的所在位置作为模型的最终结果;所述语义流图构建方法包括:对程序语言文本数据进行语法分析,获得其对应的抽象语法树;构建语义流图集合<N, E, T, R>,集合中N表示语义流图中的变量节点,E表示节点之间的边,T表示变量节点类型,R表示变量节点角色;将程序文本中的变量和变量类型分别映射到语义流图中的N和T中;获取语义流图的边集合,边集合包括数据流连线、控制流连线、运算顺序流连线三种,其中,数据流连线表示两个变量之间的数据流连接,控制流连线表示两个直线基本块之间的控制流,运算顺序流连线表示基本块内部或基本块之间的自然顺序计算流;获取变量节点角色集合,对于每个语义流图中的变量节点,该变量节点通过检索抽象语法树中相应变量的直接父级,以及它与直接父级之间的位置关系,建立角色;所述邻接矩阵进行掩码操作具体方式如下:对程序语言文本中的15%的单词进行遮盖,在15%的遮盖单词中有80%使用[Mask]代替,有10%随机使用其他单词代替,有10%保持原样不变,对于四种邻接矩阵中20%的边进行遮盖;所述基于语义流图的程序语言缺陷定位模型包括基于程序语义流图的预训练模型、多层感知机映射、相似度计算;所述基于程序语义流图的预训练模型具体如下:将语义流图的变量节点、变量类型、变量角色、邻接矩阵、程序语言文本以及对应的自然语言描述输入到以Transformers模型的编码器堆叠的模型中,通过掩码进行自监督学习,以获取基于程序语义流图的预训练模型;所述基于程序语义流图的预训练模型具体如下:
,

,其中,表示文本输入与图结构输入之间的分割位置并将其放在输入的最后表示输入的结束,/>表示多头注意力机制用于优化输入文本的特征向量,/>表示归一化处理,/>表示特征向量拼接,/>用于获得输入的自然语言文本整体特征,/>表示代买描述文本,/>用于获得输入的程序语言文本整体特征,/>表示程序语言文本,/>用于获得输入的语义流图整体特征;/>放在变量类型输入的开头用于获得输入的变量类型整体特征;/>放在变量角色输入的开头用于获得输入的变量角色整体特征;FFN为前馈神经网络用于转换特征维度;/>表示语义流图变量节点,/>表示变量类型,/>表好似变量角色,/>表示模型输入,/>表示当前时刻,/>表示前一时刻;所述多层感知机映射方法具体如下:通过基于程序语义流图的预训练模型生成程序文本特征,使用BERT预训练模型获取错误信息文本特征:
,其中,表示错误信息文本,/>表示与错误信息有关程序语言文本,/>表示与错误信息无关程序语言文本,/>表示错误信息文本特征,/>表示与错误信息有关程序语言文本特征,/>表示与错误信息无关程序语言文本特征;将错误信息文本特征、与错误信息有关程序语言文本特征、与错误信息无关程序语言文本特征通过多层感知机映射到同一个空间:
&其中,、/>、/>表示将/>、/>、/>转变到同一特征向量空间的结果,/>、/>、/>、/>表示可学习的权重矩阵,用于突出特征向量中重要的特征以优化模型的性能,权重矩阵的下标b和c分别用于区分自然语言权重和程序语言权重,权重矩阵上标用于表明矩阵使用顺序,/>表示leaky_relu激活函数,norm表示对特征向量进行归一化操作。