Stack Overflow系统的特征融合答案推荐策略

2019-08-14 10:02赵逢禹
计算机应用与软件 2019年8期
关键词:语料检索语义

万 杰 赵逢禹 刘 亚

(上海理工大学光电信息与计算机工程学院 上海 200093)

0 引 言

Stack Overflow是一个程序开发与计算机技术交流社区,当开发人员遇到的疑惑、报错,在中文资料中找不到解决方案时,在Stack Overflow中通常能比较快速地找到相应的解决方案。Stack Overflow经历了多年的发展,社区问答系统中积累了千万条的问题和答案,形成了庞大的语料集。如何有效地利用这些历史资源,帮助用户轻松、准确地找到最接近用户查询的问题所对应的最佳答案是Stack Overflow面临的重要问题。

基于Stack Overflow语料集已经有许多研究成果。Huang等[1]提出了一种文本总结技术,通过对Stack Overflow问答讨论中的信息进行总结、提炼和归类,从而能够帮助开发人员确定更适合某个项目的工具或技术。Xia等[2]提出了一种基于文本处理和文本分类技术来预测删除Stack Overflow中问题质量很差的问题。

Stack Overflow中的搜索机制是一个基于Lucene的Elasticsearch搜索引擎,它提供了一个分布式多用户能力的全文搜索功能。当用户提交一个问题时,首先对问题进行分词,然后提取问题中的关键词,对问题进行构造句法依存树,将自然语言问题转化为逻辑语义问题,进一步抽取问题中的特征与语料库中的答案进行匹配,显示出与用户提交的问题相关度高的问题。但是Stack Overflow只对问题的标题进行了分析与提取,忽略了问题的描述信息和问题标签信息,导致推荐的准确率降低。

关于社区问答系统中答案的推荐策略问题的研究可以划分为三个方面:(1) 基于主题模型的答案推荐;(2) 基于机器学习的推荐;(3) 基于问句词的表面信息的答案推荐。

基于主题模型的答案推荐方面,张成等[3]提出了一种基于概率潜在语义分析(PLSA)的社区问答自动选择答案的方法,并根据答案与问题之间的相似性对候选答案进行排序。Riahi等[4]使用两种统计主题模型为一个新发布的问题找到专家,从而为用户提供正确的答案。

基于机器学习的推荐是另一个研究热点,Li等[5]在biLSTM之上建立了卷积神经网络(CNN)结构,使用该结构将查询和答案映射到它们对应的分布向量,学习查询和答案之间的语义相似性,对答案重新排名;文献[6]使用基于bigram散列和TF-IDF匹配的搜索组件与训练有素的多层递归神经网络模型相结合,以检索出维基百科中与问题匹配的答案;文献[7]基于文本和元数据特征建立了一个预测模型,用来预测一个新问题的用户意图,使得系统能够识别类似的问题,推荐相关的答案。

第三种研究思路是基于问句词的表面信息进行答案推荐,Berger等[8]通过学习多种统计的方法从大量的候选答案中找到问题答案。Jijkoun[9]使用无监督学习的方法从Web上获取FQA网页,再自动从收集的页面中提取问题与答案,然后采用向量空间模型检索问答对回答用户的问题。Riezle等[10]采用统计机器翻译(SMT)技术来提高问句的检索性能问题。

本文针对Stack Overflow只对问题的标题进行了分析与提取,忽略了问题的描述信息和问题标签信息,导致推荐的准确率降低问题,提出了一种特征融合的答案推荐策略(Feature integration answer recommendation strategy,FIARS)。该推荐策略主要研究了问题标题相似度、问题描述相似度、问题标签等基于文本的相似度,进一步分析了语义相似度,最后返回与用户查询对应的答案信息。

1 FIARS答案推荐策略概述

