知识嵌入的缺陷报告重构方法及装置与流程

文档序号:22042479发布日期:2020-08-28 18:17阅读:143来源:国知局
知识嵌入的缺陷报告重构方法及装置与流程

本发明属于软件工程领域,具体涉及软件缺陷领域,特别是一种知识嵌入的缺陷报告重构方法及装置。



背景技术:

软件缺陷是软件质量维护过程中所要解决的最严重的问题之一。每天有大量的缺陷被不断提交或重新打开,但是用户提交的缺陷报告往往缺失必要的信息,含有噪声甚至错误的信息,使得开发人员分析理解缺陷费时费力。目前,许多研究结合信息检索(ir)技术与各种文本特征提取方法,将新缺陷报告中的文本描述作为初始查询,根据相似度匹配自动搜索与之相关的历史缺陷文件来辅助理解新缺陷。但囿于新缺陷报告质量差,信息有限,往往无法获得满意的检索结果。针对这种情况,研究者主要采用两种方法来引入额外信息丰富查询:查询扩展和特征增强。但这两方法都直接将缺陷报告视作单词序列,额外信息也只以词或者特征向量的形式返回到原始查询中,忽视了缺陷报告中的语义信息,打断了内在结构关联,影响了检索的准确率。

在本发明之前,目前已有一些工作用来分析面向信息检索的缺陷重构技术。当无法返回所需的检索结果时,开发人员倾向于重构查询来重新进行检索,以提高检索效果。目前的查询重构方法主要分为三类:第一类为查询扩展,增加原始查询的相关信息。查询扩展是基于源代码检索的缺陷分析任务的最常见策略。研究者采用不同的方式选择可供扩展查询的额外信息,例如,shepherd等人选择外部知识库wordnet的本体,rahman等人筛选代码或其他软件文档中的共现术语,panichella等人从相关性或伪相关性反馈结果中筛选共现或者频繁出现的术语;第二类为查询替换,用一系列新的术语替换部分原始查询。查询替换主要用于跟踪链接恢复,gibiec等人从相似web和领域文档中选择一组候选术语来代替初始查询。另一个策略例如guo等人按照需求从常用术语跟踪语料库中抽取高频术语并将其用作新查询;第三类为查询删减,从原始查询中删除无用部分。chaparro等人从缺陷报告中删除噪声数据,只选用标题和描述中的重现语句作为查询。rahman等人采用了词共现和句法依存关系技术,以根据变更需求中最重要的词建立查询。kevic等人发现变更需求中的特定术语具有检索相关代码文档的最高预测能力。以上的查询重构方法均只从单词级别对原始查询进行了处理,并不能很好地改善检索效果。



技术实现要素:

本发明的目的在于克服上述现有技术存在的不足,提供一种基于缺陷知识图谱,采用深度学习融合多级信息嵌入重构缺陷报告的完整方法。

实现本发明目的的技术解决方案为:一种知识嵌入的缺陷报告重构方法,所述方法包括以下步骤:

步骤1,构建缺陷知识图谱;

步骤2,对新缺陷报告进行多级信息嵌入;

步骤3,融合多级信息嵌入结果实现重构所述新缺陷报告。

进一步地,步骤1所述构建缺陷知识图谱,具体过程包括:

步骤1-1,构建历史缺陷数据集bugset;

步骤1-2,识别集合bugset中的缺陷实体以及实体间的关系;

步骤1-3,将实体-关系-实体三元组存储至图数据库中,形成缺陷知识图谱;

步骤1-4,对缺陷知识图谱进行实体对齐和知识丰富;所述知识丰富包括增加共现实体、增加同义实体。

进一步地,步骤1-1所述构建历史缺陷数据集bugset,具体包括:

采集已修复的历史缺陷报告;

提取所述已修复的历史缺陷报告的标题、描述和分类信息,生成缺陷文档;

利用自然语言处理工具对所述缺陷文档进行数据清洗;

