CN107562919A - 一种基于信息检索的多索引集成软件构件检索方法及系统 - Google Patents
一种基于信息检索的多索引集成软件构件检索方法及系统 Download PDFInfo
- Publication number
- CN107562919A CN107562919A CN201710820002.9A CN201710820002A CN107562919A CN 107562919 A CN107562919 A CN 107562919A CN 201710820002 A CN201710820002 A CN 201710820002A CN 107562919 A CN107562919 A CN 107562919A
- Authority
- CN
- China
- Prior art keywords
- source code
- similarity
- retrieval
- index
- speech
- 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.)
- Granted
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明属于软件构件检索领域,公开了一种基于信息检索的多索引集成软件构件检索方法及系统,本发明引入词性过滤对软件源代码关键词进行预处理,通过对特定词性词汇的过滤,在缩减索引空间内源代码向量的稀疏性的同时,提高了相似性计算的准确度,提升了软件构件检索的性能。本发明构件检索是建立在索引空间内的相似度计算基础之上的。本发明提出了一种集成“词袋”模型索引与词嵌入模型索引的相似性计算方法,该方法以源代码构件自身结构的“内聚度”和“耦合度”作为评价指标,将“词袋”模型索引方法与词嵌入模型索引方法所计算出的相似度进行集成,获得了更为精确的相似性度量,从而获得更为精准的构件检索结果。
Description
技术领域
本发明属于软件构件检索领域,尤其涉及一种基于信息检索的多索引集成软件构件检索方法及系统。
背景技术
目前,由于软件构件库规模的日益增长,如何快速地从现有软件构件库中检索出需要的源代码构件,成为了当前各软件公司、构件库平台亟待解决的问题。
软件构件是软件系统中实际存在的可更换部分,它实现特定的软件功能,符合一套接口标准并实现一组接口。软件构件检索是指,建立需求功能与构件库中软件构件源代码实体之间的映射关系。随着软件行业的爆炸式增长,软件系统规模、开发成本呈大幅度增长态势,几乎所有软件公司都构件了自己的构件库,以期通过软件复用的方式提高构件的重用性,降低软件开发成本。同时,也出现了以GitHub、Source Forge等为代表的开源软件构件库,这些构件库内存储了巨量可供软件开发人员复用的软件构件,为软件开发人员提供了极为丰富的构件资源。软件构件检索技术是提高软件源代码可重用性,降低软件开发和维护成本的重要方法。在当前软件构件库大规模环境下,如何快速、精确的从软件构件库中检索出软件开发、维护人员所需求的软件构件成为了一个亟待解决的关键问题。
现有技术中,1992年提出了最早的构件检索方法——软件侦测(SoftwareReconnaissance),经过20多年的发展,当前软件构件检索技术根据输入数据的不同大致分为四类:静态方法(Static Method)、动态方法(Dynamic Method)、文本方法(TextualMethod)和混合方法(Hybrid Method)。
由于具有高易用性、强扩展性和低开销等优点,成为了当前构件检索领域研究的热点。由于实现方式最为直观,因此现有文本方法多基于信息检索技术实现。
现有基于信息检索的软件构件检索技术方案基本流程大致相似,包含四个基本步骤:预处理、语料向量化、计算查询向量、获取结果。
1、预处理。包含提取关键词、分词、词根还原和去除停用词4部分。根据所需粒度(类、方法等),提取构件实体(源代码)中的关键词,为每一个构件实体建立一个代码文档。分词操作将连续的字符串按照一定的特殊字符(例如:驼峰命名法)或规则拆分成若干独立的单词。词根还原将意义相近的同源词和同一个关键词的不同形态进行归并,例如:inserting还原成为insert。去除停用词操作删除代码中停词表记录的词。例如源代码中的数字、关冠词、不定冠词、单个字母等。预处理的好坏将决定源代码语料中关键词的多寡,并最终影响索引算法输出向量维度的大小以及稀疏性等。
2、索引。将经过预处理的语料转换为索引空间内的数值化向量形式,即将语料转化为矩阵M,第i个代码文档对应矩阵中第i个列向量mi。用户提交自然语言构成的查询语句Q用于描述待检索构件,将预处理后的Q转化为索引空间内向量q。
3、获取结果。计算源代码构件向量mi与查询语句向量q之间的相似性,并按照相似度进行将序排列。相似性通常使用距离的形式进行表达。距离越近则相似度越高,认为该构件源代码与需求符合的可能性越大。设定阈值h,将与查询向量q之间相似度大于h的源代码向量{m1,m2,…,mn}作为构件检索的输出结果。
围绕基于信息检索的构件检索基本步骤,各国学者开了很多研究工作:
1、预处理大多使用成熟的自然语言处理技术实现。分词采用等工具实现;停用词表大多使用自然语言处理成熟的停词表,例如现有技术提供的停词表;词干还原大多采用。上述工作均假设分词、词根还原、去除停用词三种操作能够提高构件检索的准确性。
语料中关键字的多寡将影响后续索引代码语料和查询语句向量的维度和稀疏性,维度和稀疏性对构件检索技术中相似性的计算具有重要意义。现有构件检索技术直接引用传统信息检索领域中的预处理方式,无法对构件源代码数据中的噪声数据(无语义信息词汇)进行有效识别和过滤,在经过预处理后语料库仍保留了数量庞大的关键词。例如:相关文献对仅有531个类的jEdit 4.3进行预处理后保留下来的关键词仍多达10915个。因此,现有基于信息检索的构件检索方法对语料库的预处理仍存有一定可提升空间。
2、语料库及查询语句的索引是整个信息检索的构件检索过程中最为关键的步骤,同时也是研究成果最为集中的部分。自2004年Marcus等人使用Latent Semantic Indexing(LSI)实现构件检索以来,研究成果相继涌现。Poshyvanyk提出了形式化概念分析方法(Formal Concept Analysis)、Cleary和Exton将错误报告(Bug Issues)、邮件列表(Mailing Lists)、外部文档等非代码数据与代码数据同时作为输入,在某些环境下提升了构件检索的准确性。Lukins应用Latent Dirichlet Allocation(LDA)进行索引,且与基于LSI的构件检索方法进行了比对。
初期研究选择LSI进行构件检索,其原因在于源代码是一种特殊的自然语言,LSI能够解决代码中关键词的同义词问题,同时能够大幅压缩索引后向量的维数。同时,LSI进行索引不需要知道构造代码的语法规则,即领域知识。LDA与LSI具有相似功能,但由于LDA具有较为优秀的数学模型,因此其定位性能略优于LSI。无论LSI还是LDA均是一种基于“词袋”模型的索引方法。该类模型的优点在于计算简单,无需太多领域知识协助。但“词袋”模型建立于无序性假设(Exchangeability)基础上,认为源代码中的关键词是独立同分布,关键词的上下文对其不产生影响。
2015年Corley基于词嵌入模型,应用深度学习方法(doc2vec)进行了构件检索研究,并在实验中取得了优于LDA的定位效果。基于词嵌入模型的索引方法,不但压缩了源代码向量的维数,并且记录了关键词之间的上下文关系。该类模型对文本进行索引时,以词汇间的共现关系为主要依据,最为经典的例子是可根据词汇共现关系推测出“king-queen=man-woman”。但此类模型涉及大规模的参数调优问题,如向量维数、训练窗口数、采样阈值、学习速率、聚类个数等等,均对程序员有较高的领域知识和经验知识要求。与传统文本不同,源代码数据格式较为特殊,其构成并不遵循严格的语法结构,词汇共现关系并不完全等价于语义上的相似。
当前,实现高效的基于信息检索的构件检索技术有两个难点:
1、减少构件源代码语料中噪声数据。除蕴含功能语义信息的关键词外,源代码中还存在大量的无语义词汇噪声。噪声数据的存在不仅导致相似性计算的失准问题,还易造成其他问题。例如,由于软件系统整体规模庞大,单个构件源代码(类、方法)内代码量较短,导致索引后的源代码库整体向量维度变大,造成索引空间内的高维度、低稀疏问题。以仅含有531个类的jEdit为例,在共计含有10915个源代码关键词的情况下,其单个构件(Class)内含有的关键词仅为几十至几百个单词不等。现有基于信息检索的构件检索技术通过停用词表方式对源代码中噪声数据进行过滤,但过滤性能并不理想。
2、在最大程度保持构件源代码语义信息的前提下实现索引。基于信息检索的软件构件检索方法均依赖于一个假设:基于构件源代码文本的语义信息可对源代码与需求之间的相似性进行建模。源代码中的标识符、注释等关键词蕴含了与软件功能需求相关的语义信息。开发人员使用自然语言对需求进行描述,这个描述被称作查询语句(Query),基于信息检索的构件检索技术通过计算查询语句与构件源代码关键词之间语义上的相似性,可识别需求与构件之间的映射关系。需求与构件间相似性的计算是在索引空间内完成的,当前研究大多采用现有信息检索方法实现构件源代码到索引空间内向量的转化。由于构件源代码和查询语句也是一种文本数据,因此并不需要对信息检索方法进行太多的修改就可以实现源代码索引。当前索引方法可以分为两类:基于“词袋”模型(Bag of word)的索引方法和基于词嵌入模型(Word Embedding)的索引方法。基于“词袋”模型的方法优点在于计算简单、对单独词汇信息保持较完整,但其假设源代码中关键词是独立同分布的,没有上下文信息。词嵌入模型是近年新兴的索引方法,此类方法能够有效刻画源代码关键词的上下文信息,但该方法涉及大规模参数调优。参数取值对该方法的性能优劣起到决定性作用,参数的选择严重依赖于开发人员的领域知识和经验知识。同时,词嵌入模型非常强调词汇上下文关系,但源代码数据格式的特殊性导致其语法结构并不十分严格,因此在构件检索问题中单纯依赖词汇上下文关系刻画源代码之间的相似性也是不完备的。
综上所述,现有技术存在的问题是:
很难快速、精确的从软件构件库中检索出软件开发和维护工作所需求的构件,主要存在两个缺陷:
1、源代码关键词中的噪声数据造成的检索误差,当前技术缺乏一种有效的方法对源代码关键词中存在的大量噪声数据(无语义信息词汇)进行过滤;
2、现有基于信息检索的构件检索技术均是基于单一索引方法实现的,导致性能上各有优劣:基于“词袋”模型索引实现的构件检索方法在对构件源代码数值转换时无法记录关键词的上下文关系;而基于词嵌入模型实现的构件检索方法单纯只以词汇间共现关系刻画构件源代码,易失去独立词汇信息,这种方式是不完备的。现有技术均不能精确刻画构件源代码与需求查询之间的相似性。
发明内容
针对现有技术存在的问题,本发明提供了一种基于信息检索的多索引集成软件构件检索方法及系统。
本发明是这样实现的,一种基于信息检索的多索引集成软件构件检索方法,包括:
在预处理步骤引入词性过滤对构件源代码关键词进行处理;通过对特定词性词汇的过滤,缩减索引空间内向量的稀疏性;
利用集成“词袋”模型与词嵌入模型进行相似性计算;以构件源代码数据自身结构的内聚度和耦合度作为评价指标,将“词袋”模型索引方法与词嵌入模型索引方法所计算出的相似度进行集成,使不同索引模型优势互补,获得相似性度量;生成构件检索结果。
进一步,所述词性过滤仅保留语料库中的名词、名词性词组、动词、动词性词组、形容词、形容词性词组、副词及副词词组成分作为关键词,建立基于词性的关键词筛选方法,降低关键词的数量;具体包括:
初始化存储结果用的集合Dc为空,同时定义另一个集合T={tag1,tag2,…,tagn}用于标记每个关键词的词性;T中的元素与Da中的元素存在一一对应关系,Da中关键词wi对应于T中的tagi,由于Da中共有n个源代码关键词,T的元素个数也为n;
先对T中的所有元素进行初始化,将其初始值设为null;
识别Da中每个源代码关键词wi的词性,并将识别的结果存储于对应的tagi,函数posTaging(wi)的返回值为集合post={tn,tpron,tadj,tnum,tv,tadv,tart,tprep,tconj,tinterj}中的一个元素,词性的标注通过人工标注,或者使用相关工具处理包实现;
检查T中的每一个元素tagi,若tagi∈postin={tn,tadj,tv,tadv},则将对应的wi插入到结果集合Dc中;
最后返回结果Dc;
其中,输入为所有构件源代码关键词集合Da以及蕴含语义知识的词性集合postin,输出为过滤掉不蕴含语义知识词性关键词后的语料库Dc;
源代码语料库Da是所有源代码关键词w的集合Da={w1,w2,…,wi,…,wn},其中wi代表语料库中的第i个源代码关键词,该语料库共由n个源代码关键词组成;
词性是由10个元所组成的集合post={tn,tpron,tadj,tnum,tv,tadv,tart,tprep,tconj,tinterj},其中tn,tpron,tadj,tnum,tv,tadv,tart,tprep,tconj,tinterj分别代表词性:名词、代词、形容词、数词、副词、冠词、介词、连词和感叹词;Da与post存在映射关系o’:(w1,w2,…,wn)→t=o’(Da),t为集合post中的元;蕴含语义知识的词性为集合postin={tn,tadj,tv,tadv}。
进一步,所述相似性计算,包括:
在语料库经过预处理后,分别使用基于词袋模型和基于词嵌入模型的索引方法对构件源代码语料库和需求查询语句进行索引;
在两个索引空间内分别计算出需求查询向量与每个构件源代码向量的余弦相似度,则得到两个索引空间内的两个相似度集合,分别记为Sim1和Sim2,则有其中代表在第p个索引空间内需求查询向量与第i个构件源代码向量的相似度;
基于“词袋”模型和词嵌入模型两种索引方法生成的构件源代码语料向量集分别为D1和D2,内向量按源代码模块类簇被分为k类, 其中代表第p个索引空间内第j个模块类簇内向量的集合。
进一步,所述相似性计算具体包括:
对所使用变量进行初始化;
分别计算两种索引空间内模块类簇的内距之和;计算方式如下:
模块类簇的内距intraDis为位于同一个模块类簇内所有源代码间的距离之和;
其中为第j个模块类簇内n个代码间距离之和;
分别计算两种索引空间内模块类簇间的外距之和;计算方式如下:
模块类簇间的外距exterDis为所有模块类簇重心点间的距离之和;为m个模块间距离和,其中为某模块类簇的重心,其中cj为模块内的代码向量。
分别计算距离进行线性组合时所用参数ω1和ω2;计算方式如下:
使用参数对两个向量空间内计算出的相似度距离进行线性组合,并求出最终相似度;计算方式如下:
最后,返回检索结果;
其中,在构件库内,具有相似或相关的构件源代码被放置在同一个模块内,每个模块称为一个模块类簇。例如:在面向对象软件系统中,一个包(package)是一群类(class)组成的模块类簇;在结构化软件系统中,一个源代码文件是一群函数(function)组成的模块类簇。一个软件系统是由多个模块类簇组成的。
本发明的另一目的在于提供一种基于信息检索的多索引集成软件构件检索系统。
本发明的优点及积极效果为:
本发明引入词性过滤对软件源代码关键词进行预处理,通过对特定词性词汇的过滤,在缩减索引空间内源代码向量的稀疏性的同时,提高了相似性计算的准确度,提升了软件构件检索的性能。本发明构件检索是建立在索引空间内的相似度计算基础之上的,本发明提出了一种集成“词袋”模型索引与词嵌入模型索引的相似性计算方法,该方法以源代码构件自身结构的“内聚度”和“耦合度”作为评价指标,将“词袋”模型索引方法与词嵌入模型索引方法所计算出的相似度进行集成,获得了更为精确的相似性度量,从而获得更为精准的构件检索结果。
使用本发明方法在开源软件系统Eclipse上进行了测试,测试的版本为Eclipse4.3。同时,分别使用两个信息检索领域常用的停用词表对源代码关键词进行预处理;只进行词性过滤或只进行去停用词,检索性能均无法达到最优。MRR性能最优的定位结果出现于既进行去停用词,又进行词性过滤时,分别为0.044106346和0.037886129。至此,本发明方法在预处理步骤引入词性过滤,可有效提升MRR性能,最低提升了29.9%。
现有技术单一索引进行构件检索和本发明集索引进行构件检索的MRR性能区别中,其中TFIDF、LSI、LDA是“词袋”模型方法,Doc2vec是词嵌入模型方法,Our Approach是本发明方法。LSI与LDA效果最差。在性能最高的三种方法中:TFIDF索引方式获得的结果为0.031211201,Doc2vec索引方式为0.044106346,而本发明的方法获得的结果为0.054707296。本发明方法获得了最优的MRR性能,与TFIDF相比提高了75.28%,与Doc2vec相比提高了24.03%。因此,本发明的构件检索方法通过索引的集成,最低可带来24.03%的MRR性能提升。
附图说明
图1是本发明实施例提供的基于信息检索的多索引集成软件构件检索方法流程图。
图2是本发明实施例提供的基于信息检索的多索引集成软件构件检索系统示意图。
图3是本发明实施例提供的与模块类簇相关距离定义图。
图4是本发明实施例提供的词性过滤前后向量在索引空间中的分布图。
图中:(a)、词性过滤前向量分布;(b)、词性过滤后向量分布。
图5是本发明实施例提供的源代码模块模块类簇在不同向量空间内的分布图。
图中:(a)、软件系统结构上的源代码模块类簇结构分布;(b)、索引空间1内源代码模块类簇分布;(c)、索引空间2内源代码模块类簇分布。
图6是本发明实施例提供的词性过滤前后定位性能对比图。
图7是本发明实施例提供的不同相似度计算方法定位结果MRR性能图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
下面结合附图及具体实施例对本发明的应用原理作进一步描述。
如图1所示,本发明实施例提供的基于信息检索的多索引集成软件构件检索方法,包括:
S101:提出基于词性标注的构件源代码语料降噪方法。在预处理步骤引入词性过滤对构件源代码关键词进行处理。通过对特定词性词汇的过滤,在缩减索引空间内向量的稀疏性的同时,提高后续相似性计算的准确度,提升基于信息检索的构件检索技术性能。
S102:提出了一种集成“词袋”模型与词嵌入模型的相似性计算方法,该方法以构件源代码数据自身结构的“内聚度”和“耦合度”作为评价指标,将“词袋”模型索引方法与词嵌入模型索引方法所计算出的相似度进行集成,使不同索引模型成优势互补,获得更为精确的相似性度量,从而提升构件检索的精确程度。
下面结合具体实施例对本发明作进一步描述。
在现有基于信息检索的软件构件检索技术框架基础上,本发明实施例提供的基于信息检索的多索引集成软件构件检索系统如图2中黑色四边形所示。预处理步骤,在去除停用词后引入了词性过滤,以进一步过滤源代码关键词中的噪声信息,提高后续相似性计算的准确性。构建语料库后,索引步骤分别使用基于“词袋”模型的索引方法和基于词嵌入模型的索引方法对源代码进行索引,并在各自索引空间内计算出相似度。然后,以构件源代码内部模块的“内聚度”和“耦合度”作为评价指标,将两种索引空间内所计算的相似度进行集成,计算出最终相似度。最终,以集成的相似度作为构件与需求之间的相似性度量,生成构件检索结果。
1、词性过滤
本专利在预处理步骤引入词性过滤,仅保留语料库中的名词、名词性词组、动词、动词性词组、形容词、形容词性词组、副词及副词词组成分作为关键词,建立基于词性的关键词筛选方法,降低关键词的数量。
定义1源代码语料库Da是所有源代码关键词w的集合Da={w1,w2,…,wi,…,wn},其中wi代表语料库中的第i个源代码关键词,该语料库共由n个源代码关键词组成。
定义2词性是由10个元所组成的集合post={tn,tpron,tadj,tnum,tv,tadv,tart,tprep,tconj,tinterj},其中tn,tpron,tadj,tnum,tv,tadv,tart,tprep,tconj,tinterj分别代表词性:名词、代词、形容词、数词、副词、冠词、介词、连词和感叹词。Da与post存在映射关系o′:(w1,w2,…,wn)→t=o′(Da),t为集合post中的元。蕴含语义知识的词性为集合postin={tn,tadj,tv,tadv}。
算法1详细描述了词性过滤的计算过程。
算法输入为所有构件源代码关键词集合Da以及蕴含语义知识的词性集合postin,输出为过滤掉不蕴含语义知识词性关键词后的语料库Dc。第1行初始化存储结果用的集合Dc为空,同时定义另一个集合T={tag1,tag2,…,tagn}用于标记每个关键词的词性。T中的元素与Da中的元素存在一一对应关系,即Da中关键词wi对应于T中的tagi,由于Da中共有n个源代码关键词,因此T的元素个数也为n。第2-4行先对T中的所有元素进行初始化,将其初始值设为null。第5-7行识别Da中每个源代码关键词wi的词性,并将识别的结果存储于对应的tagi,这里函数posTaging(wi)的返回值为集合post={tn,tpron,tadj,tnum,tv,tadv,tart,tprep,tconj,tinterj}中的一个元素,词性的标注可通过人工标注,或者使用相关工具,如Python环境下的NLTK等自然语言处理包实现。第8-9行检查T中的每一个元素tagi,若tagi∈postin={tn,tadj,tv,tadv},则将对应的wi插入到结果集合Dc中。最后14行返回结果Dc。
2、多索引集成的构件检索相似性计算
基于信息检索的构件检索,核心在于量化地计算构件源代码向量与需求查询向量间的相似性。向量间的相似问题均可使用距离的观点进行定义、度量或推导。现有基于信息检索的构件检索技术在将构件源代码语料库和需求查询语句进行向量化索引后,以索引空间内构件源代码向量与需求查询向量之间的距离作为度量,描述两者的相似性。由于不同模型的索引方法在进行向量转化时,具有其特定优势和局限性,在此基础上计算出的向量间距离并不能充分刻画向量间的相似性。因此,比较自然的想法是将不同索引空间内的相似性度量(即距离)结果进行集成,充分利用不同索引方法的优势特性,获得更为精确的相似性计算结果。
本发明实施例提供的多索引集成的构件检索相似性计算实现方案如下:
定义3在构件库内,具有相似或相关的构件源代码被放置在同一个模块内,每个模块称为一个模块类簇。一个软件系统是由多个模块类簇组成的。
例如,在面向对象软件的构件库中,一个包(Package)是一群类(Class)的模块类簇。在结构化软件系统中,单个源代码文件可以理解为是由一群函数(Function)组成的模块类簇。
定义4模块类簇的内距intraDis是指位于同一个模块类簇内所有源代码间的距离之和。
其中刻画了第j个模块类簇内n个代码间距离之和。
定义5模块类簇间的外距exterDis是指所有模块类簇重心点间的距离之和。刻画了m个模块间距离和,其中为某模块类簇的重心,其中cj为模块内的代码向量。
图3示例了构件库中的两个模块类簇,图中圆点和十字符号分别代表两个模块类簇内的构件。每个构件即为一个类(Class)或方法(Method),每个多边形框内所有的构件构成一个模块类簇,这样的一个模块类簇可以是一个包(Package),也可以是一个文件夹。模块类簇1中虚线标示了模块类簇内两个源代码之间的距离,模块类簇1的内距即为其内部所有构件间的距离之和;实心三角和实心正方形分别代表了两个模块类簇的重心,其间的距离即为两个模块类簇的外距。
本发明相似性计算过程如下:在语料库经过预处理后,分别使用基于“词袋”模型和基于词嵌入模型的索引方法对构件源代码语料库和需求查询语句进行索引。在两个索引空间内分别计算出需求查询向量与每个构件源代码向量的余弦相似度,则可得到两个索引空间内的两个相似度集合,分别记为Sim1和Sim2,则有其中代表在第p个索引空间内需求查询向量与第i个构件源代码向量的相似度。两种索引方法生成的构件源代码语料向量集分别为D1和D2,其内向量按源代码模块类簇被分为了k类, 其中代表第p个索引空间内第j个模块类簇内向量的集合。
在此基础之上,本发明提出相似性算法的详细计算过程如下:
输入:Sim1,Sim2,D1,D2;
输出:查询语句与各源代码的相似度集合Simint;
算法第1步对本中所使用变量进行初始化。第2-7步分别计算两种索引空间内模块类簇的内距之和,第8-14步分别计算两种索引空间内模块类簇间的外距之和。第15步分别计算距离进行线性组合时所用参数ω1和ω2。第16-17步使用参数对两个向量空间内计算出的相似度距离进行线性组合,并求出最终相似度。第19步返回结果。
本发明实施例提供的基于信息检索的多索引集成软件构件检索方法,词性过滤作为预处理的关键步骤,对构件源代码关键词中的噪声数据进行过滤;
以多个索引模型对语料进行索引,在多索引的基础上进行检索(包含索引建立后的相似性计算方法),从而提升检索的精确度。
下面结合积极效果对本发明作进一步描述。
1、词性过滤
良性源代码的编写需要遵循一些基本原则,其中最为重要的是所有变量名、类名、方法名等均需要使用有意义的名称,这样通过其名称能够大概反映出其具体用途,以提高源代码的可读性。原则中所指的“有意义”即蕴含“语义知识”的意思。源代码中语义知识通常是通过名词、动词、形容词和副词四种词性的关键词表达的。作为功能实体被执行时,源代码中的名词表述了对应的功能实体在执行过程中被调用的“对象”(变量、类、方法等),动词表述了对这些“对象”执行的“动作”,形容词表述了这些“对象”有什么样的“特点”,而副词表述了“如何”对这些“对象”进行“动作”。因此,这四类词性词汇在源代码关键词中可被认为是源代码语义知识的主要载体,故在词性过滤算法中只予以保留这四类词汇。
假定存在由三个构件所组成的语料库D={Class1,Class2,Class3},其中每个向量对应于源代码中的一个类(Class)。图4表示了该语料库在词性过滤前后进行文本向量化,向量在空间中的分布情况。有色圆代表蕴含功能语义信息的词性单词,无底色圆代表不含功能语义信息的词性词。向量Class1与向量Class2间的夹角为α,向量Class2与向量Class3间的夹角为β。从图4.(a)中可看出,由于不含功能语义信息词性单词的干扰,导致向量重心的偏移,此时α大于β,以余弦距离作为向量间相似度定义,则有Sim{Class1,Class2}>Sim{Class2,Class3}。对源代码进行词性过滤后,其向量化表示如图4.(b)所示,因不含功能语义信息单词被过滤,向量重心发生变化,从而有Sim{Class1,Class2}<Sim{Class2,Class3}。从两图变化可知,噪声词汇可干扰索引空间内向量的分布情况,进而导致相似性计算的偏差。因此,在源代码预处理步骤中引入词性过滤,充分降低源代码中噪声词汇对相似度计算的干扰,对提高构件检索的准确性具有重要意义。
2、多索引集成的构件检索相似性计算
若干距离的线性组合依然是一个距离,因此针对任意一对构件源代码向量mi和需求查询语句向量q,两者间相似度可以描述成为不同索引空间中距离的线性组合,即其中dk(mi,q)表示第k种距离计算方法。该问题的核心是寻找参数ωk,使相似性刻画最优。
假设有一个软件系统,该软件系统由两个源代码模块类簇内的多个构件源代码组成。软件系统结构上的模块类簇分布应为图5.(a)所示,实心圆点代表模块类簇1中的构件,十字符号代表模块类簇2中的构件。不同模块的构件根据“高类聚、低耦合”原则,被规整地置于两个模块类簇中。分别使用两种不同的索引方法5.(a)中构件的源代码进行索引,其向量在相应索引空间内的分布分别如图5.(b)和图5.(c)所示。对比图5.(b)与图5.(c),可发现图5.(b)索引空间1内源代码向量分布更接近于图5.(a)源代码结构上的分布,其内所有构件源代码均被明显的分隔于两个模块类簇内。而图5.(c)索引空间2内的构件源代码则分布相对较为混沌,两个模块类簇内源代码分布出现了较大重叠区域。此时,可认为索引方法1对于构件源代码的转换更为贴近构件源代码本身结构,则其所计算出的相似性度量(距离)更为合理,在线性组合时应予以较高权值。而索引方法2则反之。基于这种思想,可以用模块类簇的外距和内距对不同索引方法生成的向量空间进行合理性度量,从而计算出优化的距离加权参数ωk。
软件系统的内聚耦合程度可用模块类簇的外距与内距之商Dis进行度量,即索引方法生成的索引空间内模块类簇外距与内距之商Dis越大,则可认为在该空间内计算出的向量间相似度更接近于软件结构本身,此时的距离分布更为合理。故可用该度量计算距离线性组合的参数ωk,Dis越大的索引空间所计算出的距离给予高权值ωk,反之给予低权值。由于距离的线性组合过程是一种相对加权,因此各加权参数需同时满足约束
下面结合积极效果对本发明作进一步描述。
使用本发明方法在开源软件系统Eclipse上进行了测试,测试的版本为Eclipse4.3。同时,分别使用两个信息检索领域常用的停用词表对源代码关键词进行预处理,分别记为停用词表1和停用词表2。为量化地比较本发明方法带来的技术效果,使用信息检索领域常用的平均排序倒数(Mean Reciprocal Rank,MRR)对本发明技术和传统技术进行对比,平均排序倒数计算公式如下:
词性标注为本发明方法带来的技术优势如图6所示。All Source Code为未做去停用词,也未进行词性过滤的结果,POS tagging为只做词性标注的结果,Stop word1和Stopword2为只使用词性过滤的结果。SW 1&POS tagging为在停用词表1的基础上进行词性过滤的结果,SW 2&POS tagging为在停用词表2的基础上进行词性过滤的结果。从图中可看出,只进行词性过滤或只进行去停用词,检索性能均无法达到最优。MRR性能最优的定位结果出现于既进行去停用词,又进行词性过滤时,分别为0.044106346和0.037886129。至此,本发明方法在预处理步骤引入词性过滤,可有效提升MRR性能,最低提升了29.9%。
图7记录了现有技术单一索引进行构件检索和本发明集索引进行构件检索的MRR性能区别,其中TFIDF、LSI、LDA是“词袋”模型方法,Doc2vec是词嵌入模型方法,OurApproach是本发明方法。LSI与LDA效果最差。
在性能最高的三种方法中:TFIDF索引方式获得的结果为0.031211201,Doc2vec索引方式为0.044106346,而本发明的方法获得的结果为0.054707296。本发明方法获得了最优的MRR性能,与TFIDF相比提高了75.28%,与Doc2vec相比提高了24.03%。因此,本发明的构件检索方法通过索引的集成,最低可带来24.03%的MRR性能提升。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (5)
1.一种基于信息检索的多索引集成软件构件检索方法,其特征在于,所述基于信息检索的多索引集成软件构件检索方法,包括:
在预处理步骤引入词性过滤对构件源代码关键词进行处理;通过对特定词性词汇的过滤,缩减索引空间内向量的稀疏性;
利用集成词袋模型与词嵌入模型进行相似性计算;以构件源代码数据自身结构的内聚度和耦合度作为评价指标,将词袋模型索引方法与词嵌入模型索引方法所计算出的相似度进行集成,使不同索引模型优势互补,获得相似性度量;生成构件检索结果。
2.如权利要求1所述的基于信息检索的多索引集成软件构件检索方法,其特征在于,所述词性过滤仅保留语料库中的名词、名词性词组、动词、动词性词组、形容词、形容词性词组、副词及副词词组成分作为关键词,建立基于词性的关键词筛选方法,降低关键词的数量;具体包括:
初始化存储结果用的集合Dc为空,同时定义另一个集合T={tag1,tag2,…,tagn}用于标记每个关键词的词性;T中的元素与Da中的元素存在一一对应关系,Da中关键词wi对应于T中的tagi,由于Da中共有n个源代码关键词,T的元素个数也为n;
先对T中的所有元素进行初始化,将其初始值设为null;
识别Da中每个源代码关键词wi的词性,并将识别的结果存储于对应的tagi,函数posTaging(wi)的返回值为集合post={tn,tpron,tadj,tnum,tv,tadv,tart,tprep,tconj,tinterj}中的一个元素,词性的标注通过人工标注,或者使用相关工具处理包实现;
检查T中的每一个元素tagi,若tagi∈postin={tn,tadj,tv,tadv},则将对应的wi插入到结果集合Dc中;
最后返回结果Dc;
其中,输入为所有构件源代码关键词集合Da以及蕴含语义知识的词性集合postin,输出为过滤掉不蕴含语义知识词性关键词后的语料库Dc;
源代码语料库Da是所有源代码关键词w的集合Da={w1,w2,…,wi,…,wn},其中wi代表语料库中的第i个源代码关键词,该语料库共由n个源代码关键词组成;
词性是由10个元所组成的集合post={tn,tpron,tadj,tnum,tv,tadv,tart,tprep,tconj,tinterj},其中tn,tpron,tadj,tnum,tv,tadv,tart,tprep,tconj,tinterj分别代表词性:名词、代词、形容词、数词、副词、冠词、介词、连词和感叹词;Da与post存在映射关系o′:(w1,w2,…,wn)→t=o′(Da),t为集合post中的元;蕴含语义知识的词性为集合postin={tn,tadj,tv,tadv}。
3.如权利要求1所述的基于信息检索的多索引集成软件构件检索方法,其特征在于,所述相似性计算,包括:
在语料库经过预处理后,分别使用基于词袋模型和基于词嵌入模型的索引方法对构件源代码语料库和需求查询语句进行索引;
在两个索引空间内分别计算出需求查询向量与每个构件源代码向量的余弦相似度,则得到两个索引空间内的两个相似度集合,分别记为Sim1和Sim2,则有其中代表在第p个索引空间内需求查询向量与第i个构件源代码向量的相似度;
基于词袋模型和词嵌入模型两种索引方法生成的构件源代码语料向量集分别为D1和D2,内向量按源代码模块类簇被分为k类,其中代表第p个索引空间内第j个模块类簇内向量的集合。
4.如权利要求1所述的基于信息检索的多索引集成软件构件检索方法,其特征在于,所述相似性计算具体包括:
对所使用变量进行初始化;
分别计算两种索引空间内模块类簇的内距之和;计算方式如下:
模块类簇的内距intraDis为位于同一个模块类簇内所有源代码间的距离之和;
其中为第j个模块类簇内n个代码间距离之和;
分别计算两种索引空间内模块类簇间的外距之和;计算方式如下:
模块类簇间的外距exterDis为所有模块类簇重心点间的距离之和;为m个模块间距离和,其中为某模块类簇的重心,其中cj为模块内的代码向量;
分别计算距离进行线性组合时所用参数ω1和ω2;计算方式如下:
<mrow>
<msub>
<mi>&omega;</mi>
<mn>1</mn>
</msub>
<mo>=</mo>
<mfrac>
<mrow>
<mo>(</mo>
<msub>
<mi>exterDis</mi>
<mn>1</mn>
</msub>
<mo>/</mo>
<msub>
<mi>interDis</mi>
<mn>1</mn>
</msub>
<mo>)</mo>
</mrow>
<mrow>
<mo>(</mo>
<msub>
<mi>exterDis</mi>
<mn>1</mn>
</msub>
<mo>/</mo>
<msub>
<mi>interDis</mi>
<mn>1</mn>
</msub>
<mo>)</mo>
<mo>+</mo>
<mo>(</mo>
<msub>
<mi>exterDis</mi>
<mn>2</mn>
</msub>
<mo>/</mo>
<msub>
<mi>interDis</mi>
<mn>2</mn>
</msub>
<mo>)</mo>
</mrow>
</mfrac>
<mo>,</mo>
<msub>
<mi>&omega;</mi>
<mn>2</mn>
</msub>
<mo>=</mo>
<mfrac>
<mrow>
<mo>(</mo>
<msub>
<mi>exterDis</mi>
<mn>2</mn>
</msub>
<mo>/</mo>
<msub>
<mi>interDis</mi>
<mn>2</mn>
</msub>
<mo>)</mo>
</mrow>
<mrow>
<mo>(</mo>
<msub>
<mi>exterDis</mi>
<mn>1</mn>
</msub>
<mo>/</mo>
<msub>
<mi>interDis</mi>
<mn>1</mn>
</msub>
<mo>)</mo>
<mo>+</mo>
<mo>(</mo>
<msub>
<mi>exterDis</mi>
<mn>2</mn>
</msub>
<mo>/</mo>
<msub>
<mi>interDis</mi>
<mn>2</mn>
</msub>
<mo>)</mo>
</mrow>
</mfrac>
<mo>;</mo>
</mrow>
使用参数对两个向量空间内计算出的相似度距离进行线性组合,并求出最终相似度;计算方式如下:
<mrow>
<mi>d</mi>
<mrow>
<mo>(</mo>
<msub>
<mi>m</mi>
<mi>i</mi>
</msub>
<mo>,</mo>
<mi>q</mi>
<mo>)</mo>
</mrow>
<mo>=</mo>
<munderover>
<mo>&Sigma;</mo>
<mrow>
<mi>k</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mi>p</mi>
</munderover>
<msub>
<mi>&omega;</mi>
<mi>k</mi>
</msub>
<mo>&CenterDot;</mo>
<msub>
<mi>d</mi>
<mi>k</mi>
</msub>
<mrow>
<mo>(</mo>
<msub>
<mi>m</mi>
<mi>i</mi>
</msub>
<mo>,</mo>
<mi>q</mi>
<mo>)</mo>
</mrow>
</mrow>
最后,返回检索结果。
5.一种如权利要求1所述基于信息检索的多索引集成软件构件检索方法的基于信息检索的多索引集成软件构件检索系统。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710820002.9A CN107562919B (zh) | 2017-09-13 | 2017-09-13 | 一种基于信息检索的多索引集成软件构件检索方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710820002.9A CN107562919B (zh) | 2017-09-13 | 2017-09-13 | 一种基于信息检索的多索引集成软件构件检索方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107562919A true CN107562919A (zh) | 2018-01-09 |
CN107562919B CN107562919B (zh) | 2020-07-17 |
Family
ID=60980865
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710820002.9A Active CN107562919B (zh) | 2017-09-13 | 2017-09-13 | 一种基于信息检索的多索引集成软件构件检索方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107562919B (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108717574A (zh) * | 2018-03-26 | 2018-10-30 | 浙江大学 | 一种基于连词标记和强化学习的自然语言推理方法 |
CN109284379A (zh) * | 2018-09-21 | 2019-01-29 | 福州大学 | 基于双向量模型的自适应微博话题追踪方法 |
CN109669942A (zh) * | 2018-11-29 | 2019-04-23 | 杭州仟金顶信息科技有限公司 | 一种java代码结构化检索方法 |
CN110231955A (zh) * | 2019-05-13 | 2019-09-13 | 平安科技(深圳)有限公司 | 代码处理方法、装置、计算机设备和存储介质 |
CN111159223A (zh) * | 2019-12-31 | 2020-05-15 | 武汉大学 | 一种基于结构化嵌入的交互式代码搜索方法及装置 |
CN113743096A (zh) * | 2020-05-27 | 2021-12-03 | 南京大学 | 一种基于自然语言处理的众包测试报告相似度检测的方法 |
US11422798B2 (en) | 2020-02-26 | 2022-08-23 | International Business Machines Corporation | Context-based word embedding for programming artifacts |
CN116153089A (zh) * | 2023-04-24 | 2023-05-23 | 云南大学 | 基于时空卷积与动态图的交通流量预测系统及方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102819575B (zh) * | 2012-07-20 | 2015-06-17 | 南京大学 | 一种用于Web服务推荐的个性化搜索方法 |
CN103064969A (zh) * | 2012-12-31 | 2013-04-24 | 武汉传神信息技术有限公司 | 自动建立关键词索引表的方法 |
CN106202206B (zh) * | 2016-06-28 | 2020-02-14 | 哈尔滨工程大学 | 一种基于软件聚类的源码功能搜索方法 |
CN106372187B (zh) * | 2016-08-31 | 2019-12-17 | 中译语通科技股份有限公司 | 一种面向大数据的跨语言检索方法 |
CN106599086A (zh) * | 2016-11-25 | 2017-04-26 | 山东科技大学 | 一种基于Gaussian LDA和词嵌入的语义稀疏Web服务发现方法 |
-
2017
- 2017-09-13 CN CN201710820002.9A patent/CN107562919B/zh active Active
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108717574A (zh) * | 2018-03-26 | 2018-10-30 | 浙江大学 | 一种基于连词标记和强化学习的自然语言推理方法 |
CN108717574B (zh) * | 2018-03-26 | 2021-09-21 | 浙江大学 | 一种基于连词标记和强化学习的自然语言推理方法 |
CN109284379A (zh) * | 2018-09-21 | 2019-01-29 | 福州大学 | 基于双向量模型的自适应微博话题追踪方法 |
CN109284379B (zh) * | 2018-09-21 | 2022-01-04 | 福州大学 | 基于双向量模型的自适应微博话题追踪方法 |
CN109669942A (zh) * | 2018-11-29 | 2019-04-23 | 杭州仟金顶信息科技有限公司 | 一种java代码结构化检索方法 |
CN110231955A (zh) * | 2019-05-13 | 2019-09-13 | 平安科技(深圳)有限公司 | 代码处理方法、装置、计算机设备和存储介质 |
CN110231955B (zh) * | 2019-05-13 | 2024-05-07 | 平安科技(深圳)有限公司 | 代码处理方法、装置、计算机设备和存储介质 |
CN111159223A (zh) * | 2019-12-31 | 2020-05-15 | 武汉大学 | 一种基于结构化嵌入的交互式代码搜索方法及装置 |
CN111159223B (zh) * | 2019-12-31 | 2021-09-03 | 武汉大学 | 一种基于结构化嵌入的交互式代码搜索方法及装置 |
US11422798B2 (en) | 2020-02-26 | 2022-08-23 | International Business Machines Corporation | Context-based word embedding for programming artifacts |
CN113743096A (zh) * | 2020-05-27 | 2021-12-03 | 南京大学 | 一种基于自然语言处理的众包测试报告相似度检测的方法 |
CN116153089A (zh) * | 2023-04-24 | 2023-05-23 | 云南大学 | 基于时空卷积与动态图的交通流量预测系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN107562919B (zh) | 2020-07-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107562919B (zh) | 一种基于信息检索的多索引集成软件构件检索方法及系统 | |
CN111104794B (zh) | 一种基于主题词的文本相似度匹配方法 | |
US8005858B1 (en) | Method and apparatus to link to a related document | |
CN104361127B (zh) | 基于领域本体和模板逻辑的多语种问答接口快速构成方法 | |
EP3534272A1 (en) | Natural language question answering systems | |
CN105095204B (zh) | 同义词的获取方法及装置 | |
Korhonen | Subcategorization acquisition | |
Han et al. | Automatic document metadata extraction using support vector machines | |
JP5936698B2 (ja) | 単語意味関係抽出装置 | |
EP1883026A1 (en) | Reference resolution for text enrichment and normalization in mining mixed data | |
JP2005526317A (ja) | ドキュメントコーパスからコンセプト階層構造を自動に捜索する方法及びシステム | |
US20070112720A1 (en) | Two stage search | |
CN111061882A (zh) | 一种知识图谱构建方法 | |
CN114254653A (zh) | 一种科技项目文本语义抽取与表示分析方法 | |
US20210350125A1 (en) | System for searching natural language documents | |
Hussein | Arabic document similarity analysis using n-grams and singular value decomposition | |
CN114997288A (zh) | 一种设计资源关联方法 | |
CN111859858A (zh) | 从文本中提取关系的方法及装置 | |
Rogushina | Use of Semantic Similarity Estimates for Unstructured Data Analysis. | |
Sun | A natural language interface for querying graph databases | |
Mannai et al. | Information extraction approaches: A survey | |
US20220207240A1 (en) | System and method for analyzing similarity of natural language data | |
CN109815996B (zh) | 一种基于循环神经网络的场景自适配方法及装置 | |
CN111078947B (zh) | 基于xml的领域要素提取配置语言系统 | |
Ramachandran et al. | Document Clustering Using Keyword Extraction |
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 |