黄 辉,刘永坚,解 庆
(武汉理工大学 计算机科学与技术学院,武汉 430070)
在Stack Overflow、Quora等社区问答(Community Question Answering,CQA)网站中,用户提出新问题等待其他用户来回答,其他用户能对该问题下的回答表示赞同或者反对,提问者也可以采纳其中一个答案,将其设置为“最佳回答”。这种互动方式使得提问者可以获得具有针对性的答案,能减少用户在互联网中获得知识的成本。CQA通过提供一个知识共享平台来满足用户获取和发布知识的需求,由于其具有开放性、交互性等特点,因此受到广大用户的喜爱。
随着用户量的增多以及新问题的不断提出,问答社区面临一些新的挑战。Stack Overflow是一个全球热门的与计算机编程相关的问答网站,本文以其为例分析2009年至2015年之间的问答数据:问题数量不断快速增长,到2013年,累积的问题数量已经超过200万,但新问题的增长速度明显减慢,同时未被解答的问题比例由2009年的99.5%下降至2013年的90.9%,到2015年进一步下降至79.5%。该网站中大量新问题被提出,但是在一定时间内都得不到任何人解答,由此可以认为,未被解答的问题增多会导致社区的用户活跃度下降。
问答社区需要合适的专家发现方法以寻找能够提供正确答案的专家,这有利于提高用户的活跃度并促进用户主动分享知识。本文围绕开放的问答模式,针对问答社区的特点提出一种基于用户-标签网络的专家发现方法。根据用户的历史回答记录,以用户和标签为节点构建异构网络,使用网络嵌入方法得到用户的向量表示,并为每个问题组合标题、标签、正文以生成问题文本,对问题进行数据清洗以获得适合训练的数据。在此基础上,应用深度语义匹配模型DSSM提取用户特征和问题文本特征,根据两者的余弦相似度排序得到候选专家列表。
社区问答中的专家发现方法主要分为3种,即基于主题生成模型的方法、基于深度学习的方法和基于网络的方法。
目前有一部分工作从挖掘文本主题信息的角度出发,寻找问题和用户之间潜在主题信息的关联,而多数工作则使用LDA主题模型寻找用户的领域,计算用户在各个类别内的专业程度从而进行专家排序[1]。文献[2]根据在线问答社区中答案的产生过程,提出一种问题-回答者-话题模型。文献[3]应用分段主题模型(Segmented Topic Model,STM)解决专家发现问题,并且对比了TF-IDF模型、语言模型以及LDA模型,实验结果显示STM表现更好。文献[4]提出作者-主题模型(Author-Topic Model,ATM)以寻找作者、文档、主题和词之间的关系。文献[5-6]提出标签词主题模型(Tag Topic Model,TTM),利用问题文本和问题附带的标签,使得每一个文本中的单词都能和每一个标签组成“标签-词”对,从而解决因问题文本较短导致传统主题模型难以提取潜在主题的问题。
深度学习被广泛应用于多个领域[7-9],一些工作将深度学习应用于专家发现。这些方法根据用户的历史回答记录建立用户文档,然后从中提取用户特征。文献[10]使用DSSM模型[11]提取文本特征和用户特征,然后根据用户文本特征和问题文本特征的余弦相似度从大到小排序获得专家列表。文献[12]使用卷积神经网络提取文本特征,也取得了较好的效果。此外,传统的支持向量机方法也被用于专家发现任务。文献[13]提出RankingSVM模型,通过训练一个二分类器对样本进行分类,从而将排序转化为一个分类问题,利用机器学习的方法进行排序。
基于网络的方法根据问答关系构建社交网络,传统的方法通常基于链接分析,如基于PageRank的方法[14]和基于HITS的方法[15]。近期的一些方法应用了图嵌入法生成网络中节点的特征向量。文献[16]构建用户与用户、用户与问题之间的异构网络,通过Random-Walk算法[17]得到用户和问题的向量表示,最后使用深度神经网络学习提取特征并比较两者之间的余弦相关度。文献[18]设计了一种联合网络结构信息和文本信息的动态门装置,然后使用神经张量网络(Neural Tensor Network,NTN)[19]得到问题特征和用户特征的匹配分数。
以上方法均围绕问答关系抽象出用户和问题作为节点构建网络,忽略了问题附带的标签。稀疏的标签难以利用,但却能反映出问题的领域性。因此,本文通过寻找用户与标签的联系,构建用户-标签异构网络,以此减少节点数,加快模型训练的速度,同时提高准确性。
本文基于用户-标签网络的专家发现方法框架如图1所示。以用户和标签为节点,根据标签与标签之间的关系以及用户与标签的关系构建用户-标签异构网络,然后应用DSSM模型[11]获取用户向量和问题向量的相似度,最后得到候选专家列表。
图1 本文方法框架
问答社区中的问题通常都附有若干个标签,这些标签大多能正确反映出问题的主题,但是它们非常稀疏,难以直接利用。如图2所示,用户回答了某个问题,该问题附有3个标签,笔者认为其与该用户有关联,因此,通过构建用户-标签异构网络对这些稀疏标签加以利用。
图2 用户与标签之间的联系
设问题集为Q={q1,q2,…,ql},用户集为U={u1,u2,…,um},标签集为T={t1,t2,…,tn}。基于用户集U和标签集T,本文构建一个用户-标签异构网络,该网络是一个无向图,能反映出用户与标签在网络层面中的关系。设该异构CQA网络为G=(V,E),其中节点集V包含用户集U和标签集T这两种类型的节点,边集合E由用户-标签关系和标签-标签关系组成,详细描述如下:
图3展示了用户-标签异构网络结构,其中包含2种节点,即用户节点和标签节点。本文通过LINE方法[20]学习用户在网络中的向量表示U。
图3 用户-标签异构网络结构
本文应用DSSM模型来预测结果,如图4所示,该模型包含2个共享结构但参数不同的全连接深度神经网络(Deep Neural Network,DNN)。该神经网络的隐藏层有2层,每层含有300个神经元,输出层含有128个神经元。第1个DNN输入为用户向量U,第2个DNN输入为问题文本向量Q。
图4 DSSM模型结构
输入用户向量U和问题向量Q后,经过2个共享网络结构的DNN,但是这两个DNN参数不共享,包括权值矩阵W和偏置向量b。隐藏层的定义如下:
h1(k)=W1(k)·x
(1)
hi(k)=F(Wi(k)·hi-1(k)+bi)
(2)
F(x)=ReLU(x)=max(0,x)
(3)
如式(1)和式(2)所示,首先使用W1乘以输入向量x得到能被后续隐藏层接受的值h1,然后下一层接受上一层的输出,Wi(k)为第i层的权值,bi是第i层的偏置向量,k为离散时间,i的取值范围为2~m,式(3)定义了激活函数F。
输出层含有128个神经元,则输出的特征维度为128。本文使用余弦函数来计算2个DNN分别输出的用户特征和问题特征的相似度,计算公式如下:
(4)
一个用户能在多个问题下取得最佳回答,设K为用户取得最佳回答的问题总数,r为从问题集中随机抽取的非该用户回答的问题数量。因此,每一组数据包含一个用户、该用户取得最佳回答的问题集以及r个非该用户回答的问题。如式(5)所示,基于随机抽取方法从问题集中得到r个非该用户回答的问题,本文中r设为3。然后应用Softmax函数处理问题特征和每一个该用户回答过的问题特征的余弦相似度,确保总概率和为1。
(5)
本文定义损失函数fLoss来提高准确率,K为用户U取得最佳回答的问题数量,在训练过程中使fLoss最小化。如式(6)所示,当用户取得最佳回答的问题特征和用户特征余弦相似度最大且非最佳回答问题特征与用户特征余弦相似度最小时,fLoss为最小值。如果一个用户回答了许多的问题,可以令K=10,将一组数据拆分为多组数据以便于神经网络的训练。
(6)
StackExchange是一系列具有相同问答模式的问答网站集合,其中包含133个网站,每一个网站覆盖不同领域,包括数学、园艺、物理、密码学、天文学、数据科学、摄影、经济学等。经过多年发展,StackExchange已经成为一个巨大的知识图书馆,Stack Overflow是其中的第一个成员,其他的网站都根据Stack Overflow的模式而建立。在这种问答模式下,用户可以提出新问题并将回答设置成“最佳回答”,可以浏览并回答其他人提出的问题,也可以对其他问题的答案表示赞成或者反对。由于提问者在编写问题时需要输入该问题的标签,因此目前网站中包含大量的标签用以反映问题的领域并且对问题分类。
本文使用的是“Super User”和“Server Fault”这两个站点的数据集,取其中2010年1月至2016年12月之间的数据作为训练集,2017年1月至2018年7月的数据作为测试集。
首先根据时间段以及类型(在数据源文件Post.xml中,问题和回答的类型序号分别是1和2)得到问题集。问题由问题标题、问题标签和问题正文3个元素组成,因此,设问题文本=问题标题+问题标签+问题正文。然后对问题文本进行数据清洗,包括以下4个步骤:
1)移除HTML标签。去除无用的标签,只保留含有有用信息的问题正文。
2)停止词过滤。使用的是标准的418个英文停止词。
3)去除代码段。移除被“”包围的代码段。移除代码段产生的噪声,能取得更好的结果[10]。
4)词干提取。词干提取是去除词缀得到词根的过程,比词根提取的效率更高。例如,对单词“fished”提取词干后得到“fish”。
因此,本文得到仅由单词词干组成、含有重要词汇的词序列。为减少词向量的维度,使用谷歌开源的词向量工具Word2vec。经过训练,得到低维度的词向量,由于词向量的加法运算特性,因此能将问题文本词序列表示成计算机能识别的低维度向量。
没有设置最佳回答的问题也会被过滤掉,最后根据时间节点将数据集分成训练集和测试集。由于问答社区中问题的回答质量良莠不齐,甚至存在恶意回答问题的情况,因此笔者认为“最佳回答”得到了提问者的认可,是正确答案。表1列出了这两个数据集中的训练集问题数量和测试集问题总数。
表1 训练集和测试集的问题总数
2种数据集下的训练集和测试集描述如表2所示,设N为用户取得最佳回答的问题数,Nmin为N最小值。本文以Nmin=5,10,15,20构造4个用户集UN[13]。在数据集“Server Fault”中,最佳回答数至少为20的用户有470位,这些用户取得最佳回答的问题在训练集中有34 655个,在测试集中有1 875个。N越大,则用户数显著减少,但是该用户集回答的问题数却没有显著减少。分析结果表明,数量仅为0.5%的用户回答了35%的问题(有答案的问题中)[3]。因此,本文通过N区分出专业度和活跃度不同的用户。
表2 2种数据集下的训练集和测试集
为进行公正评价,本文使用MRR(Mean Reciprocal Rank)指标评价算法。MRR经常被用于对搜索算法进行评价:对于查出来的结果列表,如果第1个结果匹配,那么分数为1,第2个匹配则分数为0.5,……,第n个匹配则分数为1/n。本文方法为测试集中所有问题生成候选专家列表,如果该问题的最佳回答者出现在候选专家列表的第n个位置,那么此次MRR分数为1/n。
将本文方法与4种不同类型的方法在2个数据集Super User和Server Fault上进行对比实验,即基于LDA的专家发现方法LDA[3]、基于分段主题模型的方法STM[3]、RankingSVM模型[13]和QR-DSSM[10]。其中,LDA和STM从用户文档以及问题文本中挖掘潜在主题信息,根据用户的潜在主题信息估算其专业知识,能够判断新提出问题能否被该用户回答。RankingSVM将排序问题转化成分类问题,为新提出的问题生成候选专家列表。QR-DSSM使用DSSM模型提取语义特征,即从用户文本中提取用户特征,从问题文本中提取问题特征,最后根据两者的余弦相似度值从高到低得到候选专家列表,该方法首先建立用户档案,从用户档案和问题文本中使用DSSM模型学习用户特征和问题特征。
本文实验的实验结果均在处理器为Inter(R)Core(TM)i7-6700HQ CPU@2.60 GHz的计算机上得到,实验数据如表3所示,MRR曲线如图5、图6所示。
表3 5种方法的实验结果对比
图5 Super User数据集下的实验结果
图6 Server Fault数据集下的实验结果
从表3、图5和图6中可以看出,对Super User和Server Fault上的4个用户集(Nmin=5,10,15,20),本文方法均取得了更好的效果。其中,数据集Super User的用户量比数据集Server Fault要多18%~30%,各方法在Super User上的结果均优于Server Fault,本文方法在Super User上取得了最高的MRR指标,为0.195 9。
与基于主题模型的方法LDA[3]和STM[3]相比,本文方法平均MRR指标提高了67%和69%,比起效果更好的STM也提高了45%和46%,这表明传统的主题模型在短文本上难以挖掘潜在主题信息,而本文方法从网络中学习用户信息的方式更优。与基于分类模型的RankingSVM[13]方法相比,本文方法平均MRR指标提高了19.8%和19.1%,与QR-DSSM[10]相比,本文方法在准确率上也提高了2%~5%。QR-DSSM根据用户历史回答记录建立用户文档,问题附带的标签被作为普通的文本处理,重要的标签信息经过神经网络的学习逐渐被忽略。而本文方法则从用户-标签网络中学习用户向量,使用户向量包含网络结构信息以及标签信息,而使用DSSM模型则能更好地寻找用户与问题的映射关系。由此可以证明,本文方法能更准确地寻找到可提供正确答案的候选专家。
本文以用户和标签为节点构建用户-标签异构网络,基于此提出一种社区问答专家发现方法。使用网络嵌入方法获得用户在网络中的向量表示,通过Word2vec工具训练得到问题文本的低纬度向量表示。在此基础上,应用DSSM模型提取用户特征和问题特征,根据两者的余弦相似度生成专家列表。使用StackExchange站点的真实世界数据集进行实验,结果表明,本文方法的专家发现性能优于对比的问答社区专家发现方法,能为问题寻找到更合适的专家。下一步将对标签进行聚类以减少网络节点,从而加快网络嵌入训练的速度。