CN110688312A - 一种基于Transformer的软件缺陷预测方法 - Google Patents

一种基于Transformer的软件缺陷预测方法 Download PDF

Info

Publication number
CN110688312A
CN110688312A CN201910915073.6A CN201910915073A CN110688312A CN 110688312 A CN110688312 A CN 110688312A CN 201910915073 A CN201910915073 A CN 201910915073A CN 110688312 A CN110688312 A CN 110688312A
Authority
CN
China
Prior art keywords
vector
layer
transformer
self
softmax
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
Application number
CN201910915073.6A
Other languages
English (en)
Inventor
冯落落
李锐
于治楼
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shandong Inspur Artificial Intelligence Research Institute Co Ltd
Original Assignee
Shandong Inspur Artificial Intelligence Research Institute Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shandong Inspur Artificial Intelligence Research Institute Co Ltd filed Critical Shandong Inspur Artificial Intelligence Research Institute Co Ltd
Priority to CN201910915073.6A priority Critical patent/CN110688312A/zh
Publication of CN110688312A publication Critical patent/CN110688312A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明提供一种基于Transformer的软件缺陷预测方法,属于软件缺陷预测技术领域,本发明使用Transformer中的Encoder阶段,然后在编码阶段的最后一个时间步介入到一个二分类的softmax层进行预测。可以很好的帮助测试人员进行软件测试,大大减少公司在软件测试上的人力和物力消耗。

Description