对数据清洗后的缺陷文档进行预处理,形成历史缺陷数据集bugset;所述预处理包括去除噪声、分句分词。

进一步地,步骤1-4中所述实体对齐包括:

对实体进行规范化处理,包括提取词干、转换大小写字母;

对实体进行相似度匹配。

进一步地,步骤1-4中所述共现实体通过pmi度量从集合bugset中筛选获得,所述同义实体从开放知识库conceptnet中筛选获得。

进一步地,步骤2所述多级信息嵌入包括:词嵌入、实体嵌入以及上下文嵌入。

进一步地,步骤2所述对新缺陷报告进行多级信息嵌入,包括:

步骤2-1,提取新缺陷报告中的标题和描述,进行合并后作为原始查询;

步骤2-2,利用自然语言处理工具对所述原始查询进行数据清洗,并对数据清洗后的原始查询进行预处理;所述预处理包括去除噪声、分句分词;

步骤2-3,进行词嵌入,包括:采用word2vec在历史缺陷数据集bugset上预训练词嵌入,获得查询的词嵌入矩阵;

步骤2-4,进行实体嵌入,包括:

识别所述原始查询中的缺陷实体;

依据实体链接从所述缺陷知识图谱中学习所述缺陷实体对应的实体嵌入,获得查询的实体嵌入矩阵;其中,链接失败对应的实体嵌入设为0;

步骤2-5,进行上下文嵌入,包括:根据步骤2-4中所述缺陷实体在缺陷知识图谱中对应的最近邻实体学习该缺陷实体的上下文嵌入,获得查询的上下文嵌入矩阵;

步骤2-6,利用激活函数将上述三级嵌入转换到相同的向量空间,即将上述三级嵌入矩阵转换为相同维度。

进一步地,步骤3所述融合多级信息嵌入结果实现重构所述新缺陷报告,具体包括:

步骤3-1,利用自注意机制模型对所述原始查询中的单词和实体赋予权重,将所述三级嵌入矩阵转换为三级特征化嵌入矩阵;

步骤3-2,利用cnn模型对所述三级特征化嵌入矩阵进行融合,获得新的查询,即实现新缺陷报告的重构。

一种知识嵌入的缺陷报告重构装置,包括:

存储器,用于存储程序;

处理器,用于运行所述程序;

其中,所述程序在所述处理器中运行时,用于执行以下步骤:

步骤1,构建缺陷知识图谱;

步骤2,对新缺陷报告进行多级信息嵌入;

步骤3,融合多级信息嵌入结果实现重构所述新缺陷报告。

本发明与现有技术相比,其显著优点包括:

1)从实体级别丰富查询信息:实体是知识的最小单元,是比单词更细粒度的信息。从实体级别重构查询,一方面大量历史缺陷数据被统一表示为实体-关系-实体三元组,便于组织、复用,引入原始查询;一方面从新缺陷报告描述中抽取实体,充分挖掘自身语义信息。具体地:

(1-1)本发明从开源项目的缺陷跟踪系统中选取已确认修复的历史缺陷报告,采用信息抽取技术自动识别缺陷知识,即缺陷实体和实体关系,并用图数据库neo4j进行存储和管理,构建缺陷知识图谱作为外部数据源。现有研究中,用来丰富新缺陷信息的外部数据源主要是软件文献、代码文件或者开放知识库,而非直属于软件缺陷领域,引入额外信息的同时也引入大量噪声。缺陷知识图谱是软件缺陷领域专用知识库,能针对查询提供大规模、高质量的可扩展缺陷信息。

(1-2)本发明以缺陷知识图谱作为外部数据源,供原始查询扩展的缺陷信息是更加细粒度的知识(即实体与关系)而非术语(即单词)。现有技术是从单词级别,匹配查询中的关键词来进行扩展,会引入不相关或者不准确的信息。本发明首先识别查询中的实体,即查询中最重要的部分,通过实体链接技术,综合匹配实体和属性来确定扩展对象,实现精准扩展。