Stack Overflow中存在大量的“问题与答案”语料。当一个用户提出新的问题时,如何为用户推荐最优答案是本文研究的目的。本文首先对“问题与答案”语料集进行预处理,根据用户新问题标题与标签,计算与语料集中问题的相似度,得到问题标题与标签相似候选集;进一步计算新问题描述和候选集中各问题描述相似度,筛选出问题描述相似候选集;最后利用问题特征词的语义信息,计算用户问题与语料集中各问题的语义相似度,得到基于语义相似的检索候选集,从语义相似的检索候选集中提取出答案返回给用户。

由于Stack Overflow中存在大量的相似问题与答案信息,如何给出与用户搜索的新问题最相关的问题与答案信息是本文关注的焦点。图1所示为FIARS问题答案推荐模型的处理流程,该处理流程主要包括以下5步。

第1步:对“问题与答案”语料集进行预处理。从Stack Overflow网站中抽取“问题与答案”语料集,对该语料集建立问题索引和答案索引。在建立索引时,仅对有答案的问题建立问题索引与答案索引,即确保索引中每个问题都有一个答案。其次从每个问题中提取问题标题、问题描述、问题标签和答案信息,然后对问题中的标题、描述和答案进行去停用词和词干化操作,对答案进行去重。

第2步:筛选出与新问题相似度较高的问题标题与标签相似候选集。对于用户提出的新问题计算新问题和语料集中历史问题的问题标题相似度、问题标签相似度,并基于问题标题相似度和问题标签相似度,筛选出与新问题相似度较高的问题标题与标签相似候选集,得到初步检索结果S1。

第3步:筛选出问题描述相似候选集。进一步计算新问题和初步检索结果S1中各问题描述相似度,筛选出问题描述相似候选集,得到第二次检索结果S2。

第4步:筛选出最终检索结果。对第二次检索结果S2使用WordNet作为语义资源,首先使用WordNet提供的最短接口函数计算词语的语义相似度,利用问题特征词的语义信息,计算用户问题与语料集中各问题的语义相似度,得到最终检索结果S3。

第5步:根据最终检索结果的问题索引,从问题对应的答案索引中提取出答案返回给用户。

图1 FIARS策略流程图

2 关键技术

特征融合的答案推荐策略的关键技术主要包含建立索引、基于文本相似度的检索模型和基于语义相似度的检索模型3个部分。

2.1 建立索引

为了提高检索的效率,先对语料集的问题标签建立索引,当问题标签相同时,再对问题标题中的特征词建立索引。

在建立索引时,仅对语料集中有答案的问题建立索引,这可以确保每个问题至少对应于一个答案。对于用户提交的任意一个问题q,使用特征融合答案推荐策略,得到最终检索结果S3,根据最终检索结果的问题索引,从问题对应的答案索引中提取出答案并返回给用户。

2.2 文本相似度计算

在Stack Overflow中,用户提交的问题包含很多文本信息,例如提交者、问题标题、问题描述、问题标签和评论。在特征融合答案推荐策略中,需要计算用户问题与Stack Overflow中语料集中已存在问题的标题、标签和描述信息文本相似度。

2.2.1文本相似度计算

对于文本1和文本2,首先从文本中提取词袋分别表示为TextBag1和TextBag2,然后消除两个词袋中的重复单词得到包含v个单词的并集TextBagu,根据向量空间模型(VSM)[11],将两个文本分别用两个向量TextVec1和TextVec2表示:TextVec1=(wt1,1,wt1,2,…,wt1,v)和TextVec2=(wt2,1,wt2,2,…,wt2,v),权重wtt,i表示文本t中的第i个词的频率,计算如下:

其中:分子是两个向量TextVec1和TextVec2的点积运算,计算公式如下:

TextVec1·TextVec2=wt1,1×wt2,1+wt1,2×wt2,2+

…+wt1,v×wt2,v

(3)

|TextVec1|和|TextVec2|分别表示两个向量的大小,|TextVec1|的计算公式如下:

2.2.2标题相似度