一种基于Transformer的软件缺陷预测方法
技术领域
本发明涉及软件缺陷预测技术,尤其涉及一种基于Transformer的软件缺陷预测方法。
背景技术
软件缺陷在工业界和学术界,也被称为软件故障或软件错误等。NASA对软件缺陷的定义是:软件无法完成预期指定的功能。软件缺陷在软件开发过程中不可避免产生,根据微软研究院调查发现,每个应用软件在内部测试的时候平均1000行代码会存在10到20个软件缺陷,在已经发布的软件产品中,每1000行代码会存在0.5个软件缺陷。因此如何帮助测试人员更快更早地发现软件中的缺陷变得更加重要。但是为了修复已经发布软件产品中的一个软件缺陷,将花费50到200倍的成本。
软件缺陷预测就是为了帮助测试人员进行缺陷测试,发现源代码文件中潜在的软件缺陷,从而更好分配人力、物力进行缺陷修复。由于NLP技术的快速发展,例如文本分类、舆情分析等都获得了很快的发展,Transformer模型由Google在2018年提出,成功的应用到NLP的各种任务中。Transformer的提出可以有效的解决传统RNN模型,例如LSTM、Bi-LSTM模型,不能并行的训练。除此之外Transformer是由self-Attention机制,成功有效的解决模型无法上下文长期依赖问题。
如何利用机器学习方法来构建软件缺陷预测模型,因为机器学习技术在缺陷预测中已经证实获得比其他模型更好的效果。缺陷预测预测过程即假定已知一个样本空间X,有N个样本构成,样本空间中的单个样本表示为x(i),x(i)={a1,a2,...,ak}即为一个k维的向量,aj表示一个属性的具体取值。对于监督学习学习而言,必须有一个标签Y,令Y={y1,y2,...yc},c表示标签类别的个数。对于软件缺陷问题,c的大小为2,也就是一个二分类问题,当标签为0时,预测的模块中不含有软件缺陷,不然当标签为1时,预测的模块中含有软件缺陷。采用监督的机器学习构建模型时,训练集中的每一个实例用(x(i),y(i))标记,即每一个样本既包含数据的特征又包含具体类别标签。监督学习模型的目标就是通过学习算法η学习一个函数假设h=f(x),然后使用训练得到的函数假设h对需要预测的数据进行预测。
发明内容
为了解决以上技术问题,本发明提出了一种基于Transformer的软件缺陷预测方法,可以很好的捕捉程序的上下文信息,除此之外,可以进行并行训练,大大减小训练时间。
本发明的技术方案是:
一种基于Transformer的软件缺陷预测方法,使用Transformer中的Encoder阶段,然后在编码阶段的最后一个时间步介入到一个二分类的softmax层进行预测。
主要包括
(1)构建抽象语法树;
抽象语法树作为程序的一种中间表示形式,利用抽象语法树实现一种以上源程序处理工具。
(2)Transformer网络架构。
包括如下步骤:
1)给定一个Java源文件的标记;
2)然后和对应的位置编码信息进行连接;
3)然后这里进行self-attention操作;这里使用一个以上的self-attention操作,从而获得一个Multi-Head Attention,然后和这一层的输入进行一个Add操作;
加上一个Layer Normalization操作,然后加上一层前向网络,使用全连接网络,然后对全连接层也进行Layer Normalization;
然后把这一层的所有输出进行一个concate连接操作,连接后的向量与输出层进行连接,判断是否是有缺陷。
进一步的,具体的步骤如下所述:
(1)首先借助BugInfo工具对每个Java源文件进行打标签;
(2)利用Python中的Javalang工具包,把对应的Java源文件解析成抽象语法树,并且抽取语法树中相应的控制节点、函数调用节点、实例创建节点,形成一个以空格为分隔符的单词文件;
(3)然后利用gensim中的Word2vec模型,把单词进行向量化,最终把每个单词向量化为一个50维的词向量;
(4)然后利用Transformer算法,借助Java源文件的标记向量进行模型训练,然后把每个向量对应位置编码进行相加,最终获的最后的词向量;
(5)使用self-attention操作,获得一个Multi-Head Attention;
所述self-attention操作,为了获得查询向量q、键向量k、值向量v,这里分别使用词嵌入和三个矩阵WQ,WK,WV相乘。然后使用每个查询向量q和所有的键向量k分别进行向量点乘分别获得对应的打分,然后把分数都除以8,获得数值,然后进行softmax操作,获得softmax值。然后利用softmax值和对应的值向相乘,相乘之后进行相加,分别获得对应的求和z。实现multi-head需要使用一个以上的self-attention操作。
(6)通过上步获得的Multi-Head Attention和对应的词向量进行相加,然后在进行layer-normalization操作,获得向量a。然后对向量a进行一个全连接层,或者a2,然后把a对应相加,然后在进行layer-normalization操作,获得向量a2,然后把向量a2与输出层softmax层进行向量,判断该Java文件是否是包含缺陷。
本发明的有益效果是
Transformer作为一个新的序列模型,并且像CNN一样可以进行并行训练,这样可以大大减少模型训练的时间,并且在长期依赖上也和LSTM模型相媲美。大有取代传统RNN序列模型的趋势,并且广泛的应用于NLP各个任务当中,刷新他们的新的高度。
附图说明
图1是抽象语法树的构建示意图;
图2是Transformer网络架构示意图;
图3是self-attention操作示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明利用Transformer模型对Java源文件进行缺陷预测。Transformer可以很好的利用文章的上下文信息,相比较传统的RNN训练模型,Transformer可以更好捕捉文本上的长期依赖的问题。RNN相比较CNN,训练速度非常的慢,因为CNN可以进行并行训练,RNN则不能,Transformer可以用于并行训练。在不降低训练精度的同时,大大缩减了训练时间。
主要包括:
(1)抽象语法树的构建
如图1所示,抽象语法树作为程序的一种中间表示形式,在程序分析等诸多领域有广泛的应用。利用抽象语法树可以方便地实现多种源程序处理工具,比如源程序浏览器、智能编辑器等。
(2)Transformer网络架构
为了更加详细展示本文中的算法进行缺陷预测,结合示例图2讲解该算法的具体过程,本文只使用图三中的编码部分,也就是左边部分。给定一个Java源文件的标记例如为[FOR,add,remove,while…],其中标记中的每个单词为一个k维的向量xi∈Rk,其中i表示第i个单词。然后和对应的位置编码信息进行连接,其中
Figure BDA0002215875560000051
表示简单的连接操作。然后这里进行所谓的self-attention操作。为了获得更加丰富的信息,这里使用多个self-attention操作,从而获得一个Multi-Head Attention,然后和这一层的输入进行一个Add操作。为了提高模型的训练速度和预防梯度迷失现象的出现,加上一个Layer Normalization操作。然后加上一层前向网络,本文使用的是全连接网络,然后对全连接层也进行LayerNormalization。然后把这一层的所有输出进行一个concate连接操作,连接后的向量与输出层进行连接,判断是否是有缺陷。
具体的步骤如下所述:
(1)首先借助BugInfo工具对每个Java源文件进行打标签。
(2)利用Python中的Javalang工具包,把对应的Java源文件解析成抽象语法树。并且抽取语法树中相应的控制节点、函数调用节点、实例创建节点等,形成一个以空格为分隔符的单词文件。
(3)然后利用gensim中的Word2vec模型,把单词进行向量化,最终把每个单词向量化为一个50维的词向量。
(4)然后利用Transformer算法,借助Java源文件的标记向量进行模型训练,如[x1,x2,x3],然后把每个向量对应位置编码进行相加,最终获的最后的词向量表示x。
(5)为了实现更好实现上下文依赖,本文使用self-attention操作,具体操作如图3所示,为了获得q、k、v,这里分别使用词嵌入x和三个矩阵WQ,WK,WV相乘。然后使用每个q和所有的k分别进行向量点乘分别获得对应的打分,如图中的112和96。然后把分数都除以8,获得14和96。然后进行softmax操作,获得0.88,和0.12。然后利用softmax值和对应的v相乘,相乘之后进行相加,分别获得对应的z。为了实现multi-head,使用多个self-attention操作。
(6)通过上步获得的z,和对应的x进行相加,然后在进行layer-normalization操作,获得向量a。然后对向量a进行一个全连接层,或者a2,然后把a对应相加,然后在进行layer-normalization操作,获得向量a2,然后把向量a2与输出层softmax层进行向量,判断该Java文件是否是包含缺陷。
以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