(1-3)缺陷报告并非一般的自然语言文本,含有大量的短语、短句、非规范性用词、专业词汇等等。单词和单词之间存在着非常紧密的语义联系,不单单是句法依存关系。本发明采用信息抽取技术从新缺陷报告中抽取缺陷实体和实体关系,保留了内部的结构特征和语义信息。

2)融合多级嵌入表示查询:采用深度学习,融合内外多级信息嵌入,生成独立缺陷表示,直接作为多种缺陷分析模型输入。具体地:

(2-1)本发明采用翻译模型transe学习知识图谱中的实体嵌入和关系嵌入。在此基础上,以嵌入形式(embedding)将外部数据源中的历史缺陷信息引入原始查询,无需繁杂的人工特征工程,提高系统的计算效率。同时不仅从知识图谱中获取实体嵌入(entityembedding),还从目标实体的关联实体中获取上下文嵌入(contextembedding),为每个实体提供了更全面、更丰富的信息。

(2-2)本发明采用自注意力机制识别出查询中的更重要的单词和实体,进一步放大了查询内部的结构特征。采用cnn模型融合多级信息嵌入,保留查询结构,将缺陷表示为一个独立嵌入向量。在基于信息检索的缺陷分析任务中,该缺陷嵌入可直接作为匹配模型输入,易于计算缺陷之间的相似度。

下面结合附图对本发明作进一步详细描述。

附图说明

图1为一个实施例中知识嵌入的缺陷报告重构方法流程图。

图2为一个实施例中构建的缺陷知识图谱示意图。

图3为一个实施例中定义的实体上下文示意图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅用以解释本申请,并不用于限定本申请。

在一个实施例中,结合图1,提供了一种知识嵌入的缺陷报告重构方法,该方法包括以下步骤:

步骤1,构建缺陷知识图谱;

步骤2,对新缺陷报告进行多级信息嵌入;

步骤3,融合多级信息嵌入结果实现重构所述新缺陷报告。

进一步地,在其中一个实施例中,步骤1中构建缺陷知识图谱,具体过程包括:

步骤1-1,构建历史缺陷数据集bugset;

步骤1-2,识别集合bugset中的缺陷实体以及实体间的关系;

这里,采用命名实体识别技术自动识别缺陷实体。

步骤1-3,将实体-关系-实体三元组存储至图数据库中,形成缺陷知识图谱;

这里,图数据库采用neo4j。

步骤1-4,对缺陷知识图谱进行实体对齐和知识丰富;该知识丰富包括增加共现实体、增加同义实体。

进一步地,在其中一个实施例中,步骤1-1中构建历史缺陷数据集bugset,具体包括:

采集已修复的历史缺陷报告;

这里,可以从开源项目mozilla的缺陷跟踪系统中采集已确认修复的历史缺陷报告。

提取所述已修复的历史缺陷报告的标题、描述和分类信息,生成缺陷文档;

利用自然语言处理工具对所述缺陷文档进行数据清洗;

这里,数据清洗包括删除链接,代码片段和xml标记等。

对数据清洗后的缺陷文档进行预处理,形成历史缺陷数据集bugset;所述预处理包括去除噪声、分句分词。

进一步地,在其中一个实施例中,步骤1-4中实体对齐包括:

对实体进行规范化处理,包括提取词干、转换大小写字母;

这里,利用nltk工具对实体进行规范化处理。

对实体进行相似度匹配。

进一步地,在其中一个实施例中,步骤1-4中的共现实体通过pmi度量从集合bugset中筛选获得,同义实体从开放知识库conceptnet中筛选获得。

进一步地,在其中一个实施例中,步骤2中多级信息嵌入包括:词嵌入、实体嵌入以及上下文嵌入。

进一步地,在其中一个实施例中,步骤2中对新缺陷报告进行多级信息嵌入,包括:

步骤2-1,提取新缺陷报告中的标题和描述,进行合并后作为原始查询;

步骤2-2,利用自然语言处理工具对所述原始查询进行数据清洗,并对数据清洗后的原始查询进行预处理;所述预处理包括去除噪声、分句分词;

步骤2-3,进行词嵌入,包括:采用word2vec在历史缺陷数据集bugset上预训练词嵌入,获得查询的词嵌入矩阵;

步骤2-4,进行实体嵌入,包括:

识别所述原始查询中的缺陷实体;

依据实体链接从所述缺陷知识图谱中学习所述缺陷实体对应的实体嵌入,获得查询的实体嵌入矩阵;其中,链接失败对应的实体嵌入设为0;

步骤2-5,进行上下文嵌入,包括:根据步骤2-4中所述缺陷实体在缺陷知识图谱中对应的最近邻实体学习该缺陷实体的上下文嵌入,获得查询的上下文嵌入矩阵;

步骤2-6,利用激活函数将上述三级嵌入转换到相同的向量空间,即将上述三级嵌入矩阵转换为相同维度。

进一步地,在其中一个实施例中,步骤3中融合多级信息嵌入结果实现重构所述新缺陷报告,具体包括:

步骤3-1,利用自注意机制模型对所述原始查询中的单词和实体赋予权重,将所述三级嵌入矩阵转换为三级特征化嵌入矩阵;

具体地,分别利用三组自注意机制模型对所述词嵌入、实体嵌入、上下文嵌入赋予权重,将所述三级嵌入矩阵转换为三级特征化嵌入矩阵。

步骤3-2,利用cnn模型对所述三级特征化嵌入矩阵进行融合,获得新的查询,即实现新缺陷报告的重构。

这里具体地,是将三级特征化嵌入矩阵分别送到cnn模型的三通道进行融合。

作为一种具体示例,对本发明的知识嵌入的缺陷报告重构方法进行进一步说明,具体包括:

步骤1)首先从开源项目mozilla的缺陷跟踪系统中,选取已确认修复的历史缺陷报告,如下表1所示,提取其标题和描述合并为缺陷文档,使用自然语言处理工具包(nltk)对缺陷文档进行数据清洗,例如删除链接,代码片段和xml标记等。对文档进一步分句分词,每个文档都被转换为一系列的token。这些预处理后的缺陷文档构成历史缺陷数据集bugset。

表1缺陷文档示例

定义缺陷实体为两种类型:缺陷类实体和文本类实体。每一个缺陷报告是一个缺陷类实体实例,如图2中的浅色圆形标识,实体值为其缺陷id,实体属性为缺陷报告中的分类信息,如表1中的component、product等等。每个缺陷报告的缺陷文档中含有许多文本类实体,描述了缺陷症状,如图2中深色圆形标识,实体值为字符串,实体属性为其描述缺陷所属组件类型。使用bilstm-crf模型自动识别bugset中的文本类实体(表1的缺陷文档中以粗体标示),抽取文本类实体之间的关系,并以实体-关系-实体的三元组形式存储在图数据库neo4j中,构建缺陷知识图谱如图2所示,定义为g=(e,r),实体e为节点,关系r为边。

采用nltk工具对知识图谱中的文本类实体值进行规范化处理,使用snowballstemmer提取词干,truecase转换大小写字母,采用最小编辑距离和jacard算法计算文本类实体值和实体类别相似度完成实体对齐。采用pmi度量(pointwisemutualinformation)从bugset中筛选top5共现文本类实体,从开放知识库conceptnet中筛选top3同义文本类实体来丰富知识图谱。

步骤2)抽取新缺陷报告中的标题和描述合并为原始查询文档q,使用nltk对查询文档进行数据清洗并分词为单词序列q={w1,w2,…,wn},n为文档长度。采用word2vec在bugset上预训练词嵌入(wordembedding),获得查询的词嵌矩阵qw=[w1,w2,…,wn]∈rd×n,d为词嵌维度。

