于 旭,何亞東,梁宏濤,江 峰,杜軍威
(青島科技大學(xué) 信息科學(xué)技術(shù)學(xué)院,山東 青島 266061)
眾包的概念由Howe在2006年提出[1],指以公開呼叫的形式將原本由特定代理人執(zhí)行的任務(wù)外包給非特定的一群人。眾包并非針對軟件工程提出,但在軟件開發(fā)中得到廣泛應(yīng)用,軟件社區(qū)、眾包軟件平臺[2]等在眾包機制的推動下迅速發(fā)展。近年來涌現(xiàn)出TopCoder、ZhuBaJie等多個眾包軟件平臺[3],通過整合共享資源、降低準(zhǔn)入門檻的方式打破了傳統(tǒng)的軟件開發(fā)模式,為軟件工程領(lǐng)域帶來了新的發(fā)展契機[4]。
具體來說,眾包平臺的用戶分為開發(fā)者和任務(wù)發(fā)布者兩類:開發(fā)者在平臺中開發(fā)感興趣的軟件任務(wù),贏得豐厚的獎金;任務(wù)發(fā)布者通過平臺找到合適的開發(fā)者完成自己的需求。平臺開放的在線開發(fā)模式在為用戶帶來極大便利的同時,平臺中積累的大量類型復(fù)雜、結(jié)構(gòu)異質(zhì)的數(shù)據(jù)資源導(dǎo)致其信息超載問題[5]日益嚴(yán)重,此時,想要快速準(zhǔn)確地從平臺中篩選出合適的開發(fā)者或開發(fā)任務(wù)是相當(dāng)困難的。為了緩解信息超載問題,平臺需要部署推薦系統(tǒng)完成任務(wù)與開發(fā)者之間的正確匹配。然而現(xiàn)有眾包軟件平臺開發(fā)者推薦系統(tǒng)的研究[6-13]只考慮到少量平臺特征,推薦時直接采用Top-k的推薦模式,導(dǎo)致推薦覆蓋范圍太大、推薦精度不高,并且對開發(fā)者冷啟動問題的研究也不夠深入。
針對上述不足,本研究對傳統(tǒng)Top-k推薦模式進行改進,提出一種考慮興趣偏好的Top-k推薦列表生成方法,將個體推薦問題轉(zhuǎn)換為列別分類問題,為任務(wù)找到最合適的開發(fā)者,并提出兩種解決方案有效處理開發(fā)者冷啟動問題。具體來說,在充分考慮平臺特征的基礎(chǔ)上,首先提取任務(wù)特征和開發(fā)者列表綜合能力特征;然后利用4種不同的開發(fā)者列表分類器實現(xiàn)兩類特征的分類匹配,生成候選開發(fā)者推薦列表;最后根據(jù)候選列表內(nèi)開發(fā)者的相似度情況完成最終列表推薦。
為解決大數(shù)據(jù)背景下的信息超載問題,滿足用戶的各種個性化需求,推薦系統(tǒng)技術(shù)[14]應(yīng)運而生。傳統(tǒng)推薦系統(tǒng)能主動為用戶尋找感興趣的產(chǎn)品,減少用戶被動選擇的時間[15]。
推薦算法是影響推薦性能的最關(guān)鍵因素,現(xiàn)階段常用的推薦算法可以分為基于內(nèi)容、基于協(xié)同過濾和混合推薦算法3種[16]?;趦?nèi)容的推薦建立在項目的內(nèi)容信息上,從特征描述、用戶畫像等信息中提取用戶興趣生成推薦列表,由于這類模型對特征要求嚴(yán)格,因此特征提取不正確或不完全會嚴(yán)重影響模型性能[17-18]?;趨f(xié)同過濾推薦的優(yōu)點是不依賴物品內(nèi)容,利用用戶的各類反饋來挖掘用戶深層次的偏好,推薦結(jié)果具有多樣性,但是冷啟動問題和數(shù)據(jù)稀疏性問題是協(xié)同過濾算法的瓶頸[19-20]。混合推薦綜合考慮內(nèi)容信息與交互反饋信息,具有更好的推薦性能,模型參數(shù)過多、訓(xùn)練時間過長、所需數(shù)據(jù)太多是這類算法的弊端[21-22]。
眾包軟件平臺開發(fā)者推薦與傳統(tǒng)推薦差異較大,具體來說,對于已經(jīng)完成交易的任務(wù),開發(fā)者推薦系統(tǒng)不會將其再次推薦,并且傳統(tǒng)推薦系統(tǒng)是以評分矩陣為基礎(chǔ)的,不能直接套用到眾包軟件平臺,因為得到的評分矩陣極度稀疏,推薦結(jié)果將大打折扣。
針對眾包軟件平臺的特殊性,Tian等[6]通過隱含狄利克雷分布(Latent Dirichlet allocation,LDA)主題模型分析開發(fā)者的興趣偏好,利用開發(fā)者興趣和協(xié)作投票機制相結(jié)合的方式為任務(wù)推薦高質(zhì)量的專家。Mao等[7]將開發(fā)者分為可靠開發(fā)者與合適開發(fā)者兩類,結(jié)合開發(fā)者的聲譽特征給出任務(wù)與開發(fā)者的匹配關(guān)系和開發(fā)者推薦列表。Shao等[8]通過引入神經(jīng)網(wǎng)絡(luò)框架以充分挖掘特征間交互關(guān)系,并結(jié)合LSI語義分析方法推薦開發(fā)人員。Ahmed等[9]從語義的角度總結(jié)出文本塊,采用矩陣分解技術(shù)識別共享的潛在因子,找到可靠的回答專家。Zhu等[10]采用排序模型將平臺推薦問題轉(zhuǎn)化為排序問題,基于主題計算兩個任務(wù)以及任務(wù)和開發(fā)人員之間的相似性生成推薦列表。謝新強等[11]提出多特征融合的開發(fā)者推薦模型,考慮開發(fā)者的動態(tài)行為并將模糊理論引入模型,利用矩陣增強的方法緩解數(shù)據(jù)稀疏和冷啟動問題。此外,Wang等[12]和Fu等[13]分別提出針對開發(fā)人員的技能提高意識推薦框架和針對同類競爭關(guān)系的開發(fā)人員推薦模型。
本研究所提方法框架如圖1所示。推薦過程包括以下步驟:①爬取、收集眾包軟件平臺數(shù)據(jù);②對數(shù)據(jù)預(yù)處理之后進行特征提取,生成任務(wù)特征和開發(fā)者綜合能力特征表示;③將兩類特征輸入分類器進行開發(fā)者匹配推薦;④根據(jù)匹配結(jié)果輸出候選開發(fā)者推薦列表;⑤根據(jù)分類結(jié)果以及列表內(nèi)開發(fā)者的相似度高低,將最合適的開發(fā)者列表推薦給開發(fā)任務(wù),生成最終開發(fā)者推薦列表。
圖1 一種考慮興趣偏好的Top-k眾包開發(fā)者推薦方法框架
對于發(fā)布的軟件任務(wù),不同眾包軟件平臺存在不同的發(fā)布標(biāo)準(zhǔn),為了更全面地概括任務(wù)特征,提取6個特征來表示任務(wù),如表1所示。
表1 任務(wù)特征選擇
對于文本特征(標(biāo)題、需求),采用LDA模型[23]獲取任務(wù)的主題向量表示。LDA模型是一種基于貝葉斯理論的文檔主題生成模型,將每一篇文檔視為一個詞頻向量,從而將文本信息轉(zhuǎn)化為易于建模的數(shù)值信息。LDA模型公式:
(1)
其中:α、β為狄利克雷分布的語料級別先驗參數(shù);θ為文檔-主題概率分布;φ為主題-單詞概率分布;z、w為單詞級別主題分布,z由θ生成,w由z和β共同生成;N為單詞個數(shù)。θ、φ通過Gibbs采樣[24]估計得到:
(2)
LDA(Q)→Zγ=(t1,t2,…,tT),γ∈Ql,l=1,…,n。
對于數(shù)值特征(發(fā)布日期、截止日期、獎金),為了消除特征量綱不同的影響,采用Z-score標(biāo)準(zhǔn)化方法對特征值進行處理:
(4)
其中,μ為所有樣本數(shù)據(jù)的均值,σ為所有樣本數(shù)據(jù)的標(biāo)準(zhǔn)差。
對于分類特征(技術(shù)標(biāo)簽),利用二進制向量進行特征轉(zhuǎn)換,最終表示為0/1數(shù)值組成的n維向量,n的大小取決于技術(shù)標(biāo)簽的個數(shù),每一個技術(shù)標(biāo)簽代表一個特征。
(5)
2.3.1 初始開發(fā)者推薦列表構(gòu)造
傳統(tǒng)的開發(fā)者推薦模型中,開發(fā)者推薦列表的構(gòu)建是整個推薦流程的最后一步,根據(jù)模型輸出結(jié)果,基于某個評價指標(biāo)選取最優(yōu)的前Top-k個開發(fā)者完成推薦[25],這種方式簡單易行,使用比較普遍,但是Top-k推薦僅將開發(fā)者當(dāng)作獨立個體看待并推薦,不利于任務(wù)的高效、快速完成。因此,如果能在推薦之前找到開發(fā)者的隱藏關(guān)聯(lián)喜好,并基于此完成對開發(fā)者的初步分類篩選,在具體應(yīng)用時就可有針對性地進行組合,為新任務(wù)推薦專業(yè)能力最優(yōu)、興趣偏好相同的開發(fā)者,方便任務(wù)發(fā)布者對比選擇。
考慮到眾包軟件平臺的特點,為了更加合理、方便地生成推薦列表,本研究將開發(fā)者推薦列表的構(gòu)造工作提前至建模階段。分析發(fā)現(xiàn),在同一個軟件任務(wù)中提交過完成結(jié)果的開發(fā)者擁有相同隱藏興趣偏好的概率比未參與過同一任務(wù)的開發(fā)者要高,因此這類開發(fā)者具備共同擅長某種開發(fā)技能或某類任務(wù)的條件,可以構(gòu)成同一列表為同類新任務(wù)統(tǒng)一推薦。所以本研究將歷史完成任務(wù)作為劃分開發(fā)者列表的依據(jù),將參與同一任務(wù)的開發(fā)者看作同一推薦列表成員,根據(jù)推薦所需要的列表大小,每個列表由k名開發(fā)者組成。
在任務(wù)完成后,ZhuBaJie平臺和TopCoder平臺均允許任務(wù)發(fā)布者對開發(fā)者的提交成果打分,按分數(shù)排名得出最終獲勝者并分配獎金。認為得分越高的開發(fā)者越適合開發(fā)該任務(wù),也越能代表該任務(wù)的興趣偏好,所以在選取列表中的Top-k名開發(fā)者時,將參與該任務(wù)的開發(fā)者按得分從高到低的順序加入列表,直到滿足推薦所要求的列表人員數(shù)量為止。需要注意的是,ZhuBaJie平臺只展示最終獲勝者評分,因此在選取列表成員時,選用成果提交時間作為輔助指標(biāo),將最終獲勝者加入列表后,其余開發(fā)者按提交時間由早到晚順序加入列表。
2.3.2 開發(fā)者能力特征選擇
為了更好地分析開發(fā)者能力,從是否由開發(fā)者主動提供和開發(fā)過程中是否動態(tài)變化的角度,將開發(fā)者特征分為靜態(tài)特征和動態(tài)特征。與任務(wù)特征相同,選取3類特征作為開發(fā)者綜合能力特征的輸入,如表2。
表2 開發(fā)者特征選擇
在靜態(tài)特征中,對于文本特征(個人描述信息),考慮到開發(fā)者的自我描述信息普遍較短,不適合利用LDA處理方式,也不適合單獨利用常見的Word2vec模型和Doc2vec模型處理,因此利用Arora等[26]提出的SIF模型來處理。SIF模型是一個無監(jiān)督的短文本建模算法,主要思想是根據(jù)預(yù)設(shè)的超參數(shù)和詞頻給每個詞向量賦予權(quán)重,然后使用PCA算法移除句向量中的無關(guān)部分。SIF模型公式為:
(6)
利用最大似然估計方法估計句向量cs,似然函數(shù)
(7)
取對數(shù),最大化上式后,得到:
(8)
因此,個人描述集合W中的一篇描述i利用SIF模型最終表示為N維的特征向量Vi:
SIF(W)→Vi=(υ1,υ2,…,υN),i∈Wj,j=1,…,n。
(9)
對于靜態(tài)數(shù)值型特征(加入時間)和分類型特征(技能標(biāo)簽、位置、屬性),采用與任務(wù)模型相同的處理方式,分別利用公式(4)和(5)轉(zhuǎn)化。
動態(tài)特征只有數(shù)值型特征,其中ZhuBaJie平臺的標(biāo)準(zhǔn)化分數(shù)包括完成質(zhì)量、服務(wù)態(tài)度、工作速度3種評分,TopCoder平臺的標(biāo)準(zhǔn)化分數(shù)為所獲歷史評價總分,利用威爾遜模型和貝葉斯平均模型結(jié)合的思路解決分數(shù)的置信度問題[10]。剩余動態(tài)指標(biāo)用公式(4)處理。
對于活躍度,兩個平臺均利用近3個月內(nèi)完成任務(wù)數(shù)量表示,統(tǒng)計完成數(shù)量越多,證明表現(xiàn)越活躍;而誠信度在ZhuBaJie平臺中直接使用其誠信系統(tǒng)展示的量化分數(shù),Topcoder平臺中為Reliability指標(biāo)值;對于社交影響力,ZhuBaJie平臺中利用開發(fā)者被收藏數(shù)來度量,而Topcoder平臺通過開發(fā)者在相關(guān)平臺的被關(guān)注量體現(xiàn)。
2.3.3 開發(fā)者能力加權(quán)融合
為了準(zhǔn)確地包含列表內(nèi)多個開發(fā)者的能力表示,基于群體決策規(guī)則[18]將列表內(nèi)單個開發(fā)者的能力進行融合,生成開發(fā)者綜合能力特征,獲得開發(fā)者列表的整體偏好。采用加權(quán)融合策略,根據(jù)列表內(nèi)不同開發(fā)者對整體偏好的貢獻為每個開發(fā)者分配不同的權(quán)重。
具體來說,根據(jù)任務(wù)中開發(fā)者的得分情況為其賦予權(quán)重,得分最高者最適合開發(fā)該任務(wù),可以分配相對大的權(quán)重,得分越低,權(quán)重占比也相應(yīng)越少。加權(quán)綜合能力特征定義如下:
Dlist=λ1·d11+λ2·d21+…+λk·dk1,λ1·d12+λ2·d22+…+
λk·dk2,…,λ1·d1i+λ2·d2i+…+λk·dki。
(10)
其中:λk為開發(fā)者權(quán)重因子,滿足λ1+…+λk=1;dki為列表內(nèi)第k個開發(fā)者的第i個特征(非分類型)的取值,分類型特征直接綜合即可。
開發(fā)者推薦系統(tǒng)的目的是實現(xiàn)任務(wù)與開發(fā)者推薦列表的精準(zhǔn)匹配,本研究將推薦問題轉(zhuǎn)化為分類問題,如圖2所示。第一步,將每個任務(wù)本身的任務(wù)特征和與其匹配的開發(fā)者綜合能力特征相結(jié)合(以3個任務(wù)為例,每個推薦列表選取3個開發(fā)者),作為分類器的正分類樣本(分類標(biāo)簽為正);第二步,在3個任務(wù)之間進行兩兩交叉組合,構(gòu)造新的負分類樣本(分類標(biāo)簽為負,表示列表內(nèi)開發(fā)者不適合開發(fā)該任務(wù))。對于一個新任務(wù)而言,只需提取其任務(wù)特征,將任務(wù)特征與各個開發(fā)者綜合能力特征進行交叉組合后輸入分類器,根據(jù)輸出結(jié)果便可知該任務(wù)適合與哪個開發(fā)者推薦列表匹配。
圖2 分類匹配示意圖
為了確保獲得高質(zhì)量的推薦結(jié)果,與C4.5決策樹算法[27]、樸素貝葉斯(naive Bayesian,NB)算法[28]、支持向量機(support vector machine,SVM)算法[29]和因子分解機(factorization machine,F(xiàn)M)算法[30]進行分類比較,從中選取效果最佳的作為最終分類器。C4.5決策樹算法不需要任何領(lǐng)域知識和參數(shù)假設(shè),簡單實用;NB算法速度快,過程簡單,對缺失數(shù)據(jù)不敏感;SVM算法適合解決高維、非線性問題,泛化能力強;FM算法考慮特征之間的二階關(guān)聯(lián)關(guān)系,處理高維稀疏數(shù)據(jù)優(yōu)勢明顯。
經(jīng)過列表分類器訓(xùn)練之后,根據(jù)分類結(jié)果得到某一個新任務(wù)和多個開發(fā)者推薦列表之間的匹配關(guān)系,但可能不可避免地得到多個合適的開發(fā)者列表,因此,為了進一步挑選開發(fā)者,達到推薦質(zhì)量高、技能強、偏好相同的開發(fā)者列表的目的,利用Jaccard相似性系數(shù)[31]原理,通過技能標(biāo)簽特征計算列表內(nèi)開發(fā)者的相似性,將候選開發(fā)者推薦列表(即分類結(jié)果為正的列表)中相似度最高的列表作為最合適的開發(fā)者列表進行推薦。公式如下:
(11)
其中,d1和d2表示同一列表內(nèi)不同的兩個開發(fā)者,DT1和DT2表示開發(fā)者技能標(biāo)簽。例如TopCoder平臺中真實的開發(fā)者技能標(biāo)簽DT1= {′C#′,′SQL′, ′HTML5′, ′Python′, ′CSS′, ′PHP′},DT2= {′UML′, ′C++′, ′Python′, ′Java′, ′HTML5′},根據(jù)公式(11)可得相似度為2/9。
平臺中新注冊加入的開發(fā)者(即冷啟動開發(fā)者)沒有任何歷史行為和任務(wù)評價信息,如何完成該類開發(fā)者的推薦一直是眾包開發(fā)者推薦系統(tǒng)面臨的難題。本研究從不同角度出發(fā)提出兩種開發(fā)者冷啟動問題的解決方案。基本思想和思路如下:
一是最大匹配度方案,利用平臺活躍開發(fā)者的優(yōu)點來完成輔助推薦,將新開發(fā)者推薦到活躍開發(fā)者和其自身均擅長的任務(wù)中。對于一個新任務(wù),首先通過分類器后得到其與歷史開發(fā)者列表的匹配程度,將匹配結(jié)果以概率形式輸出,比較各列表屬于正樣本的概率(本文稱為匹配度),匹配度越大,證明越適合開發(fā)該任務(wù),然后從新開發(fā)者集合中找到與匹配度最大的歷史開發(fā)者列表相似度最高的新開發(fā)者即可。
二是最大差異度方案,利用平臺活躍開發(fā)者的缺點來完成反向推薦,將新開發(fā)者推薦到活躍開發(fā)者不擅長而其自身擅長的任務(wù)中。對于一個新任務(wù),通過比較各列表屬于負樣本的概率(本文稱為差異度),差異度越大,則證明越不適合開發(fā)該任務(wù)。然后找到與差異度最大的開發(fā)者列表相似度最低的新開發(fā)者即可。
計算冷啟動開發(fā)者與歷史開發(fā)者列表的相似度時,因為冷啟動開發(fā)者缺少動態(tài)特征,因此僅利用靜態(tài)特征構(gòu)建兩類開發(fā)者的靜態(tài)能力模型,選用余弦相似性理論[32]計算相關(guān)相似度
(12)
其中,dnew和Dlist分別表示冷啟動開發(fā)者和歷史開發(fā)者推薦列表,dnew_static和Dlist_static分別表示冷啟動開發(fā)者和開發(fā)者列表的靜態(tài)能力特征。
本研究提出的考慮興趣偏好的Top-k眾包開發(fā)者推薦方法的偽代碼描述如下:
輸入: 原始任務(wù)信息Info_Tt(t= 1,…,m1),原始開發(fā)者信息Info_Dd(d= 1,…,n1),新任務(wù)信息Info_Ttnew(tnew= 1,…,m2),新開發(fā)者信息Info_Ddnew(dnew=1,…,n2),C4.5算法、NB算法、SVM算法和FM算法的初始化參數(shù)信息Paraori。
輸出: 推薦列表相似度值,k名開發(fā)者推薦列表。
Step 1TASK1= Task_feature_extraction(Info_Tt|t= 1,…,m1) ∥公式(1)~(5),利用原始任務(wù)信息,提取歷史任務(wù)特征;
Step 2TASK2= Task_feature_extraction(Info_Ttnew|tnew= 1,…,m2) ∥公式(1)~(5),利用新任務(wù)信息,提取新任務(wù)特征特征;
Step 3DEV1= Developer_feature_extraction(Info_Dd|d= 1,…,n1) ∥公式(4)~(9),提取原始開發(fā)者信息,獲得歷史開發(fā)者能力特征;
Step 4DEV2= Developer_feature_extraction(Info_Ddnew|dnew= 1,…,n2) ∥公式(4)~(9),提取新開發(fā)者信息,獲得新開發(fā)者能力特征;
Step 5DEVlist= Developer_list_feature_ fusion(DEV1) ∥公式(10),采用加權(quán)融合策略生成歷史開發(fā)者綜合能力特征;
Step 6Paranew= Developer_list_classification_training(TASK1,DEVlist,Paraori) ∥利用C4.5算法、NB算法、SVM算法和FM算法作為開發(fā)者列表分類器,訓(xùn)練模型參數(shù);
Step 7 List_candidate= Developer_list_classification_prediction(TASK2,DEVlist,Paranew) ∥利用訓(xùn)練好的列表分類器,預(yù)測新任務(wù)與歷史開發(fā)者列表的匹配程度,生成候選開發(fā)者列表;
Step 8 List_recommendation_history = Developer_list_similarity(List_candidate) ∥公式(11),計算候選列表內(nèi)開發(fā)者相似度,為任務(wù)推薦相似度最高的歷史開發(fā)者列表;
Step 9 List_recommendation_new = similarity(List_candidate,DEV2) ∥公式(12),計算歷史開發(fā)者列表與新開發(fā)者的相似度;
Step 10 Return developerlist_history, developerlist_new。
利用Python中的Scrapy工具對ZhuBaJie平臺(中國最大競標(biāo)軟件服務(wù)眾包平臺https:∥www.zbj.com/)和TopCoder平臺(國外最知名競賽眾包軟件平臺https:∥www.topcoder.com/)中的信息進行爬取。
ZhuBaJie平臺的爬取思路為:①進入平臺主頁中的交易中心頁面,在一級分類選項中選擇與軟件開發(fā)相關(guān)的分類(包括軟件開發(fā)、網(wǎng)站開發(fā)和APP開發(fā)),在交易模式選項中選擇競標(biāo)、比稿和競賽模式,在需求狀態(tài)選項中選擇交易成功,設(shè)置成功后進入到已完成任務(wù)的頁面;②進入每個任務(wù)頁面,提取任務(wù)的相關(guān)信息和所有參與此項目的開發(fā)者信息(名稱、完成任務(wù)量、位置等);③進入每個開發(fā)者頁面,在人才檔案頁面中獲取開發(fā)者注冊時間、自我描述和被收藏量等信息,在交易評價頁面提取標(biāo)準(zhǔn)化分數(shù)(完成質(zhì)量、服務(wù)態(tài)度、工作速度)、近3月任務(wù)成交量等。
TopCoder平臺的任務(wù)是以競賽的形式發(fā)布,爬取與軟件開發(fā)相關(guān)的任務(wù)(包括系統(tǒng)設(shè)計、代碼編寫等):①進入Past challenges頁面,按最近完成排序后爬取所有相關(guān)的任務(wù)信息(任務(wù)標(biāo)題、報酬等);②進入每個任務(wù)頁面,在DETAILS頁面中提取任務(wù)需求描述信息和任務(wù)發(fā)布日期;③進入REGISTRANTS頁面,獲取所有注冊該任務(wù)的開發(fā)者信息(開發(fā)者名稱、開發(fā)者所獲名次和分數(shù));④進入每個開發(fā)者頁面,提取其所有靜態(tài)和動態(tài)信息。
為了保證數(shù)據(jù)集質(zhì)量,根據(jù)以下標(biāo)準(zhǔn)對歷史數(shù)據(jù)進行過濾:①信息不完整和不相關(guān)的任務(wù);②開發(fā)者數(shù)量少于5個的任務(wù)(即保證列表內(nèi)開發(fā)者數(shù)量k≥5);③信息不完整和重復(fù)開發(fā)者。本研究使用的數(shù)據(jù)集如表3所示。
表3 實驗數(shù)據(jù)集
采用精確率(Precision)、召回率(Recall)和F1-Score作為標(biāo)準(zhǔn)[30]來評估分類器的性能。
按照2.4節(jié)的步驟對兩個數(shù)據(jù)集中的數(shù)據(jù)進行交叉,構(gòu)造操作重構(gòu)數(shù)據(jù)集,然后設(shè)置4個訓(xùn)練比例{20%,40%,60%,80%},每次抽取不同訓(xùn)練比例的數(shù)據(jù)作為訓(xùn)練集,剩余數(shù)據(jù)作為測試集,對于每個訓(xùn)練比例,重復(fù)10次實驗,取算術(shù)均值作為最終結(jié)果。
使用Python的scikit-learn庫來實現(xiàn)分類。其中C4.5決策樹調(diào)用DecisionTreeClassifier類,樸素貝葉斯調(diào)用MultinomialNB類,SVM模型調(diào)用LinearSVC類,F(xiàn)M模型使用libFM工具(http:∥www.libfm.org/)實現(xiàn),LDA模型調(diào)用LdaModel類,使用gensim庫實現(xiàn)。迭代次數(shù)均設(shè)為200。開發(fā)者數(shù)量k=5,權(quán)重分配為λ1=0.45,λ2=0.25,λ3=0.15,λ4=0.1,λ5=0.05。其他參數(shù)設(shè)置如表4。
表4 對比實驗?zāi)P图皡?shù)設(shè)置
實驗測得不同列表分類模型的性能如表5所示。
由表5可知,4種模型在TopCoder數(shù)據(jù)集上的3個指標(biāo)性能比在ZhuBaJie數(shù)據(jù)集上普遍表現(xiàn)較好,因為按照本研究的數(shù)據(jù)篩選要求,TopCoder平臺可利用的數(shù)據(jù)比ZhuBaJie平臺多4倍,有利于模型訓(xùn)練和結(jié)果的預(yù)測。但是ZhuBaJie平臺的任務(wù)需求、開發(fā)者簡介等特征描述的非常詳細,有利于精準(zhǔn)建模,在一定程度上減小了最終分類性能的差距。
表5 不同分類模型性能比較
在2個數(shù)據(jù)集上,SVM模型的F1-Score指標(biāo)比C4.5模型平均提升了1.27倍和1.19倍,比NB模型平均提升了1.24倍和1.26倍。FM模型和SVM模型各有所長,F(xiàn)M模型考慮二階特征交互的方法比SVM模型表現(xiàn)好一些。
綜上,沒有一種模型在性能上完全優(yōu)于其他模型。在8組實驗中,F(xiàn)M模型的精確率指標(biāo)取得了6次最佳,召回率取得了5次最佳,F(xiàn)1-Score指標(biāo)取得了6次最佳。由此認為FM模型是整體表現(xiàn)最好的分類器。下文選用FM模型作為開發(fā)者列表分類器。
采用準(zhǔn)確率(accuracy)[11]和覆蓋率(coverage)[11]作為推薦模型的評估標(biāo)準(zhǔn)。
歷史開發(fā)者實驗,訓(xùn)練集的原始數(shù)據(jù)集按80%和20%比例隨機劃分,將80%比例的數(shù)據(jù)用于訓(xùn)練,而后將其按照2.4節(jié)的步驟交叉構(gòu)造后作為訓(xùn)練集。將20%比例中每個任務(wù)的任務(wù)特征與每個列表綜合能力特征兩兩搭配后構(gòu)建測試集。重復(fù)10次實驗,將算術(shù)均值作為最終結(jié)果。
冷啟動開發(fā)者實驗,測試集挑選滿足以下條件的任務(wù):任務(wù)提交成果的開發(fā)者中存在新加入開發(fā)者,無任何歷史評價信息,靜態(tài)特征完整且最終所獲評分位于前5名(本文認為前5名開發(fā)者適合開發(fā)該任務(wù))。最終,ZhuBaJie數(shù)據(jù)集得到398個任務(wù)、477個新開發(fā)者,TopCoder數(shù)據(jù)集得到1 699個任務(wù)、2 101個新開發(fā)者。將挑選出的任務(wù)特征與歷史開發(fā)者列表特征交叉搭配后構(gòu)建測試集,剩余數(shù)據(jù)全部用于訓(xùn)練集。重復(fù)10次實驗,將算術(shù)均值作為最終結(jié)果。
所用FM模型的開發(fā)者列表內(nèi)成員數(shù)量k分別取值3、4、5。k=3時,λ1=0.6,λ2=0.3,λ3=0.1;k=4時,λ1=0.5,λ2=0.3,λ3=0.15,λ4=0.05;k=5時,λ1=0.45,λ2=0.25,λ3=0.15,λ4=0.1,λ5=0.05。NN[8]、LR[10]和MFD[11]的實驗參數(shù)設(shè)置分別如表6~8。
表6 NN模型參數(shù)設(shè)置
表7 LR模型參數(shù)設(shè)置
表8 MFD模型參數(shù)設(shè)置
4個模型的準(zhǔn)確率對比如圖3所示。可以看出:由于NN模型忽略開發(fā)者側(cè)的眾多特征,僅利用任務(wù)側(cè)特征完成推薦,效果最差;與LR模型相比,MFD模型利用開發(fā)者行為特征將矩陣空缺項填補,減少了數(shù)據(jù)稀疏性帶來的影響,提升效果比較明顯。本研究所提的利用FM模型分類預(yù)測的方法在兩個數(shù)據(jù)集上都比采用其他模型的方法有更好的表現(xiàn),證明本方法的推薦思路是可行的,擅長同一類型任務(wù)的開發(fā)者之間不是獨立的,在技能、興趣等方面擁有較強的關(guān)聯(lián)性。
圖3 準(zhǔn)確率對比
4個模型的覆蓋率對比如圖4所示,可以看出:在兩個數(shù)據(jù)集上MFD模型的覆蓋率都比較低,而NN模型的覆蓋率較其準(zhǔn)確率提升較大,本研究所提FM模型的平均覆蓋率是NN模型的1.02倍、LR模型的1.28倍、MFD模型的1.41倍,證明了本研究方法的有效性,可以兼顧到更多的開發(fā)者,而非僅僅“熱門”開發(fā)者。
圖4 覆蓋率對比
冷啟動解決方案結(jié)果如圖5所示,可以看出:①隨著推薦冷啟動開發(fā)者數(shù)量增加,兩種解決方案都可在一定程度上緩解冷啟動問題。綜合比較,本研究所提方法在最大匹配度方案下的冷啟動處理能力優(yōu)于最大差異度方案;②總體推薦性能達到預(yù)期標(biāo)準(zhǔn),覆蓋率指標(biāo)取得的效果要優(yōu)于準(zhǔn)確率指標(biāo)。ZhuBaJie數(shù)據(jù)集的平均準(zhǔn)確率為0.405、平均覆蓋率為0.462,TopCoder數(shù)據(jù)集平均準(zhǔn)確率為0.388、平均覆蓋率為0.407,證明本研究所提方法結(jié)合兩種冷啟動解決方案能夠較好地處理新加入開發(fā)者的推薦問題,這對一個完善的眾包軟件平臺開發(fā)者推薦系統(tǒng)來說至關(guān)重要。
圖5 冷啟動解決方案對比
為充分提取眾包軟件平臺中任務(wù)與開發(fā)者的異構(gòu)性特征,提出一種考慮興趣偏好的Top-k眾包開發(fā)者推薦方法,并將開發(fā)者個體推薦問題轉(zhuǎn)化為開發(fā)者列表分類問題,實現(xiàn)新任務(wù)與不同類型開發(fā)者之間的精準(zhǔn)推薦。相較于傳統(tǒng)的基于內(nèi)容的開發(fā)者方法,本方法可以將內(nèi)容與評分有效結(jié)合,更好地解決數(shù)據(jù)稀疏和開發(fā)者冷啟動問題。對爬取的ZhuBaJie和TopCoder平臺數(shù)據(jù)集進行了實驗,驗證了本研究方法的有效性。在未來的工作中,將對平臺冷啟動進行深入研究,進一步提升推薦算法的性能。