从文字嵌入到文档相似性对软件中的信息检索的改进

上传人:新** 文档编号:490905591 上传时间:2022-12-20 格式:DOCX 页数:15 大小:734.97KB
返回 下载 相关 举报
从文字嵌入到文档相似性对软件中的信息检索的改进_第1页
第1页 / 共15页
从文字嵌入到文档相似性对软件中的信息检索的改进_第2页
第2页 / 共15页
从文字嵌入到文档相似性对软件中的信息检索的改进_第3页
第3页 / 共15页
从文字嵌入到文档相似性对软件中的信息检索的改进_第4页
第4页 / 共15页
从文字嵌入到文档相似性对软件中的信息检索的改进_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《从文字嵌入到文档相似性对软件中的信息检索的改进》由会员分享,可在线阅读,更多相关《从文字嵌入到文档相似性对软件中的信息检索的改进(15页珍藏版)》请在金锄头文库上搜索。

1、软件工程中从单词嵌入到文档相似度来优化信息检索摘要软件工程中,信息检索技术的应用正在因为词汇空缺变得困难,查询的问题,通常用自然语言例如英语来表达;检索到的文档,通常用代码例如编程语言来表达。往往是这些情况:bug 和功能定位,公共问答系统,或者专业的软件项目技术人员和非技术的股东之间的交流。在本文中,我们提出通过将自然语言的语句和代码片断构建成在一个共享的表示空间有意义的向量来弥合词汇空缺。在提出的架构中,单词嵌入首先面向API文档,教程和参考文档,然后汇总来评估文档之间的语义相似性。实证评价说明学习了向量空间嵌入有助于改良先前探讨的bug定位工作和新定义的将API文件和计算机编程问题关联在

2、一起的工作。CCS概念信息系统-多语言和跨语言检索-相似度检测;排序学习;软件与工程-软件测试和调试;计算方法- 词汇语义学;关键词单词嵌入, 跳过-gram模型, 本地化错误, 错误报告, API 文檔1.简介和动机最近,文本检索方法已被应用到支持超过20软件工程SE的任务11,24。在这些方法中,用户的问题和代码之间的词汇空缺27通常被视为严重的障碍。在特征定位和错误定位中25,举例来说,信息可能需要被表述成一个用自然语言的写成的问题报告,而要检索的功能functions 函数?和文件大都包含代码。在自动代码搜索27中,有用户问题的高层意图和底层实现细节之间的不匹配。在社区问答系统CQA,

3、问题和答案可以用自然语言,代码或两者的组合表达6,34,40。因此,标准的基于向量空间模型VSM的信息检索IR的方法被用户问题中使用的自然语言与在编程语言之间中使用的源代码之间的词法间隙所困扰32。 甚至当问题和源档案使用自然语言和编程语言 问题表述中有代码 和 代码片段中有自然语言的注释混合的表述,IR系统由于显著的语言不匹配发挥不出性能。图1和图2描述了在bug定位工作中语言失配的例子。图1显示在Eclipse项目中的一个bug 报告,作者报告了一个当视图最小化时图标异常行为。相应地,错误报告中包含相关的关键字,如view, icon,以与minimize。该bug稍后通过更改源文件Par

4、tServiceImpl.java2 被排除,这个原文件中包含管理视图的行为定的代码。但是,代码不包含任何的bug报告中发现的关键字。相反,代码中包含关键字,如stack堆栈和placeholder占位符。总体而言,因为代码和错误报告没有任何共同的单词,他们在信息检索中使用的标准tf.idf 向量空间模型中的余弦相似度将会是0 。然而,这两组关键字通过使用分布式说可以被自动地确定在语义上是相关的 12。根据该语言假说,即出现在同一语境的单词倾向于具有相似的语义含义。图3,图4和图5显示3种在同一语境中关键字同时出现在bug报告和源代码的文件。图3显示了Eclipse用户向导中介绍最小化视图的片