对于问题Q1和Q2,首先将从标题中提取的词袋分别表示为TitleBagQ1和TitleBagQ2,然后消除两个词袋中的重复的单词得到包含v个单词的并集TitleBagu,根据空间向量模型(VSM)[11],将两个标题分别用两个向量TitleVecQ1和TitleVecQ2表示:TitleVecQ1=(wtQ1,1,wtQ1,2,…,wtQ1,v)和TitleVecQ2=(wtQ2,1,wtQ2,2,…,wtQ2,v)。权重wtq,i表示问题q标题中的第i个词的频率。通过式(2)计算两个标题之间的相似度,用TitleVecQ1、TitleVecQ2来表示两个标题余弦相似度[11]。

对于一个用户提交的新问题nq和历史问题hq,可以用式(2)来计算它们标题相似度,表示为TitleSim(nq,hq)。

2.2.3标签相似度

用户为新问题添加标签时,可以添加多个标签项。对于问题Q1和问题Q2,首先将两个问题的标签项分别放在TagSetQ1和TagSetQ2中,然后合并TagSetQ1和TagSetQ2并消除重复的词,得到包含v个标签项的并集TagSetu。将两个标签集分别用两个向量TagVecQ1和TagVecQ2表示:TagVecQ1=(wgQ1,1,wgQ1,2,…,wgQ1,v)和TagVecQ2=(wgQ2,1,wgQ2,2,…,wgQ2,v)。权重wgq,i表示问题q标签中的第i个词的频率,计算如下:

对于一个用户提交的新问题nq和历史问题hq,用TagSim(nq,hq)来表示它们的标签相似度。

2.2.4问题相似度计算

根据用户提交的新问题和历史问题的标题相似度、标签相似度,综合计算问题相似度的得分。得到问题内容相似度的得分SimScore(nq,hq),计算公式如下所示:

SimScore(nq,hq)=αTitleSim(nq,hq)+

(1-α)TagSim(nq,hq)

(6)

其中:TitleSim(nq,hq)、TagSim(nq,hq)可以由式(2)计算得到。

2.2.5描述相似度

对于问题Q1和Q2,首先将从描述中提取的词袋分别表示为DesBagQ1和DesBagQ2,然后消除两个词袋中的重复的单词得到包含v个单词的并集DesBagu,根据空间向量模型,将两个描述分别用两个向量DesVecQ1和DesVecQ2表示:DesVecQ1=(wdQ1,1,wdQ1,2,…,wdQ1,v)和DesVecQ2=(wdQ2,1,wdQ2,2,…,wdQ2,v)。权重wdq,i表示问题q描述中的第i个词的频率。通过计算两个向量DesVecQ1和DesVecQ2的余弦相似度[11]来衡量两个描述的相似度。

对于一个用户提交的新问题nq和历史问题hq,用DesSim(nq,hq)来表示它们的描述相似度。

2.3 基于语义相似度的计算

为了提高检索的精确度,给用户提交的问题提供更准确的答案推荐,在问题标签、问题标题和问题描述相似度的基础上进行了语义相似度计算,需要计算用户问题与Stack Overflow中语料集中已存在问题标题的语义相似度。

该模型使用WordNet作为语义资源,WordNet中两个单词之间的距离越近,它们之间的语义相似性越大,反之,语义相似性越小。对于给定两个特征词w1和w2,使用WordNet提供的最短接口函数来获得两个同义词之间的最短路径,然后归一化得到两个特征词之间的语义相似度,其语义相似度公式如下:

式中:Sim(w1,w2)表示w1和w2之间的语义相似度,dis(w1,w2)表示WordNet中w1和w2语义的最短距离。

对于给定问题标题T1和历史问题标题T2,采用二分图[12]的方法计算两个标题之间的相似度。其计算公式如下:

(9)

3 实 验

3.1 语料集数据

Stack Overflow是一个与编程相关的IT技术问答网站。通过下载MSR 2015站提供的最新的关于Stack Overflow内容的官方数据,由Stack Exchange在Internet Archive提供。这些数据包括问题标题、问题答案、问题标签、问题描述等相关信息。为了不影响实验结果和保持数据的平衡性,在这里我们选取2014年1月到2015年2月的热门度靠前的10个标签项的相关信息,除去没有答案的问题,共有27 639个问题标题和12 477个问题答案。在有答案的问题中,23 426个问题有最佳答案。