Claims (8)

1.一种基于Transformer的软件缺陷预测方法,其特征在于,
使用Transformer中的Encoder阶段,然后在编码阶段的最后一个时间步介入到一个二分类的softmax层进行预测。
2.根据权利要求1所述的方法,其特征在于,
主要包括
(1)构建抽象语法树;
(2)Transformer网络架构。
3.根据权利要求2所述的方法,其特征在于,
抽象语法树作为程序的一种中间表示形式,利用抽象语法树实现一种以上源程序处理工具。
4.根据权利要求3所述的方法,其特征在于,
所述Transformer网络架构,包括如下步骤:
1)给定一个Java源文件的标记;
2)然后和对应的位置编码信息进行连接;
3)然后这里进行self-attention操作;这里使用一个以上的self-attention操作,从而获得一个Multi-Head Attention,然后和这一层的输入进行一个Add操作。
5.根据权利要求4所述的方法,其特征在于,
加上一个Layer Normalization操作,然后加上一层前向网络,使用全连接网络,然后对全连接层也进行Layer Normalization;
然后把这一层的所有输出进行一个concate连接操作,连接后的向量与输出层进行连接,判断是否是有缺陷。
6.根据权利要求5所述的方法,其特征在于,
具体的步骤如下所述:
(1)首先借助BugInfo工具对每个Java源文件进行打标签;
(2)利用Python中的Javalang工具包,把对应的Java源文件解析成抽象语法树,并且抽取语法树中相应的控制节点、函数调用节点、实例创建节点,形成一个以空格为分隔符的单词文件;
(3)然后利用gensim中的Word2vec模型,把单词进行向量化,最终把每个单词向量化为一个50维的词向量;
(4)然后利用Transformer算法,借助Java源文件的标记向量进行模型训练,然后把每个向量对应位置编码进行相加,最终获的最后的词向量;
(5)使用self-attention操作,获得一个Multi-Head Attention;
(6)通过上步获得的Multi-Head Attention和对应的词向量进行相加,然后在进行layer-normalization操作,获得向量a。然后对向量a进行一个全连接层,或者a2,然后把a对应相加,然后在进行layer-normalization操作,获得向量a2,然后把向量a2与输出层softmax层进行向量,判断该Java文件是否是包含缺陷。
7.根据权利要求6所述的方法,其特征在于,
所述self-attention操作,为了获得查询向量q、键向量k、值向量v,这里分别使用词嵌入和三个矩阵WQ,WK,WV相乘。然后使用每个查询向量q和所有的键向量k分别进行向量点乘分别获得对应的打分,然后把分数都除以8,获得数值,然后进行softmax操作,获得softmax值。然后利用softmax值和对应的值向相乘,相乘之后进行相加,分别获得对应的求和z。
8.根据权利要求7所述的方法,其特征在于,
实现multi-head需要使用一个以上的self-attention操作。
CN201910915073.6A 2019-09-26 2019-09-26 一种基于Transformer的软件缺陷预测方法 Pending CN110688312A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910915073.6A CN110688312A (zh) 2019-09-26 2019-09-26 一种基于Transformer的软件缺陷预测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910915073.6A CN110688312A (zh) 2019-09-26 2019-09-26 一种基于Transformer的软件缺陷预测方法

Publications (1)