5、段。在该片段中,两种类型的关键字一起出现在同一句子。这在图4中进一步说明,图4展示了一段插件开发指南的片段,在图5中,包含API文档的片段。事实上,在整个用户指南,开发人员指南和API文档中,view和placeholder频频同样的语境中出现。分布式假说已为一些使用单词共现来构建单词的向量表示形式即单词嵌入的方法提供了根底,使得具有类似含义的单词具有类似向量。受在自然语言处理中单词表示为的无监视学习的成功的启发,我们提出一个通用的方法,在这个方法中自然语言的语句和代码片段被构建成在低维共享表示空间中有意义的向量。 当应用在如图3至5所示的语义,该方法有望自动确定关键字view和 placeh

6、older 在语义上是相关的,因此相应的错误报告和源代码应该有一个非零的语义相似性。虽然单词嵌入已被证明能够帮助各种自然语言处理任务3,8,就我们所知,他们没有被用来支持在软件工程中的文本检索。最近的一些方法探讨了挖掘语义相关的软件术语。 Tian等人。41,42 介绍SEWordSim,对堆栈的溢出问题和解答特定的软件单词相似度数据库。 Howard等人13。 和Yang等人。 45 推断代码中语义相关的词。Wang等人。从FreeCode标签中挖掘单词相似点 44。然而,这些先前提出的单词相似度的建议,并没有把它们扩展到计算文档之间的相似性。在本文中,我们把单词嵌入合并到由Mihalcea

7、等人提出的文本到文本的文本相似性的修改版本。 28,使得单词嵌入可用于计算SE查询与其侯选答案之间的语义相似性。本文的主要奉献包括:改编skip-gram模型30在低维共享向量空间学习文本和代码的单词嵌入;利用单词嵌入估算查询和文档之间的语义相似度的方法;所提出的语义相似特征的评估,显示了其在两个SE(软件工程)中的IR(信息检索)任务中的效用:一个先前探讨的错误定位任务和一个新定义的把API文檔到堆栈溢出时抛出的Java问题的任务:本文的其余局部安排如下。第2节介绍了单词嵌入的理念,分段为学习单词嵌入详细说明skip-gram模型。第3节介绍了修改skip-gram模型使单词嵌入能够应用于同

8、时包含自由文本和代码的软件文档的技术。第4节介绍了旨在使用单词嵌入捕获文档之间的语义相似的2个的特征。局部5描述了在本文中用于实现这两个IR系统评估的通用排序模型。第6条给出了新特性对排序性能影响的全面评估。第8节讨论了相关的工作,其次是结论,第10节。2.单词嵌入哈里斯“12分布假说,其中指出,在同样的语境中的单词往往有类似的含义,已经出现了许多分布式语义模型Distributional Semantic Models / DSM的,在模型中单个单词不再被视为唯一的符号,而表示为D-维实数向量,来捕捉它们的上下文中的语义含义,这样相似的单词也有相似的矢量表示。传统的DSM从一个单词上下文矩阵

9、M创立单词向量,其中每一行当作于一个词Wj,每一列当作包含Wj的语义Cj,而每个项Mij相当于共现次数例如: Wj在Cj出现。例如,Pantel和Lin 33 将Wi和Cj之间的点互信息Point-wise Mutual Information /PMI作为Mij。兰道尔和杜迈斯19提出了潜在语义分析Latent Semantic Analysis /LSA,它用截断奇异值分解Truncated Singular Value Decomposition/TSVD,来降低M到一个低维度的潜在空间。这些模型被称为基于计数的模型。近日,一组基于神经网络的方法4,7,30被提出来,使用一个叫做“神经嵌

10、入或“单词嵌入的低维向量来表示每一个单词,不像与初始化向量传统的DSM共现计数,这些神经语言模型直接学习向量以最正确预测语境,并且被称为预测模型,这种模型被成功的应用在各种自然语言处理任务3,8,31。在这些模型中,Mikolov的Skip-gram模型30 因其在训练期间的简单和高效而流行。在一组IR(Information Retrieval)和NLP (Natural Language Processing)3,31的任务中,skip-gram模型的表现也明显优于LSA和其他传统基于计数的方法。2.1学习单词嵌入学习单词嵌入是指查找单词的矢量表示,使得有相似含义的单词与相似的向量嵌入相关