实验前,先使用WVTool工具对数据进行预处理。将2013年2月以后的包含最佳答案的问题作为测试用例集,其中包含2 254个问题。

3.2 实验的评测指标

本文主要通过Top-k准确率来对实验结果进行分析。通过对比和分析实验结果,验证FIARS策略的有效性。

Top-k准确率表示算法推荐的前k个答案的准确性。当k越小,Top-k越大时,推荐算法的推荐效果越好。本文中选择k值为1、3、5和10。例如,Ar={a,b,c,d,e},Ac={a,c,f,b,e,d},则Top-1、Top-3、Top-5、Top-10准确率依次为100%、66.7%、80%和100%。

3.3 实验及结果分析

实验1特征融合验证。

对于问题相似度中a的取值,因为问题标题和问题标签对于问题相似度的计算同等重要,所以本文选取a值为0.5。

在过去的研究中,新问题答案推荐只根据问题标题信息进行模糊匹配,忽略问题标签、问题描述和问题标题语义信息。我们通过是否考虑问题的特征融合进行对比,分析Top-k的变化,验证特征融合对答案推荐的影响。实验结果如表1所示。

表1 是否考虑特征融合答案推荐结果对比 %

由表1可以看出,考虑特征融合的答案推荐准确率高于不考虑特征融合。只根据标题进行模糊匹配,丢失了问题的大量信息,导致准确率大大降低。

实验2FIARS策略与其他答案推荐模型对比。

为了验证FIARS策略对答案推荐的有效性,采用两种不同的推荐方法与本文提出的FIARS策略方法进行对比,具体对比方法如下:

(1) PLSA[3]。利用PLSA模型计算每个用户的兴趣主题分布,并且综合问题答案之间的相似度和用户与问题主题分布领域的相似度对答案进行推荐。

(2) hypernym[5]。在biLSTM之上建立了卷积神经网络结构,使用该结构将查询和答案映射到它们对应的分布向量,学习查询和答案之间的语义相似性,对答案重新排名。

(3) FIARS。本文所提策略。

根据以上方法进行实验,实验结果如表2所示。

表2 各种方法的Top-k准确率对比 %

由表2可以看出,采用各种方法得出FIARS策略的Top-k准确率最高,本文策略在Stack Overflow系统上Top-10准确率达到66.94%,而hypernym和PLSA在Top-10的准确率低于FIARS策略。说明考虑问题标题、问题描述、问题标签和语义能够有效地提高推荐准确率。

由以上实验结果可以看出,本文提出的FIARS策略较之已有方法更有效,推荐的准确率更高。

4 结 语

本文提出了Stack Overflow系统的特征融合答案推荐策略。该策略综合问题标题、问题标签、问题描述和语义为问题推荐答案。实验结果表明,该策略能够有效地为用户提交的问题推荐答案,达到用户问题快速、准确解决的目的。在今后的工作中,将会把FIARS策略应用到其他的社区问答系统中,例如知乎、百度知道、Yahoo Answers,进一步验证FIARS策略的有效性。虽然本文提出的策略能有效地弥补其他模型中缺少语义信息的不足,但是在使用WordNet提取语义信息的过程中效率低,所以未来的工作就是要提高提取语义信息的效率,使用基于机器学习构建语义网络。

猜你喜欢
语料检索语义
真实场景水下语义分割方法及数据集
面向低资源神经机器翻译的回译方法
可比语料库构建与可比度计算研究综述
瑞典专利数据库的检索技巧
在IEEE 数据库中检索的一点经验
一种基于Python的音乐检索方法的研究
“吃+NP”的语义生成机制研究
情感形容词‘うっとうしい’、‘わずらわしい’、‘めんどうくさい’的语义分析
汉语依凭介词的语义范畴
国内外语用学实证研究比较:语料类型与收集方法