慕江林,冉彪
(西華大學計算機與軟件工程學院,成都 610039)
軟件開發者數量的增加促使了開發者社區規模變大。開發者社區StackOverflow上的用戶量已經超過了600萬,問答帖子超過1300萬,每天產生的問答超過5萬。提問者可在開發者社區中搜索回答。當提問者沒有搜索到滿意的帖子,提問者可發起新問題,等待領域相關的專家開發者回答。然而,開發者問答社區存在大量不同領域的問題帖,專家開發者需要耗費大量的經歷篩選出自己領域相關的問題帖并給出相應回答。因此,大量問題貼不能獲得滿意回答,專家開發者無法提供領域內幫助,導致用戶量減少、滿意度和認可度下降。在資源數量龐大的情況下,如何為新問題貼提供相關領域內的專家開發者尤為重要。
對于開發者問答社區的專家推薦,研究人員抽取問題標簽、標題和內容和專家標簽、歷史活躍領域等信息建立問題主題和專家主題模型,從而計算問題和專家之間的主題匹配度推薦。Martin等[1]基于KNN方法分析缺陷報告中潛在的主題和開發者特征的相似關系來推薦最佳缺陷修復者;Xin等[2]提取多個主題,計算跨域主題間的相似性進行跨域協作推薦;Mao等[3]基于開發者歷史完成的任務和開發者聲譽,給出了開發任務匹配模型,利用開發者的聲譽增強進行開發者推薦;Y Tian等[4]對StackOverflow上開發者的歷史數據分析,基于LDA模型,發現用戶潛在興趣,最終基于用戶興趣和協作投票為問題推薦專家。上述的專家推薦算法是基于主題之間的相似度推薦。基于文本抽取的主題詞面臨著關鍵詞提取困難、噪聲等問題,難以提取能夠準備描述問題的關鍵詞。問題主題詞對比專家的描述信息詞匯,即使兩者有語義相似的詞匯而詞結構不同詞被視為不同詞匯,導致了推薦結果的準確率降低。
針對上訴問題,本文提出一種融合開發者問答社區信息的專家推薦方法。通過引入匹配度和參與度,將兩者進行融合,結合自編碼器模型,學習問題和專家之間的非線性語義關聯,擬合問題對開發者的評分,最終推薦top-N專家。
問題和開發者的關系主要表現在兩個方面:開發者標簽和問題標簽關聯程度,開發者是否直接參與該問題。開發者標簽信息是對發者對自身知識能力的總結評價,反映了開發者擅長的興趣的領域,對開發者的能力評價有重要的作用。通過提取開發者標簽和問題標簽,計算相似度得出問題-開發者關聯度矩陣。根據開發者是否直接參與到問題,以及其他開發者對該開發者參與問題打分,形成問題-開發者評分矩陣。
問題與開發者的關聯度,度量了開發者從事領域與問題的領域的相關程度,作為開發者是否能夠準確回答問題的重要評價指標之一。每個開發者都有與之匹配的開發者標簽,開發者標簽由開發者本人填寫,反映了開發者的知識結構。提問者提出問題時,選擇任務標簽信息來標識該任務所屬的領域,使得同領域的開發者更容易發現、處理該問題。開發者標簽和問題標簽,通過集合來表示,通過Jaccard相關系數計算開發者標簽集合和問題標簽集合的關聯度。定義開發者標簽集合:問題標簽集合Tq={tq1,tq2,...tqn},根據Jaccard相似度系數,問題-開發者相似度關聯度計算如下:

dr表示問題和開發者的匹配度,當dr越大,關聯度越高。例如,開發者標簽問題標簽為根據公式,匹配度sd=0.167。
開發者對問題的參與度展示了開發者與問題的直接關聯,是評價是否針對該問題推薦開發者的直接指標。問題對開發者的直接評分,取決于開發者參與該問題獲得其他開發者的贊同數和是否被該問題的發起者所接受。問題可由多個開發者共同參與,每個開發者給出自己的回答,針對該回答,其他開發者對該回答進行評價,根據被贊同數量進行評分值建立。如果該問題的贊同數目vc分別在0-50,50-100,100以上,則分別評為0.2分,0.6分,0.9分。任務發起者選取符合問題的答案來確定最佳答案。同一問題,接受者只能為一位開發者,va表示該答案是否為提問者所接受,不接受為最佳答案評分0.3分和接受為最佳答案評0.7分。兩個方面綜合評價問題對開發者的評分,分別為λ1+λ2=1,其中最終開發者對問題的評分可由如下公式計算:

例如,問題有3個開發者u1,u2,u3回答,u1給出的回答為問題的接受答案,u1,u2,u3獲得贊同數量則u1,u2,u3對于問題的相應 得 分 為取。
問題對開發者的評分值由綜合問題與開發者的匹配度和問題開發者的參與度組成,通過選取適當的權重參數,得出問題-開發者評分值。定義σ1+σ2=1,問題-開發者初始得分值計算方式如下:

圖2給出了問題-開發者初始值矩陣示意圖,實心原點表示問題和開發者的僅有關聯度值;空心圓表示問題對于開發者的僅有參與度值;空心圓中一點表示融合關聯度與參與度后的值;空心圓中叉符號表示擬合后的評分值。軟件開發領域眾多,開發者和問題的領域有限,開發者和問題匹配度和參與度不為零的項較少,導致了融合匹配度和參與度矩陣較為稀疏。

圖1 問題-開發者初始值矩陣示意圖
問題-開發者匹配度和參與度形成的問題-開發者初始值仍然存在缺失數據,本文采用自編碼器的協同過濾算法[6]對評分值進行擬合。如圖2所示,設m個任務和n個開發者,任務-開發者評分矩陣R∈Rm×n,每一個開發者u∈U,任務集合t∈T,其中將缺失評分值的評分矩陣的一列輸入到自編碼器中,即可得到圖3擬合評分值。

圖2 自編碼器擬合圖

圖3 自編碼器擬合圖
擬合評分值表示為:

其中,r為原始問題-開發者初始評分值,y為隱含層表示,r?為經自編碼器擬合后的問題-開發者評分值。V和W為自編碼器中的權重值參數,μ和b為偏置參數是激活函數。
為了使得模型輸入輸出誤差最小,使用最小平方誤差來衡量擬合評分值和原始評分值之間的誤差:

為防止模擬過擬合,建立如下優化目標函數:

對于一個輸入樣本參數更新過程如下:
(1)前向傳播:對每個輸入樣本,根據輸入計算,隱含層輸入Wr+μ、隱含層輸出y、輸出層輸入V·y+b和輸出層輸出r?。計算輸出誤差向量:

計算隱含層誤差向量:

由此可計算出:

其中wjk和vjk分別表示輸入層第k個節點和隱層第j個節點相連的權重參數,vjk與wjk類似。
(2)參數更新:對m個樣本,l層的參數更新:

對于n個樣本,初始化θ中的參數為( )0,1 的隨機值,重復上述更新過程,即可求得θ。
融合開發者問答社區信息的專家推薦算法(Developer Community Information Fused Expert Recommendation,DCIFE_Rec),融合了問題和開發者的關聯度和開發者對問題的參與度,多方面挖掘了問題和開發者之間的關系,能夠有效地提高推薦的精度。圖4為融合開發者問答社區信息的專家推薦方法的處理流程,按照矩陣行為問題、矩陣列開發者、填充匹配度和參與度值,分別建立匹配度和參與度矩陣。