Publication Number Publication Date
CN110688312A true CN110688312A (zh) 2020-01-14

Family

ID=69110255

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910915073.6A Pending CN110688312A (zh) 2019-09-26 2019-09-26 一种基于Transformer的软件缺陷预测方法

Country Status (1)

Country Link
CN (1) CN110688312A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111858323A (zh) * 2020-07-11 2020-10-30 南京工业大学 一种基于代码表示学习的即时软件缺陷预测方法
CN112035345A (zh) * 2020-08-20 2020-12-04 国家电网有限公司信息通信分公司 一种基于代码片段分析的混合深度缺陷预测方法
CN114529507A (zh) * 2021-12-30 2022-05-24 广西慧云信息技术有限公司 一种基于视觉Transformer的刨花板表面缺陷检测方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110083826A (zh) * 2019-03-21 2019-08-02 昆明理工大学 一种基于Transformer模型的老汉双语对齐方法
CN110188926A (zh) * 2019-05-10 2019-08-30 重庆天蓬网络有限公司 一种订单信息预测系统和方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110083826A (zh) * 2019-03-21 2019-08-02 昆明理工大学 一种基于Transformer模型的老汉双语对齐方法
CN110188926A (zh) * 2019-05-10 2019-08-30 重庆天蓬网络有限公司 一种订单信息预测系统和方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
于悦: "基于程序语义的软件缺陷预测技术研究与实现", 《中国优秀硕士学位论文全文数据库》 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111858323A (zh) * 2020-07-11 2020-10-30 南京工业大学 一种基于代码表示学习的即时软件缺陷预测方法
CN111858323B (zh) * 2020-07-11 2021-06-01 南京工业大学 一种基于代码表示学习的即时软件缺陷预测方法
CN112035345A (zh) * 2020-08-20 2020-12-04 国家电网有限公司信息通信分公司 一种基于代码片段分析的混合深度缺陷预测方法
CN114529507A (zh) * 2021-12-30 2022-05-24 广西慧云信息技术有限公司 一种基于视觉Transformer的刨花板表面缺陷检测方法
CN114529507B (zh) * 2021-12-30 2024-05-17 广西慧云信息技术有限公司 一种基于视觉Transformer的刨花板表面缺陷检测方法

Similar Documents

Publication Publication Date Title
WO2020093761A1 (zh) 一种面向软件缺陷知识的实体、关系联合抽取方法
CN110673840B (zh) 一种基于标签图嵌入技术的自动代码生成方法及系统
CN110688312A (zh) 一种基于Transformer的软件缺陷预测方法
CN113191148B (zh) 一种基于半监督学习和聚类的轨道交通实体识别方法
CN109471793A (zh) 一种基于深度学习的网页自动化测试缺陷定位方法
CN113486178B (zh) 文本识别模型训练方法、文本识别方法、装置以及介质
CN114185769A (zh) 基于双向长短期记忆神经网络的软件缺陷预测方法及终端
CN116661805B (zh) 代码表示的生成方法和装置、存储介质及电子设备
CN117236677A (zh) 一种基于事件抽取的rpa流程挖掘方法及装置
CN117215935A (zh) 一种基于多维度代码联合图表示的软件缺陷预测方法
CN113591093A (zh) 基于自注意力机制的工业软件漏洞检测方法
CN111160387B (zh) 一种基于多视角字典学习的图模型
CN113076421B (zh) 一种社交噪音文本实体关系抽取优化方法及系统
CN113870846A (zh) 基于人工智能的语音识别方法、装置及存储介质
CN112148879B (zh) 一种自动给代码打数据结构标签的计算机可读存储介质
CN115408506B (zh) 联合语义解析和语义成分匹配的nl2sql的方法
CN113342982B (zh) 融合RoBERTa和外部知识库的企业行业分类方法
CN116362247A (zh) 一种基于mrc框架的实体抽取方法
CN115859989A (zh) 基于远程监督的实体识别方法及系统
CN113361259B (zh) 一种服务流程抽取方法
CN115204179A (zh) 基于电网公共数据模型的实体关系预测的方法及装置
CN114297408A (zh) 一种基于级联二进制标注框架的关系三元组抽取方法
CN113886602A (zh) 一种基于多粒度认知的领域知识库实体识别方法
CN117274464B (zh) 基于元宇宙的数据渲染方法、装置及设备
CN114490928B (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
RJ01 Rejection of invention patent application after publication

Application publication date: 20200114