黃 輝,劉永堅,解 慶
(武漢理工大學(xué) 計算機科學(xué)與技術(shù)學(xué)院,武漢 430070)
在Stack Overflow、Quora等社區(qū)問答(Community Question Answering,CQA)網(wǎng)站中,用戶提出新問題等待其他用戶來回答,其他用戶能對該問題下的回答表示贊同或者反對,提問者也可以采納其中一個答案,將其設(shè)置為“最佳回答”。這種互動方式使得提問者可以獲得具有針對性的答案,能減少用戶在互聯(lián)網(wǎng)中獲得知識的成本。CQA通過提供一個知識共享平臺來滿足用戶獲取和發(fā)布知識的需求,由于其具有開放性、交互性等特點,因此受到廣大用戶的喜愛。
隨著用戶量的增多以及新問題的不斷提出,問答社區(qū)面臨一些新的挑戰(zhàn)。Stack Overflow是一個全球熱門的與計算機編程相關(guān)的問答網(wǎng)站,本文以其為例分析2009年至2015年之間的問答數(shù)據(jù):問題數(shù)量不斷快速增長,到2013年,累積的問題數(shù)量已經(jīng)超過200萬,但新問題的增長速度明顯減慢,同時未被解答的問題比例由2009年的99.5%下降至2013年的90.9%,到2015年進一步下降至79.5%。該網(wǎng)站中大量新問題被提出,但是在一定時間內(nèi)都得不到任何人解答,由此可以認為,未被解答的問題增多會導(dǎo)致社區(qū)的用戶活躍度下降。
問答社區(qū)需要合適的專家發(fā)現(xiàn)方法以尋找能夠提供正確答案的專家,這有利于提高用戶的活躍度并促進用戶主動分享知識。本文圍繞開放的問答模式,針對問答社區(qū)的特點提出一種基于用戶-標(biāo)簽網(wǎng)絡(luò)的專家發(fā)現(xiàn)方法。根據(jù)用戶的歷史回答記錄,以用戶和標(biāo)簽為節(jié)點構(gòu)建異構(gòu)網(wǎng)絡(luò),使用網(wǎng)絡(luò)嵌入方法得到用戶的向量表示,并為每個問題組合標(biāo)題、標(biāo)簽、正文以生成問題文本,對問題進行數(shù)據(jù)清洗以獲得適合訓(xùn)練的數(shù)據(jù)。在此基礎(chǔ)上,應(yīng)用深度語義匹配模型DSSM提取用戶特征和問題文本特征,根據(jù)兩者的余弦相似度排序得到候選專家列表。
社區(qū)問答中的專家發(fā)現(xiàn)方法主要分為3種,即基于主題生成模型的方法、基于深度學(xué)習(xí)的方法和基于網(wǎng)絡(luò)的方法。
目前有一部分工作從挖掘文本主題信息的角度出發(fā),尋找問題和用戶之間潛在主題信息的關(guān)聯(lián),而多數(shù)工作則使用LDA主題模型尋找用戶的領(lǐng)域,計算用戶在各個類別內(nèi)的專業(yè)程度從而進行專家排序[1]。文獻[2]根據(jù)在線問答社區(qū)中答案的產(chǎn)生過程,提出一種問題-回答者-話題模型。文獻[3]應(yīng)用分段主題模型(Segmented Topic Model,STM)解決專家發(fā)現(xiàn)問題,并且對比了TF-IDF模型、語言模型以及LDA模型,實驗結(jié)果顯示STM表現(xiàn)更好。文獻[4]提出作者-主題模型(Author-Topic Model,ATM)以尋找作者、文檔、主題和詞之間的關(guān)系。文獻[5-6]提出標(biāo)簽詞主題模型(Tag Topic Model,TTM),利用問題文本和問題附帶的標(biāo)簽,使得每一個文本中的單詞都能和每一個標(biāo)簽組成“標(biāo)簽-詞”對,從而解決因問題文本較短導(dǎo)致傳統(tǒng)主題模型難以提取潛在主題的問題。
深度學(xué)習(xí)被廣泛應(yīng)用于多個領(lǐng)域[7-9],一些工作將深度學(xué)習(xí)應(yīng)用于專家發(fā)現(xiàn)。這些方法根據(jù)用戶的歷史回答記錄建立用戶文檔,然后從中提取用戶特征。文獻[10]使用DSSM模型[11]提取文本特征和用戶特征,然后根據(jù)用戶文本特征和問題文本特征的余弦相似度從大到小排序獲得專家列表。文獻[12]使用卷積神經(jīng)網(wǎng)絡(luò)提取文本特征,也取得了較好的效果。此外,傳統(tǒng)的支持向量機方法也被用于專家發(fā)現(xiàn)任務(wù)。文獻[13]提出RankingSVM模型,通過訓(xùn)練一個二分類器對樣本進行分類,從而將排序轉(zhuǎn)化為一個分類問題,利用機器學(xué)習(xí)的方法進行排序。
基于網(wǎng)絡(luò)的方法根據(jù)問答關(guān)系構(gòu)建社交網(wǎng)絡(luò),傳統(tǒng)的方法通?;阪溄臃治?如基于PageRank的方法[14]和基于HITS的方法[15]。近期的一些方法應(yīng)用了圖嵌入法生成網(wǎng)絡(luò)中節(jié)點的特征向量。文獻[16]構(gòu)建用戶與用戶、用戶與問題之間的異構(gòu)網(wǎng)絡(luò),通過Random-Walk算法[17]得到用戶和問題的向量表示,最后使用深度神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)提取特征并比較兩者之間的余弦相關(guān)度。文獻[18]設(shè)計了一種聯(lián)合網(wǎng)絡(luò)結(jié)構(gòu)信息和文本信息的動態(tài)門裝置,然后使用神經(jīng)張量網(wǎng)絡(luò)(Neural Tensor Network,NTN)[19]得到問題特征和用戶特征的匹配分?jǐn)?shù)。
以上方法均圍繞問答關(guān)系抽象出用戶和問題作為節(jié)點構(gòu)建網(wǎng)絡(luò),忽略了問題附帶的標(biāo)簽。稀疏的標(biāo)簽難以利用,但卻能反映出問題的領(lǐng)域性。因此,本文通過尋找用戶與標(biāo)簽的聯(lián)系,構(gòu)建用戶-標(biāo)簽異構(gòu)網(wǎng)絡(luò),以此減少節(jié)點數(shù),加快模型訓(xùn)練的速度,同時提高準(zhǔn)確性。
本文基于用戶-標(biāo)簽網(wǎng)絡(luò)的專家發(fā)現(xiàn)方法框架如圖1所示。以用戶和標(biāo)簽為節(jié)點,根據(jù)標(biāo)簽與標(biāo)簽之間的關(guān)系以及用戶與標(biāo)簽的關(guān)系構(gòu)建用戶-標(biāo)簽異構(gòu)網(wǎng)絡(luò),然后應(yīng)用DSSM模型[11]獲取用戶向量和問題向量的相似度,最后得到候選專家列表。
圖1 本文方法框架
問答社區(qū)中的問題通常都附有若干個標(biāo)簽,這些標(biāo)簽大多能正確反映出問題的主題,但是它們非常稀疏,難以直接利用。如圖2所示,用戶回答了某個問題,該問題附有3個標(biāo)簽,筆者認為其與該用戶有關(guān)聯(lián),因此,通過構(gòu)建用戶-標(biāo)簽異構(gòu)網(wǎng)絡(luò)對這些稀疏標(biāo)簽加以利用。
圖2 用戶與標(biāo)簽之間的聯(lián)系
設(shè)問題集為Q={q1,q2,…,ql},用戶集為U={u1,u2,…,um},標(biāo)簽集為T={t1,t2,…,tn}?;谟脩艏疷和標(biāo)簽集T,本文構(gòu)建一個用戶-標(biāo)簽異構(gòu)網(wǎng)絡(luò),該網(wǎng)絡(luò)是一個無向圖,能反映出用戶與標(biāo)簽在網(wǎng)絡(luò)層面中的關(guān)系。設(shè)該異構(gòu)CQA網(wǎng)絡(luò)為G=(V,E),其中節(jié)點集V包含用戶集U和標(biāo)簽集T這兩種類型的節(jié)點,邊集合E由用戶-標(biāo)簽關(guān)系和標(biāo)簽-標(biāo)簽關(guān)系組成,詳細描述如下:
圖3展示了用戶-標(biāo)簽異構(gòu)網(wǎng)絡(luò)結(jié)構(gòu),其中包含2種節(jié)點,即用戶節(jié)點和標(biāo)簽節(jié)點。本文通過LINE方法[20]學(xué)習(xí)用戶在網(wǎng)絡(luò)中的向量表示U。
圖3 用戶-標(biāo)簽異構(gòu)網(wǎng)絡(luò)結(jié)構(gòu)
本文應(yīng)用DSSM模型來預(yù)測結(jié)果,如圖4所示,該模型包含2個共享結(jié)構(gòu)但參數(shù)不同的全連接深度神經(jīng)網(wǎng)絡(luò)(Deep Neural Network,DNN)。該神經(jīng)網(wǎng)絡(luò)的隱藏層有2層,每層含有300個神經(jīng)元,輸出層含有128個神經(jīng)元。第1個DNN輸入為用戶向量U,第2個DNN輸入為問題文本向量Q。
圖4 DSSM模型結(jié)構(gòu)
輸入用戶向量U和問題向量Q后,經(jīng)過2個共享網(wǎng)絡(luò)結(jié)構(gòu)的DNN,但是這兩個DNN參數(shù)不共享,包括權(quán)值矩陣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得到能被后續(xù)隱藏層接受的值h1,然后下一層接受上一層的輸出,Wi(k)為第i層的權(quán)值,bi是第i層的偏置向量,k為離散時間,i的取值范圍為2~m,式(3)定義了激活函數(shù)F。
輸出層含有128個神經(jīng)元,則輸出的特征維度為128。本文使用余弦函數(shù)來計算2個DNN分別輸出的用戶特征和問題特征的相似度,計算公式如下:
(4)
一個用戶能在多個問題下取得最佳回答,設(shè)K為用戶取得最佳回答的問題總數(shù),r為從問題集中隨機抽取的非該用戶回答的問題數(shù)量。因此,每一組數(shù)據(jù)包含一個用戶、該用戶取得最佳回答的問題集以及r個非該用戶回答的問題。如式(5)所示,基于隨機抽取方法從問題集中得到r個非該用戶回答的問題,本文中r設(shè)為3。然后應(yīng)用Softmax函數(shù)處理問題特征和每一個該用戶回答過的問題特征的余弦相似度,確??偢怕屎蜑?。
(5)
本文定義損失函數(shù)fLoss來提高準(zhǔn)確率,K為用戶U取得最佳回答的問題數(shù)量,在訓(xùn)練過程中使fLoss最小化。如式(6)所示,當(dāng)用戶取得最佳回答的問題特征和用戶特征余弦相似度最大且非最佳回答問題特征與用戶特征余弦相似度最小時,fLoss為最小值。如果一個用戶回答了許多的問題,可以令K=10,將一組數(shù)據(jù)拆分為多組數(shù)據(jù)以便于神經(jīng)網(wǎng)絡(luò)的訓(xùn)練。
(6)
StackExchange是一系列具有相同問答模式的問答網(wǎng)站集合,其中包含133個網(wǎng)站,每一個網(wǎng)站覆蓋不同領(lǐng)域,包括數(shù)學(xué)、園藝、物理、密碼學(xué)、天文學(xué)、數(shù)據(jù)科學(xué)、攝影、經(jīng)濟學(xué)等。經(jīng)過多年發(fā)展,StackExchange已經(jīng)成為一個巨大的知識圖書館,Stack Overflow是其中的第一個成員,其他的網(wǎng)站都根據(jù)Stack Overflow的模式而建立。在這種問答模式下,用戶可以提出新問題并將回答設(shè)置成“最佳回答”,可以瀏覽并回答其他人提出的問題,也可以對其他問題的答案表示贊成或者反對。由于提問者在編寫問題時需要輸入該問題的標(biāo)簽,因此目前網(wǎng)站中包含大量的標(biāo)簽用以反映問題的領(lǐng)域并且對問題分類。
本文使用的是“Super User”和“Server Fault”這兩個站點的數(shù)據(jù)集,取其中2010年1月至2016年12月之間的數(shù)據(jù)作為訓(xùn)練集,2017年1月至2018年7月的數(shù)據(jù)作為測試集。
首先根據(jù)時間段以及類型(在數(shù)據(jù)源文件Post.xml中,問題和回答的類型序號分別是1和2)得到問題集。問題由問題標(biāo)題、問題標(biāo)簽和問題正文3個元素組成,因此,設(shè)問題文本=問題標(biāo)題+問題標(biāo)簽+問題正文。然后對問題文本進行數(shù)據(jù)清洗,包括以下4個步驟:
1)移除HTML標(biāo)簽。去除無用的標(biāo)簽,只保留含有有用信息的問題正文。
2)停止詞過濾。使用的是標(biāo)準(zhǔn)的418個英文停止詞。
3)去除代碼段。移除被“”包圍的代碼段。移除代碼段產(chǎn)生的噪聲,能取得更好的結(jié)果[10]。
4)詞干提取。詞干提取是去除詞綴得到詞根的過程,比詞根提取的效率更高。例如,對單詞“fished”提取詞干后得到“fish”。
因此,本文得到僅由單詞詞干組成、含有重要詞匯的詞序列。為減少詞向量的維度,使用谷歌開源的詞向量工具Word2vec。經(jīng)過訓(xùn)練,得到低維度的詞向量,由于詞向量的加法運算特性,因此能將問題文本詞序列表示成計算機能識別的低維度向量。
沒有設(shè)置最佳回答的問題也會被過濾掉,最后根據(jù)時間節(jié)點將數(shù)據(jù)集分成訓(xùn)練集和測試集。由于問答社區(qū)中問題的回答質(zhì)量良莠不齊,甚至存在惡意回答問題的情況,因此筆者認為“最佳回答”得到了提問者的認可,是正確答案。表1列出了這兩個數(shù)據(jù)集中的訓(xùn)練集問題數(shù)量和測試集問題總數(shù)。
表1 訓(xùn)練集和測試集的問題總數(shù)
2種數(shù)據(jù)集下的訓(xùn)練集和測試集描述如表2所示,設(shè)N為用戶取得最佳回答的問題數(shù),Nmin為N最小值。本文以Nmin=5,10,15,20構(gòu)造4個用戶集UN[13]。在數(shù)據(jù)集“Server Fault”中,最佳回答數(shù)至少為20的用戶有470位,這些用戶取得最佳回答的問題在訓(xùn)練集中有34 655個,在測試集中有1 875個。N越大,則用戶數(shù)顯著減少,但是該用戶集回答的問題數(shù)卻沒有顯著減少。分析結(jié)果表明,數(shù)量僅為0.5%的用戶回答了35%的問題(有答案的問題中)[3]。因此,本文通過N區(qū)分出專業(yè)度和活躍度不同的用戶。
表2 2種數(shù)據(jù)集下的訓(xùn)練集和測試集
為進行公正評價,本文使用MRR(Mean Reciprocal Rank)指標(biāo)評價算法。MRR經(jīng)常被用于對搜索算法進行評價:對于查出來的結(jié)果列表,如果第1個結(jié)果匹配,那么分?jǐn)?shù)為1,第2個匹配則分?jǐn)?shù)為0.5,……,第n個匹配則分?jǐn)?shù)為1/n。本文方法為測試集中所有問題生成候選專家列表,如果該問題的最佳回答者出現(xiàn)在候選專家列表的第n個位置,那么此次MRR分?jǐn)?shù)為1/n。
將本文方法與4種不同類型的方法在2個數(shù)據(jù)集Super User和Server Fault上進行對比實驗,即基于LDA的專家發(fā)現(xiàn)方法LDA[3]、基于分段主題模型的方法STM[3]、RankingSVM模型[13]和QR-DSSM[10]。其中,LDA和STM從用戶文檔以及問題文本中挖掘潛在主題信息,根據(jù)用戶的潛在主題信息估算其專業(yè)知識,能夠判斷新提出問題能否被該用戶回答。RankingSVM將排序問題轉(zhuǎn)化成分類問題,為新提出的問題生成候選專家列表。QR-DSSM使用DSSM模型提取語義特征,即從用戶文本中提取用戶特征,從問題文本中提取問題特征,最后根據(jù)兩者的余弦相似度值從高到低得到候選專家列表,該方法首先建立用戶檔案,從用戶檔案和問題文本中使用DSSM模型學(xué)習(xí)用戶特征和問題特征。
本文實驗的實驗結(jié)果均在處理器為Inter(R)Core(TM)i7-6700HQ CPU@2.60 GHz的計算機上得到,實驗數(shù)據(jù)如表3所示,MRR曲線如圖5、圖6所示。
表3 5種方法的實驗結(jié)果對比
圖5 Super User數(shù)據(jù)集下的實驗結(jié)果
圖6 Server Fault數(shù)據(jù)集下的實驗結(jié)果
從表3、圖5和圖6中可以看出,對Super User和Server Fault上的4個用戶集(Nmin=5,10,15,20),本文方法均取得了更好的效果。其中,數(shù)據(jù)集Super User的用戶量比數(shù)據(jù)集Server Fault要多18%~30%,各方法在Super User上的結(jié)果均優(yōu)于Server Fault,本文方法在Super User上取得了最高的MRR指標(biāo),為0.195 9。
與基于主題模型的方法LDA[3]和STM[3]相比,本文方法平均MRR指標(biāo)提高了67%和69%,比起效果更好的STM也提高了45%和46%,這表明傳統(tǒng)的主題模型在短文本上難以挖掘潛在主題信息,而本文方法從網(wǎng)絡(luò)中學(xué)習(xí)用戶信息的方式更優(yōu)。與基于分類模型的RankingSVM[13]方法相比,本文方法平均MRR指標(biāo)提高了19.8%和19.1%,與QR-DSSM[10]相比,本文方法在準(zhǔn)確率上也提高了2%~5%。QR-DSSM根據(jù)用戶歷史回答記錄建立用戶文檔,問題附帶的標(biāo)簽被作為普通的文本處理,重要的標(biāo)簽信息經(jīng)過神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)逐漸被忽略。而本文方法則從用戶-標(biāo)簽網(wǎng)絡(luò)中學(xué)習(xí)用戶向量,使用戶向量包含網(wǎng)絡(luò)結(jié)構(gòu)信息以及標(biāo)簽信息,而使用DSSM模型則能更好地尋找用戶與問題的映射關(guān)系。由此可以證明,本文方法能更準(zhǔn)確地尋找到可提供正確答案的候選專家。
本文以用戶和標(biāo)簽為節(jié)點構(gòu)建用戶-標(biāo)簽異構(gòu)網(wǎng)絡(luò),基于此提出一種社區(qū)問答專家發(fā)現(xiàn)方法。使用網(wǎng)絡(luò)嵌入方法獲得用戶在網(wǎng)絡(luò)中的向量表示,通過Word2vec工具訓(xùn)練得到問題文本的低緯度向量表示。在此基礎(chǔ)上,應(yīng)用DSSM模型提取用戶特征和問題特征,根據(jù)兩者的余弦相似度生成專家列表。使用StackExchange站點的真實世界數(shù)據(jù)集進行實驗,結(jié)果表明,本文方法的專家發(fā)現(xiàn)性能優(yōu)于對比的問答社區(qū)專家發(fā)現(xiàn)方法,能為問題尋找到更合適的專家。下一步將對標(biāo)簽進行聚類以減少網(wǎng)絡(luò)節(jié)點,從而加快網(wǎng)絡(luò)嵌入訓(xùn)練的速度。