圖4 融合開發者問答社區信息的專家推薦方法
第1步提取開發者標簽和問題標簽,計算開發者和任務的關聯度,根據關聯度建立問題-開發者匹配度矩陣。
第2步根據開發者是否直接參與問題、開發者的答案是否提問題者接受以及該答案被其他開發者所贊同的次數計算開發者對問題的參與度,根據參與度建立問題-開發者參與度矩陣。
第3步融合開發者和問題的匹配度矩陣和參與度矩陣,得到問題對開發者評分值初始矩陣。
第4步利用自編碼器學習擬合缺失問題對開發者的評分值矩陣。
第5步按照評分值排序,推薦top-N專家。
為了驗證本文所提出的算法的有效性,截取2008年StackOverflow問答社區數據進行分析,并與其他的推薦算法進行比較分析。
數據集以表的形式提供。其中,Posts表包含了問題提交信息和問題的回答信息,可通過表的查詢,獲得問題標簽數據、回答問題的開發者、回答被贊同的數量和回答是否被接受。Users表存儲了用戶信息、用戶標簽。
為了衡量推薦系統的性能,本文選取的平均準確度(Mean Average Precision,MAP)和覆蓋率(Coverage)兩個評價指標。
平均準確度用來衡量推薦結果準確程度,平均準確度的值越小,表示預測效果越好。平均準確度的計算方式如下,l表示推薦列表的長度,dc表示正確推薦的開發者個數,dw表示錯誤推薦的數量,包括把其他領域推薦給該問題的開發者個數。MAP可表示為:

覆蓋率主要衡量推薦結果的覆蓋范圍.覆蓋率定義被推薦的開發者占總開發者的比例,T為問題集合,U為開發者集合,u(t)表示推薦給問題的開發者集合,可以表示為:

為了驗證本文所提出的算法在預測效果提升和稀疏性處理,在準確率和覆蓋率上對以下算法進行了比較分析:
(1)BaseCF_Rec算法[8]是基于問題-開發者參與度形成的問題-開發者矩陣進行的協同過濾推薦算法。BaseCF_Rec算法對原始問題-開發者矩陣評分值按照大小排序,生成top-N列表。
(2)MF_Rec算法[7]是基于問題-開發者參與度形成的問題-開發者矩陣進行的矩陣分解算法。MF_Rec算法在問題-開發者矩陣上進行矩陣分解出問題和開發者的隱語義表示,再通過隱含語義表示對評分值擬合,在擬合結果值上按照得分值排序,生成top-N列表。
(3)DCIFE_Rec算法是一種融合了問題與開發者關聯度和開發者對問題的參與度的自編碼器協同過濾算法。融合開發者問答社區信息的專家推薦方法利用問題和開發者標簽計算匹配度,加權問題和開發者的關聯度,有效的緩解了矩陣的稀疏性。
為了防止模型對訓練集數據過擬合,采用交叉驗證法,將實驗數據分為三份,每次取其中一份作為測試集,其他兩份作為訓練集,θ最終結果為三次訓練的平均值。模型訓練參數設置如下表:?

表1 模型參數設置

表2 激活函數設置
在開發者推薦數量小的情況下,推薦正確率和覆蓋率偏低,隨著開發者推薦數量的增加,推薦的正確率和覆蓋率都有所增加。BaseCF_Rec推薦算法基于問題-開發者矩陣的評分值直接排序,沒有考慮問題和開發者的隱藏語義,推薦的準確率較低。MF_Rec推薦算法由于其問題-開發者的稀疏性,矩陣分解擬合的結果不太理想。加權標簽匹配度的自編碼器協同過濾推薦算法,由于其緩解了問題-開發者矩陣的稀疏性,推薦結果和覆蓋率相比BaseCF_Rec算法和MF_Rec算法高。

圖5 準確度和覆蓋率指標對比
本文提出的融合問答社區信息的專家推薦方法,通過問題標簽和用戶標簽匹配度、參與度,有效地緩解了傳統協同過濾算法的稀疏性,使用自編碼器,減少了模型訓練時間,同時提升了模型性能。在以后的研究中,將綜合考慮用戶的活躍度、社交信息等信息,尋找更為精確的推薦算法。