采用翻译算法学习步骤1缺陷知识图谱中的实体表示,使用bilstm-crf模型自动识别查询文档中的文本类实体。通过实体链接,即计算查询中的文本类实体指代和知识图谱中的候选文本类实体值相似度,从步骤1构建的缺陷知识图谱中学习对应的实体嵌入(entityembedding),获得查询的实体嵌入矩阵qe=[e1,e2,…,en]∈rk×n,k为实体嵌入维度。链接失败的实体嵌入设为0。

如图3所示,定义实体的上下文为知识图谱中实体与其最近邻实体:缺陷类实体context(e')和文本类实体context(e”)构成的子图。根据相邻实体嵌入计算实体的上下文嵌入获得查询的上下文嵌入矩阵qc=[c1,c2,…,cn]∈rk×n,k为上下文嵌入维度,同实体嵌入维度。

为使三级嵌入保持相同的维度,采用激活函数tanh函数将实体嵌入和上下文嵌入的维度k转换为与词嵌相同的维度d,如下:

g(ei)=tanh(mei+b)m∈rd×kb∈rd×1

g(qe)=[g(e1)g(e2)…g(en)]

g(qc)=[g(c1)g(c2)…g(cn)]

至此,查询被表示为三级嵌入矩阵。

3)分别通过三组自注意机制(self-attentionmechanism)模型对原始查询中的单词和实体赋予权重,将步骤2中获得的三级嵌入矩阵转换为三级特征化嵌入矩阵,以词嵌矩阵为例,过程如下:

首先通过全连接层传递词嵌矩阵qw,使用tanh函数将其激活,以获得新的词嵌矩阵xw=qwws2tanh(ws1qw+b')∈rn×n,ws1,ws2,b'为参数。然后使用softmax函数来处理矩阵xw的每一行,以形成自注意矩阵aw,其中每个元素词嵌wi根据其在查询文档中的重要性被赋予权重,转换为特征化词嵌同理,实体嵌入ei被转换为特征化实体嵌入上下文嵌入ci被转换为特征化上下文嵌入

将经过自注意力层处理得到的三级特征化嵌入矩阵分别送入cnn模型的三个通道,形成输入矩阵w=[[tw1te1tc1][tw2te2tc2]…[twntentcn]]∈rd×n×3。卷积层应用多个滤波器h∈rd×l×3(不同窗口大小l),从输入矩阵中提取特定的局部特征池化层采用max-over-timepooling从卷积层输出的多个局部特征中提取最大值池化层的输出通过全连接的方式生成查询的最终表示m为滤波器数量。

在一个实施例中,提供了一种知识嵌入的缺陷报告重构装置,包括:

存储器,用于存储程序;

处理器,用于运行所述程序;

其中,所述程序在所述处理器中运行时,用于执行以下步骤:

步骤1,构建缺陷知识图谱;

步骤2,对新缺陷报告进行多级信息嵌入;

步骤3,融合多级信息嵌入结果实现重构所述新缺陷报告。

这里,对每一个步骤的具体限定参照上述对知识嵌入的缺陷报告重构方法的限定,在此不再赘述。

本发明提出的知识嵌入的缺陷报告重构方法,使用多级嵌入,融合原始数据内部的语义知识和额外历史缺陷知识,生成一个统一的缺陷嵌入来表示查询。不同的软件项目都可以参照本发明提出的方法,将信息检索和信息抽取技术相结合,一方面抽取历史缺陷数据,转化为统一的知识表示,进行系统化的组织管理便于复用;另一方面对待修复的新缺陷,从细粒度的实体级别引入背景知识进行重构,极大丰富查询信息量,提高缺陷检索的准确率。同时重构后的缺陷嵌入向量可直接作为匹配模型输入,广泛适于多种基于信息检索的缺陷分析任务。

以上显示和描述了本发明的基本原理、主要特征及优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1