论文部分内容阅读
如今,软件开发工程师广泛使用各种类型的在线信息平台搜索解决方案、分享开发经验、开源个人项目、学习新的软件开发技能、为其他的开发者答疑解惑等。在软件开发的全生命周期内,这些在线信息平台能够给软件开发工程师提供各种各样有用的信息和帮助,提升开发者的软件开发水平,这些在线信息平台被称为软件信息站。软件信息站中的被开发者发布的内容被称为软件对象。由于软件信息站在软件开发过程中扮演着越来越重要的角色,各种类型的软件信息站已经引起了学术界和工业界的广泛关注。随着软件信息站的不断演化,其中的软件对象数量快速增长。这使得软件开发人员快速地定位一个特定的软件对象变得非常困难。一个已经在社交媒体平台和web社区中被广泛应用的经典实践是引入标签这种轻量化的管理机制,标签为各种web对象提供了一种外部元数据。标签作为一种有效的轻量化的计算机制也被广泛引入到各种类型的软件信息站中。在这些软件信息站中,标签被用来搜索、发现、描述、识别、分类和组织软件信息站中的软件对象;标签的引入消除了社会和技术方面的鸿沟,促进了开发者之间的协作交流。软件信息站通常要求开发者对其发布的对象标注一些标签,高质量的标签非常简洁并能够描述软件对象最重要的特征。因此对于软件信息站,开发者标注软件对象标签的质量非常重要。然而,开发者对软件对象标签标注的活动是一个分布式且不协调的过程。每个开发者可以自由的选取标签来描述将要发布的软件对象最重要的特征;与此同时,大部分软件信息站也容许开发者利用自己创造的标签来标注将要发布的软件对象。标注软件对象是非常方便和灵活操作,但是也带来了一些问题。首先,伴随着软件信息站中软件对象规模持续增长,标签的种类也快速的增长,当开发者选择软件信息站中已有的标签来标注软件对象时,如何从大规模标签中找到合适的标签。再者,由于容许开发者自由创造标签,导致软件信息站中的大量的标签出现了标签同义现象。在软件信息站中,这些问题使得一些软件对象没有被很好的标注。为了更好的标注软件信息站中新加入的软件对象、有效地重用已有的大量标签、更好地管理信息站中不断增长的标签、快速地帮助开发人员定位和推荐合适的标签。如何为软件信息站构建一个自动化高效的标签推荐系统已经成为了软件工程领域重要的研究问题。围绕这个研究问题,本文开展了以下四项主要的研究工作:(1)为了让标签推荐系统能够适应软件信息站的动态演化;面对大规模的软件信息站和标签时,也能够快速地作出响应。本文首先提出了一种基于软件对象文本内容搜索加学习策略的软件信息站中标签推荐方法TagMulRec。TagMulRec方法首先为软件信息站中所有软件对象的文本内容构建索引。对于一个新的软件对象,TagMulRec方法然后利用索引搜索与该软件对象的文本内容语义相似度高的一些软件对象组成候选集。基于该候选集,TagMulRec进一步利用基于语义相似度的软件对象标签推荐算法为该新的软件对象推荐K个标签。(2)为了充分利用软件信息站中的信息,进一步提高标签推荐的精度,提升标签推荐的服务响应时间,本文中提出一种基于软件对象文本内容浅层学习的软件信息站中标签推荐方法FastTagRec。该方法基于单隐层神经网络模型,结构简单,能够快速的训练模型和推荐标签。FastTagRec首先在模型输入层使用共享参数矩阵来充分利用了软件信息站中几乎所有的软件对象文本内容和标签信息;为了进一步提高服务精度,FastTagRec在模型输入层引入文本条件约束来捕获软件对象文本内容中词之间的依赖关系。(3)受到深度学习方法在软件工程领域其他研究问题上成功应用的启发,更进一步提高软件信息站中标签推荐方法的精度,本文中提出四种基于软件对象文本内容深度学习的软件信息站中标签推荐方法TagCNN、TagRNN、TagHAN和TagRCNN。本文比较了这四种基于深度学习模型的方法和三种非深度学习的方法EnTagRec、TagMulRec和FastTagRec性能,实验结果表明了合适的深度学习模型结构能够带来服务精度的提升,但是服务速度上,非深度学习方法仍具有优势。(4)软件信息站中软件对象的描述内容主要包括代码和文本,为了充分利用软件信息站中软件对象描述内容中的代码和文本信息,推荐标签时能够反映出软件信息站中发布软件对象的软件开发者的个人偏好,本文中提出了一种联合软件对象文本和代码内容信息的软件信息站中个性化标签推荐方法Per-TagBHNN。Per-TagBHNN首先利用TagBHNN方法建立起联合软件对象文本和代码内容信息的标签推荐模型。然后,Per-TagBHNN方法引入开发者模型,开发者模型能够反映出开发者的标签使用偏好和兴趣主题偏好,Per-TagBHNN方法利用开发者模型对TagBHNN方法模型推荐的标签列表进行重排序,使得不仅仅与软件对象内容相关程度高的标签取得比较靠前的排名,而且用户偏好的标签或用户偏好的兴趣主题下的常用标签也能取得比较靠前的排名。本文搜集了10个著名的软件信息站中的数据作为实验的数据集。通过一系列的实验验证了本文中提出方法的有效性。