慕江林,冉彪
(西華大學(xué)計算機與軟件工程學(xué)院,成都 610039)
軟件開發(fā)者數(shù)量的增加促使了開發(fā)者社區(qū)規(guī)模變大。開發(fā)者社區(qū)StackOverflow上的用戶量已經(jīng)超過了600萬,問答帖子超過1300萬,每天產(chǎn)生的問答超過5萬。提問者可在開發(fā)者社區(qū)中搜索回答。當(dāng)提問者沒有搜索到滿意的帖子,提問者可發(fā)起新問題,等待領(lǐng)域相關(guān)的專家開發(fā)者回答。然而,開發(fā)者問答社區(qū)存在大量不同領(lǐng)域的問題帖,專家開發(fā)者需要耗費大量的經(jīng)歷篩選出自己領(lǐng)域相關(guān)的問題帖并給出相應(yīng)回答。因此,大量問題貼不能獲得滿意回答,專家開發(fā)者無法提供領(lǐng)域內(nèi)幫助,導(dǎo)致用戶量減少、滿意度和認(rèn)可度下降。在資源數(shù)量龐大的情況下,如何為新問題貼提供相關(guān)領(lǐng)域內(nèi)的專家開發(fā)者尤為重要。
對于開發(fā)者問答社區(qū)的專家推薦,研究人員抽取問題標(biāo)簽、標(biāo)題和內(nèi)容和專家標(biāo)簽、歷史活躍領(lǐng)域等信息建立問題主題和專家主題模型,從而計算問題和專家之間的主題匹配度推薦。Martin等[1]基于KNN方法分析缺陷報告中潛在的主題和開發(fā)者特征的相似關(guān)系來推薦最佳缺陷修復(fù)者;Xin等[2]提取多個主題,計算跨域主題間的相似性進(jìn)行跨域協(xié)作推薦;Mao等[3]基于開發(fā)者歷史完成的任務(wù)和開發(fā)者聲譽,給出了開發(fā)任務(wù)匹配模型,利用開發(fā)者的聲譽增強進(jìn)行開發(fā)者推薦;Y Tian等[4]對StackOverflow上開發(fā)者的歷史數(shù)據(jù)分析,基于LDA模型,發(fā)現(xiàn)用戶潛在興趣,最終基于用戶興趣和協(xié)作投票為問題推薦專家。上述的專家推薦算法是基于主題之間的相似度推薦?;谖谋境槿〉闹黝}詞面臨著關(guān)鍵詞提取困難、噪聲等問題,難以提取能夠準(zhǔn)備描述問題的關(guān)鍵詞。問題主題詞對比專家的描述信息詞匯,即使兩者有語義相似的詞匯而詞結(jié)構(gòu)不同詞被視為不同詞匯,導(dǎo)致了推薦結(jié)果的準(zhǔn)確率降低。
針對上訴問題,本文提出一種融合開發(fā)者問答社區(qū)信息的專家推薦方法。通過引入匹配度和參與度,將兩者進(jìn)行融合,結(jié)合自編碼器模型,學(xué)習(xí)問題和專家之間的非線性語義關(guān)聯(lián),擬合問題對開發(fā)者的評分,最終推薦top-N專家。
問題和開發(fā)者的關(guān)系主要表現(xiàn)在兩個方面:開發(fā)者標(biāo)簽和問題標(biāo)簽關(guān)聯(lián)程度,開發(fā)者是否直接參與該問題。開發(fā)者標(biāo)簽信息是對發(fā)者對自身知識能力的總結(jié)評價,反映了開發(fā)者擅長的興趣的領(lǐng)域,對開發(fā)者的能力評價有重要的作用。通過提取開發(fā)者標(biāo)簽和問題標(biāo)簽,計算相似度得出問題-開發(fā)者關(guān)聯(lián)度矩陣。根據(jù)開發(fā)者是否直接參與到問題,以及其他開發(fā)者對該開發(fā)者參與問題打分,形成問題-開發(fā)者評分矩陣。
問題與開發(fā)者的關(guān)聯(lián)度,度量了開發(fā)者從事領(lǐng)域與問題的領(lǐng)域的相關(guān)程度,作為開發(fā)者是否能夠準(zhǔn)確回答問題的重要評價指標(biāo)之一。每個開發(fā)者都有與之匹配的開發(fā)者標(biāo)簽,開發(fā)者標(biāo)簽由開發(fā)者本人填寫,反映了開發(fā)者的知識結(jié)構(gòu)。提問者提出問題時,選擇任務(wù)標(biāo)簽信息來標(biāo)識該任務(wù)所屬的領(lǐng)域,使得同領(lǐng)域的開發(fā)者更容易發(fā)現(xiàn)、處理該問題。開發(fā)者標(biāo)簽和問題標(biāo)簽,通過集合來表示,通過Jaccard相關(guān)系數(shù)計算開發(fā)者標(biāo)簽集合和問題標(biāo)簽集合的關(guān)聯(lián)度。定義開發(fā)者標(biāo)簽集合:問題標(biāo)簽集合Tq={tq1,tq2,...tqn},根據(jù)Jaccard相似度系數(shù),問題-開發(fā)者相似度關(guān)聯(lián)度計算如下:
dr表示問題和開發(fā)者的匹配度,當(dāng)dr越大,關(guān)聯(lián)度越高。例如,開發(fā)者標(biāo)簽問題標(biāo)簽為根據(jù)公式,匹配度sd=0.167。
開發(fā)者對問題的參與度展示了開發(fā)者與問題的直接關(guān)聯(lián),是評價是否針對該問題推薦開發(fā)者的直接指標(biāo)。問題對開發(fā)者的直接評分,取決于開發(fā)者參與該問題獲得其他開發(fā)者的贊同數(shù)和是否被該問題的發(fā)起者所接受。問題可由多個開發(fā)者共同參與,每個開發(fā)者給出自己的回答,針對該回答,其他開發(fā)者對該回答進(jìn)行評價,根據(jù)被贊同數(shù)量進(jìn)行評分值建立。如果該問題的贊同數(shù)目vc分別在0-50,50-100,100以上,則分別評為0.2分,0.6分,0.9分。任務(wù)發(fā)起者選取符合問題的答案來確定最佳答案。同一問題,接受者只能為一位開發(fā)者,va表示該答案是否為提問者所接受,不接受為最佳答案評分0.3分和接受為最佳答案評0.7分。兩個方面綜合評價問題對開發(fā)者的評分,分別為λ1+λ2=1,其中最終開發(fā)者對問題的評分可由如下公式計算:
例如,問題有3個開發(fā)者u1,u2,u3回答,u1給出的回答為問題的接受答案,u1,u2,u3獲得贊同數(shù)量則u1,u2,u3對于問題的相應(yīng) 得 分 為取。
問題對開發(fā)者的評分值由綜合問題與開發(fā)者的匹配度和問題開發(fā)者的參與度組成,通過選取適當(dāng)?shù)臋?quán)重參數(shù),得出問題-開發(fā)者評分值。定義σ1+σ2=1,問題-開發(fā)者初始得分值計算方式如下:
圖2給出了問題-開發(fā)者初始值矩陣示意圖,實心原點表示問題和開發(fā)者的僅有關(guān)聯(lián)度值;空心圓表示問題對于開發(fā)者的僅有參與度值;空心圓中一點表示融合關(guān)聯(lián)度與參與度后的值;空心圓中叉符號表示擬合后的評分值。軟件開發(fā)領(lǐng)域眾多,開發(fā)者和問題的領(lǐng)域有限,開發(fā)者和問題匹配度和參與度不為零的項較少,導(dǎo)致了融合匹配度和參與度矩陣較為稀疏。
圖1 問題-開發(fā)者初始值矩陣示意圖
問題-開發(fā)者匹配度和參與度形成的問題-開發(fā)者初始值仍然存在缺失數(shù)據(jù),本文采用自編碼器的協(xié)同過濾算法[6]對評分值進(jìn)行擬合。如圖2所示,設(shè)m個任務(wù)和n個開發(fā)者,任務(wù)-開發(fā)者評分矩陣R∈Rm×n,每一個開發(fā)者u∈U,任務(wù)集合t∈T,其中將缺失評分值的評分矩陣的一列輸入到自編碼器中,即可得到圖3擬合評分值。
圖2 自編碼器擬合圖
圖3 自編碼器擬合圖
擬合評分值表示為:
其中,r為原始問題-開發(fā)者初始評分值,y為隱含層表示,r?為經(jīng)自編碼器擬合后的問題-開發(fā)者評分值。V和W為自編碼器中的權(quán)重值參數(shù),μ和b為偏置參數(shù)是激活函數(shù)。
為了使得模型輸入輸出誤差最小,使用最小平方誤差來衡量擬合評分值和原始評分值之間的誤差:
為防止模擬過擬合,建立如下優(yōu)化目標(biāo)函數(shù):
對于一個輸入樣本參數(shù)更新過程如下:
(1)前向傳播:對每個輸入樣本,根據(jù)輸入計算,隱含層輸入Wr+μ、隱含層輸出y、輸出層輸入V·y+b和輸出層輸出r?。計算輸出誤差向量:
計算隱含層誤差向量:
由此可計算出:
其中wjk和vjk分別表示輸入層第k個節(jié)點和隱層第j個節(jié)點相連的權(quán)重參數(shù),vjk與wjk類似。
(2)參數(shù)更新:對m個樣本,l層的參數(shù)更新:
對于n個樣本,初始化θ中的參數(shù)為( )0,1 的隨機值,重復(fù)上述更新過程,即可求得θ。
融合開發(fā)者問答社區(qū)信息的專家推薦算法(Developer Community Information Fused Expert Recommendation,DCIFE_Rec),融合了問題和開發(fā)者的關(guān)聯(lián)度和開發(fā)者對問題的參與度,多方面挖掘了問題和開發(fā)者之間的關(guān)系,能夠有效地提高推薦的精度。圖4為融合開發(fā)者問答社區(qū)信息的專家推薦方法的處理流程,按照矩陣行為問題、矩陣列開發(fā)者、填充匹配度和參與度值,分別建立匹配度和參與度矩陣。
圖4 融合開發(fā)者問答社區(qū)信息的專家推薦方法
第1步提取開發(fā)者標(biāo)簽和問題標(biāo)簽,計算開發(fā)者和任務(wù)的關(guān)聯(lián)度,根據(jù)關(guān)聯(lián)度建立問題-開發(fā)者匹配度矩陣。
第2步根據(jù)開發(fā)者是否直接參與問題、開發(fā)者的答案是否提問題者接受以及該答案被其他開發(fā)者所贊同的次數(shù)計算開發(fā)者對問題的參與度,根據(jù)參與度建立問題-開發(fā)者參與度矩陣。
第3步融合開發(fā)者和問題的匹配度矩陣和參與度矩陣,得到問題對開發(fā)者評分值初始矩陣。
第4步利用自編碼器學(xué)習(xí)擬合缺失問題對開發(fā)者的評分值矩陣。
第5步按照評分值排序,推薦top-N專家。
為了驗證本文所提出的算法的有效性,截取2008年StackOverflow問答社區(qū)數(shù)據(jù)進(jìn)行分析,并與其他的推薦算法進(jìn)行比較分析。
數(shù)據(jù)集以表的形式提供。其中,Posts表包含了問題提交信息和問題的回答信息,可通過表的查詢,獲得問題標(biāo)簽數(shù)據(jù)、回答問題的開發(fā)者、回答被贊同的數(shù)量和回答是否被接受。Users表存儲了用戶信息、用戶標(biāo)簽。
為了衡量推薦系統(tǒng)的性能,本文選取的平均準(zhǔn)確度(Mean Average Precision,MAP)和覆蓋率(Coverage)兩個評價指標(biāo)。
平均準(zhǔn)確度用來衡量推薦結(jié)果準(zhǔn)確程度,平均準(zhǔn)確度的值越小,表示預(yù)測效果越好。平均準(zhǔn)確度的計算方式如下,l表示推薦列表的長度,dc表示正確推薦的開發(fā)者個數(shù),dw表示錯誤推薦的數(shù)量,包括把其他領(lǐng)域推薦給該問題的開發(fā)者個數(shù)。MAP可表示為:
覆蓋率主要衡量推薦結(jié)果的覆蓋范圍.覆蓋率定義被推薦的開發(fā)者占總開發(fā)者的比例,T為問題集合,U為開發(fā)者集合,u(t)表示推薦給問題的開發(fā)者集合,可以表示為:
為了驗證本文所提出的算法在預(yù)測效果提升和稀疏性處理,在準(zhǔn)確率和覆蓋率上對以下算法進(jìn)行了比較分析:
(1)BaseCF_Rec算法[8]是基于問題-開發(fā)者參與度形成的問題-開發(fā)者矩陣進(jìn)行的協(xié)同過濾推薦算法。BaseCF_Rec算法對原始問題-開發(fā)者矩陣評分值按照大小排序,生成top-N列表。
(2)MF_Rec算法[7]是基于問題-開發(fā)者參與度形成的問題-開發(fā)者矩陣進(jìn)行的矩陣分解算法。MF_Rec算法在問題-開發(fā)者矩陣上進(jìn)行矩陣分解出問題和開發(fā)者的隱語義表示,再通過隱含語義表示對評分值擬合,在擬合結(jié)果值上按照得分值排序,生成top-N列表。
(3)DCIFE_Rec算法是一種融合了問題與開發(fā)者關(guān)聯(lián)度和開發(fā)者對問題的參與度的自編碼器協(xié)同過濾算法。融合開發(fā)者問答社區(qū)信息的專家推薦方法利用問題和開發(fā)者標(biāo)簽計算匹配度,加權(quán)問題和開發(fā)者的關(guān)聯(lián)度,有效的緩解了矩陣的稀疏性。
為了防止模型對訓(xùn)練集數(shù)據(jù)過擬合,采用交叉驗證法,將實驗數(shù)據(jù)分為三份,每次取其中一份作為測試集,其他兩份作為訓(xùn)練集,θ最終結(jié)果為三次訓(xùn)練的平均值。模型訓(xùn)練參數(shù)設(shè)置如下表:?
表1 模型參數(shù)設(shè)置
表2 激活函數(shù)設(shè)置
在開發(fā)者推薦數(shù)量小的情況下,推薦正確率和覆蓋率偏低,隨著開發(fā)者推薦數(shù)量的增加,推薦的正確率和覆蓋率都有所增加。BaseCF_Rec推薦算法基于問題-開發(fā)者矩陣的評分值直接排序,沒有考慮問題和開發(fā)者的隱藏語義,推薦的準(zhǔn)確率較低。MF_Rec推薦算法由于其問題-開發(fā)者的稀疏性,矩陣分解擬合的結(jié)果不太理想。加權(quán)標(biāo)簽匹配度的自編碼器協(xié)同過濾推薦算法,由于其緩解了問題-開發(fā)者矩陣的稀疏性,推薦結(jié)果和覆蓋率相比BaseCF_Rec算法和MF_Rec算法高。
圖5 準(zhǔn)確度和覆蓋率指標(biāo)對比
本文提出的融合問答社區(qū)信息的專家推薦方法,通過問題標(biāo)簽和用戶標(biāo)簽匹配度、參與度,有效地緩解了傳統(tǒng)協(xié)同過濾算法的稀疏性,使用自編碼器,減少了模型訓(xùn)練時間,同時提升了模型性能。在以后的研究中,將綜合考慮用戶的活躍度、社交信息等信息,尋找更為精確的推薦算法。