论文部分内容阅读
当今社会,随着信息科技的不断进步,软件开发领域已经得到迅速发展,相关的软件开发知识种类和数据量也在不断增加,如何从这些种类繁杂、数量巨大的数据中为开发者推荐合适、有效的软件开发知识成为当前软件开发领域的主要内容。传统的以搜索引擎为主的知识获取方法,通过匹配关键词可以获取一系列相关的信息来推荐给用户。近几年,特别是在2012年谷歌提出知识图谱的概念之后,利用知识图谱的相关技术进行知识问答等方面的研究已经有了很大的发展。但是,对于软件开发领域的知识问答来说,还有许多不足:(1)现在对于软件开发领域的知识来说,分布相对比较零散,许多信息都是散落在各个不同的网站上,人们往往需要搜索引擎多次查找才能得到需要的答案,缺少软件开发知识的自动收集机制;(2)现有的软件开发知识相对分散,缺少业界统一的一致的规范和标准,没有针对软件开发这一特定的领域来专门设计一个专业领域知识库;(3)通过观察研究StackOverflow、CSDN等网站上的一些软件开发领域的“问题-答案对”发现,大多数问题都是会涉及到多个实体、关系的问题,相对应的答案也往往是多个且形式多样,对于这种复杂、开放的软件开发领域问题,传统的知识问答方法存在不足。传统的知识问答方法大部分都是对一些简单事实问题进行研究的,不能很好的支撑软件开发领域的复杂、开放的问题。因此,如何对软件开发领域这种复杂、开放的问题进行回答,成为现阶段需要研究和解决的问题。本文针对以上所陈列的各种问题,进行了深入的研究,主要工作有:1.实现了异构多源软件开发知识的自动化收集。为实现对软件开发领域知识的自动化收集,构建并行化的爬虫程序,对各类关于软件开发的网站上的数据集进行爬取,如维基百科、StackOverflow、GitHub等。2.构建了统一的软件开发知识图谱。构建适用于软件开发知识问答的软件开发知识图谱,设计软件开发知识库。首先,对收集到的问答数据进行分析、总结,得到软件开发领域问题及相对应答案的特征;然后对这些数据进行预处理,提取数据中的实体、关系以及属性等信息;最后利用收集的软件开发知识数据集以及从维基百科等网站上爬取的关于软件开发这方面的知识和软件开发领域问题答案特征,对通用知识图谱的构建方法进行了改进,使用Neo4j等图数据库进行数据存储,构建了适用于软件开发知识问答的软件开发知识库。3.提出了一种面向软件开发领域复杂问题的知识问答方法。该方法是通过在知识图谱中找到与用户问句描述最相符的相似问题实体,并将其答案作为最终用户问句的答案。该方法主要包括两个方面,一是用户问句的嵌入表示,它是在融合了知识图谱中知识层面的信息和结构信息后,对问句进行联合的嵌入表示;二是构建了用户问句的知识体系,并将其与注意力机制相结合来表征用户的真实意图。最后,构建了一个得分函数来计算相关性得分,获取与用户问句最相符和的候选问句,并将其答案作为用户问句的答案。4.设计并实现了面向软件开发领域的知识问答系统。分析传统知识问答方法的缺陷和用户日益增长的需求,以提出的知识问答方法为基础,设计了面向软件开发领域的知识问答系统,以实现对软件开发领域复杂、开放的问题进行有效地回答。本文通过自动化收集异构多源的软件开发知识,构建软件开发知识图谱,提出面向软件开发领域的知识问答方法,设计并实现了面向软件开发领域的知识问答系统。对知识问答系统进行了功能和性能上的检验,结果表明系统具有较好的稳定性,所提出的知识问答方法也取得了良好的效果。