11、联。其中,向量之间的相似性通常被定义为余弦相似性。要了解自然语言文字和代码标记的嵌入,我们使用Mikolov等提出的无监视skip-gram模型30。在一个句子中,skip-gram模型学习单词的矢量表示有利于预测周围的文字。图6示出当它遇到当前单词 WtWt代表单词“numbers时,由skip-gram模型所用的训练过程。矢量表示Wt 被用作二元回归模型binary logistic regression model二元回歸模型的参数向量等式1。取任意一个单词 wk作为输入,并进展训练来预测概率,如果wk 在wt的语境中出现,那么概率为1,否那么概率为0。因此,给定的任意单词wk,其矢量表

12、示WK被用作在二元回归模型中被Wt参数化的特征矢量。如果单词wk 在wt的语境中,它被认为是一个正例w+。任何其他单词充当反例w-。语境 Ct通常被定义为以当前单词 wt为中心的固定大小的窗口。负例嘈杂集合Nt通过从域词汇固定数目的单词,每一个单词都在语境Ct中中随机抽样的单词来构建。当面对一系列的T个单词,skip-gram模型采用随机梯度下降来最小化对数似然log-likelihood 對數似然目标Jw的负值。在等式2中所示当应用skip-gram模型学习自然语言文字和源代码标记的嵌入时候,我们认为有以下两种情况:1.一个词汇表设置:创立一个单一的词汇来同时包含文字和标记。这意味着,自然语

13、言中单词“clear指的是一个形容词而在源代码中的“clear指的是一个方法名,将使用一样的词条来表示。2.两词汇表设置:两个词汇被创立。一个用于出现在自然语言文本中的单词和另一个用于出现在代码中的标记。这意味着,自然语言单词“clear指的是一个形容词而源代码中“clear指的是方法名,将属于不同的词汇表。一词个汇设置和两词个汇设定之间的一个区别在于,前者根据方法名“clear的语境来为形容词“clear训练单词嵌入,而第二个没有。3.软件文檔中学习的单词嵌入教程,API文档和bug报告通常包含自然语言和代码混合的句子。图7显示了一个摘自Eclipse 手册5在SWT中使用 OpenGL的语

14、句。第一句会为自然语言中的“render创立一个语境,而接下来的2句为代码标记“GLScene创立一个语境。这两个语境有显著数量的公共单词/标记:C(render) C(GLScene) = SWT, Canvas, Open GL,scene.当遇到大量的包含与“render和GLScene 两个词类似语境的句子时,skip-gram模型会自动在同一个共享的向量空间中为这两个词创立两个相似矢量表示。在skip-gram模型中,混有自然语言单词和源代码的句子的数量往往缺乏以训练好矢量表示。由于语料库必要的大小与词汇量的大小成正比,我们通过使用英文分词算法Porter stemmer分詞算法预处

15、理文本来减少自然语言词汇量。这有效地缩减掉了派生出来的词汇,例如,draw, draws, drawing, drawable 将被看做是同一词条draw。此外,使用一样的语料库我们使用如下方法为skip-gram模型增加训练实例数:1.每当代码标记具有与自然语言单词匹配的名字,那么同时使用标记和单词创立逻辑回归模型logistic regression models逻辑回归模型的训练样例3.1节。2.把逻辑回归模型应用到有一样的含义或相关含义的成对文本和代码,就像API文檔中的类描述和方法描述3.2节。3.1代码标示到单词的启发式映射.到目前为止,在两个词汇设置下,单词“canvas和代码标示“canvas属于不同的词汇表,因此相关联的不同的矢量表示。然而,当命名代码构件,如类,方法或变量时,程序员倾向于使用自然语言的单词来描述该构件的含义。另外,当涉与到自然语言中的构件时时,程序员通常使用自然语言单词来代替代码标记。例如,第三节中图7提到的Canvas类的一个对象的创立,这就是后面提到的使用自然语言单词“Canvas。我们利用这个命名趋势并为Skip-gram 模型创立训练实例;通过教它,让当它见到代码标记“Canvas出现时,同时也训练自然语言的单词 “canvas 。这样做是为了每一个代

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号