楊莉云,顏遠(yuǎn)海
(廣州華商學(xué)院 數(shù)據(jù)科學(xué)學(xué)院,廣州 511300)
隨著互聯(lián)網(wǎng)的普及和網(wǎng)絡(luò)信息資源的不斷增多,用戶在使用互聯(lián)網(wǎng)時往往面臨信息過載的問題:信息內(nèi)容太多,用戶真正需要的信息被大量垃圾信息淹沒。個性化推薦技術(shù)作為應(yīng)對信息過載的重要手段,在互聯(lián)網(wǎng)行業(yè)有普遍應(yīng)用。常用的個性化推薦技術(shù)包括協(xié)同過濾推薦、基于內(nèi)容的推薦、混合推薦、基于關(guān)聯(lián)規(guī)則的推薦等[1]。其中協(xié)同過濾推薦算法是推薦系統(tǒng)中應(yīng)用最廣泛、最成功的推薦技術(shù)之一[2]。
傳統(tǒng)的協(xié)同過濾算法以用戶對項目的評分向量作為用戶描述文件,由于評分?jǐn)?shù)據(jù)的稀疏性,用戶相似度計算往往存在較大的偏差,影響了推薦的質(zhì)量。為此人們?yōu)榻鉀Q數(shù)據(jù)稀疏性問題進(jìn)行了大量工作,提出的方法大致可分為3類:第1類以Slop one算法為代表,利用項目之間的評分偏差和用戶已評分項,預(yù)測未評分項的評分[3]。這種算法在計算目標(biāo)項目的評分時參考了所有用戶對所有項目的評分,效率較低。Saeed等[4]將用戶未評分項也用于目標(biāo)項評分預(yù)測,解決Slop one算法數(shù)據(jù)稀疏性問題。Shaw等[5]在計算項目間評分偏差時,加入用戶相似度系數(shù)作為權(quán)重。王志遠(yuǎn)等[6]在計算項目評分時只考慮與目標(biāo)用戶相似的用戶以及與目標(biāo)項目相似的項目的評分偏差。向小東等[7]將Slop one算法與用戶特征屬性相結(jié)合,先用Slop one算法預(yù)測未評分項評分,填入評分矩陣,計算用戶間的相似度,同時考慮用戶自身特征屬性的相似度,取兩者的加權(quán)平均值作為最終相似度。第2類是基于降維的方法。其主要原理是根據(jù)用戶評分矩陣推斷出用戶和物品的隱語義向量,根據(jù)隱語義向量進(jìn)行推薦。Sarwar等[8]利用奇異值分解技術(shù)解決用戶評分矩陣的數(shù)據(jù)稀疏性問題,可有效地解決同義詞問題,提高推薦系統(tǒng)的伸縮能力。董立巖等[9]采用交替最小二乘矩陣分解算法對原始評分矩陣進(jìn)行分解,再利用k-means++算法對用戶進(jìn)行聚類。Ji等[10]先根據(jù)用戶的行為篩選出用戶可能感興趣的項目,再利用基于矩陣分解的協(xié)同過濾算法獲取最終推薦結(jié)果。第3類是加入標(biāo)簽、屬性等內(nèi)容特征的混合推薦方法。孫傳明等[11]引入項目標(biāo)簽信息,計算項目間的標(biāo)簽相似度,改進(jìn)了基于項目的協(xié)同過濾算法。魏玲等[12]將用戶個人信息、交易信息、偏好信息和行為信息作為標(biāo)簽,對用戶畫像,計算用戶間的相似度。張炎亮等[13]從用戶自然屬性、內(nèi)容偏好、評分評論3個維度對用戶畫像,作為用戶聚類的基礎(chǔ)。董立巖等[14]將用戶評分矩陣和項目屬性矩陣轉(zhuǎn)化為用戶-項目屬性偏好矩陣,再結(jié)合項目權(quán)重計算用戶間的相似度。吳佳婧等[15]在計算項目相似性時將項目屬性差異作為權(quán)重,利用用戶已評分項預(yù)測未評分項評分。以上文獻(xiàn)各自從某些方面改進(jìn)了協(xié)同過濾算法,但在描述用戶興趣方面仍存在不直觀、不全面和不能動態(tài)反映用戶興趣變化等問題。
筆者針對協(xié)同過濾算法的問題,將項目的屬性信息和用戶對項目的標(biāo)簽信息引入推薦系統(tǒng),將用戶對項目的評分轉(zhuǎn)化為用戶對項目屬性值和標(biāo)簽的評分,更直觀地描述了用戶的偏好信息。由于項目屬性值和主要標(biāo)簽的數(shù)量相對項目數(shù)少得多,此算法有效地解決了協(xié)同過濾算法的數(shù)據(jù)稀疏性問題。同時,考慮用戶興趣隨時間變化的特性,在構(gòu)建用戶描述文件時加入時間權(quán)重,提高了用戶描述文件的可信度及最終的推薦效果。
用戶相似度計算是協(xié)同過濾算法的關(guān)鍵,決定推薦的質(zhì)量。相似性度量方法分為數(shù)值相似性、結(jié)構(gòu)相似性、綜合相似性[16]。
數(shù)值相似性常用的包括余弦相似性(Cosine)、修正的余弦相似性(Acosine:Adjusted Cosine)和相關(guān)相似性也稱皮爾遜相似性(Pearson:Pearson Correlation Coefficient)[17]。余弦相似性不考慮不同用戶評分標(biāo)準(zhǔn)的差異。修正的余弦相似性考慮了這一點,將每項都減去該用戶的評分均值,用相對評分計算用戶間的相似度。相關(guān)相似性在修正的余弦相似性的基礎(chǔ)上,只考慮兩用戶共同評分的項目。
余弦相似性
(1)
其中I表示項目全集,Rui、Rvi分別表示用戶u和用戶v對項目i的評分。
修正的余弦相似性
(2)
相關(guān)相似性
(3)
其中Iuv表示用戶u和用戶v共同評分項目。
結(jié)構(gòu)相似性以Jaccard相似性為代表,給定兩個集合A,B,Jaccard系數(shù)定義為A與B交集的大小與并集大小的比值。Jaccard相似性在度量用戶間的相似性時,可使用兩用戶評價過的項目本身計算,也可使用兩用戶評價過的項目的屬性值或標(biāo)簽計算。Jaccard相似性反映用戶對不同屬性、標(biāo)簽的偏好,只用戶選擇的次數(shù),與評分無關(guān)。計算公式如下
(4)
其中Iu、Iv分別表示用戶u、用戶v評價過的項目、屬性值或標(biāo)簽。
綜合相似性在數(shù)值相似性和結(jié)構(gòu)相似性的基礎(chǔ)上對相似性計算方法進(jìn)行改進(jìn)。文獻(xiàn)[18]將相關(guān)相似性與Jaccard相似性的乘積作為用戶間相似性度量標(biāo)準(zhǔn)。
傳統(tǒng)的基于用戶的協(xié)同過濾算法分為獲取用戶描述文件、找最近鄰居、評分預(yù)測、推薦產(chǎn)生4個步驟。
1) 獲取用戶描述文件。將用戶對項目的評分作為用戶描述文件,每個用戶i用向量Ui(ri1,ri2,…,rin)表示,rj表示用戶i對項目j的評分,n表示項目總數(shù)。
2) 找最近鄰居。計算用戶間的相似性,對其按從高到低的順序排序,選取相似性最高的前k個用戶作為目標(biāo)用戶的鄰居。用戶相似性計算方法有多種(見式(1)~式(4)),可選擇其中的某一個公式或綜合應(yīng)用多個公式計算用戶間的相似性。
3) 評分預(yù)測。根據(jù)目標(biāo)用戶的平均評分和最近鄰居的評分預(yù)測目標(biāo)用戶未評分項的評分如下
(5)
4) 推薦產(chǎn)生。根據(jù)目標(biāo)用戶對所有未評分項的評分預(yù)測,選取預(yù)測評分最高的前N個項目作為推薦項,推薦給目標(biāo)用戶。
用戶描述文件是計算用戶相似度的依據(jù),是協(xié)同過濾算法的關(guān)鍵。融合標(biāo)簽和屬性信息的混合推薦算法從兩個方面描述用戶興趣:其一,根據(jù)項目的屬性信息,計算用戶對每個屬性值的評分,將用戶對項目的偏好轉(zhuǎn)化成用戶對項目屬性值的偏好;其二,根據(jù)用戶對項目貼的標(biāo)簽,匯總項目的標(biāo)簽信息,選擇出現(xiàn)頻率較高的標(biāo)簽作為項目的主要標(biāo)簽,再根據(jù)用戶評分較高的影片的標(biāo)簽值,計算用戶對每個標(biāo)簽的偏好。對項目繁多的推薦系統(tǒng),由于項目屬性值和主要標(biāo)簽數(shù)量相對于項目數(shù)少很多,此算法既可以直觀反映用戶興趣,又解決了用戶評分?jǐn)?shù)據(jù)稀疏性的問題。同時,考慮用戶興趣是變化的,在計算用戶對屬性或標(biāo)簽偏好時加入時間權(quán)重,時間越靠后,權(quán)重越高,使算法可動態(tài)反映用戶興趣隨時間的變化。算法流程如圖1所示。
圖1 融合標(biāo)簽和屬性信息的混合推薦算法流程圖Fig.1 Flow chart of hybrid recommendation algorithm based on tags and attributes
與傳統(tǒng)的基于用戶的協(xié)同過濾算法類似,融合標(biāo)簽和屬性信息的混合推薦算法也分為獲取用戶描述文件、找目標(biāo)用戶鄰居、評分預(yù)測和推薦產(chǎn)生4個步驟。
1) 獲取用戶描述文件。
輸入:用戶-項目標(biāo)簽文件、用戶-項目評分文件、項目屬性文件。
輸出:用戶對標(biāo)簽評分矩陣、用戶對屬性值評分矩陣。
① 讀入用戶-項目標(biāo)簽文件,獲取用戶-項目標(biāo)簽矩陣L(m,n),其中m表示用戶數(shù),n表示項目數(shù)。
② 對每個項目j,計算每個標(biāo)簽出現(xiàn)的次數(shù),按出現(xiàn)頻次從高到低的順序?qū)?biāo)簽排序,取出現(xiàn)頻次大于1的前5個標(biāo)簽作為該項目的標(biāo)簽集Ti。
③ 讀入用戶-項目評分文件,獲取用戶-項目評分矩陣R(m,n)。
④ 對每個用戶u,找出其評分大于等于4的所有項目集Iu,作為用戶i偏好的項目集。
⑤ 計算用戶u對每個標(biāo)簽t的偏好值fu,t,構(gòu)建用戶對標(biāo)簽偏好矩陣。
(6)
其中Dui表示用戶u評價項目i的時間與用戶u最早評價某項目的時間間隔,Lu表示用戶u使用該系統(tǒng)的時間跨度。α∈(0,1)表示權(quán)重指數(shù),α值越大,時間因素對用戶偏好的影響越大。
⑥ 讀入項目屬性文件,獲取每個項目的屬性集Ai。
⑦ 根據(jù)用戶-項目評分文件,對每個用戶u,找出其評價過的所有項目集Iu,再由每個項目的屬性集Ai,計算用戶u對每個屬性值a的評分值fu,a,構(gòu)建用戶對屬性值評分矩陣。
(7)
其中Rui表示用戶u對項目i的評分,|Iua|表示用戶u評價過的、具有屬性值a的項目數(shù)。
此步驟計算量大,耗時較長,可周期性、離線進(jìn)行,得到的用戶-標(biāo)簽評分矩陣、用戶-屬性值評分矩陣定期更新。
2) 找最近鄰居。根據(jù)步驟1)得到的用戶對標(biāo)簽偏好矩陣、用戶對屬性值評分矩陣,利用余弦相似性(見式(1))分別計算用戶之間基于標(biāo)簽的相似性Ssim(u,v)tag和基于屬性值的相似性Ssim(u,v)attribute。用戶間最終相似性由這兩個相似性加權(quán)得到,如下
Ssim(u,v)=Ssim(u,v)tag+(Ssim(u,v)attribute)β
(8)
根據(jù)基于標(biāo)簽的相似性和基于屬性值的相似性的計算結(jié)果,若兩者方差接近,可取β=1;若基于標(biāo)簽的相似性方差明顯大于基于屬性值的相似性,可取β>1,否則,取β<1。對每個用戶,將其他用戶按與其相似性從高到低排序,選擇前k個用戶作為其最近鄰居。
3) 評分預(yù)測。此步驟和傳統(tǒng)基于用戶的協(xié)同過濾算法評分預(yù)測方法相同,如式(5)所示。
4) 推薦產(chǎn)生。根據(jù)評分預(yù)測,選取預(yù)測評分最高的前N個項目推薦給目標(biāo)用戶。
筆者選用個性化推薦領(lǐng)域廣泛使用的movielens-25m數(shù)據(jù)集進(jìn)行驗證。MovieLens由明尼蘇達(dá)大學(xué)GroupLens研究小組提供,包含用戶對電影的評分信息、電影信息和標(biāo)簽信息等,包含MovieLen-25m、MovieLen-10m、MovieLens-100k、MovieLens-latest-small等多個版本。MovieLen-25m數(shù)據(jù)集發(fā)布于2019年,包含162 000用戶對62 000部電影的2 500萬條評分記錄和100萬條標(biāo)簽記錄。由于筆者考慮用戶偏好會隨時間發(fā)生改變,如果用戶使用系統(tǒng)的時間過短,則無法驗證時間因素的影響。因此,在評分文件和標(biāo)簽文件中剔除了用戶活動的時間跨度小于4年的記錄,篩選出包含796個用戶、26 925部影片、317 171個標(biāo)簽、750 046條評分記錄和505 221條標(biāo)簽記錄的數(shù)據(jù)集。每部影片只保留出現(xiàn)頻次大于1且頻次最高的前5個標(biāo)簽,最終的標(biāo)簽數(shù)量為7 730個。筆者使用的3張數(shù)據(jù)表的結(jié)構(gòu)如表1所示。
筆者將用戶評分?jǐn)?shù)據(jù)集以評分時間先后,按8 ∶2比例劃分成訓(xùn)練集和測試集。對每個用戶,早期80%的評分?jǐn)?shù)據(jù)放在訓(xùn)練數(shù)據(jù)集中,后期20%的評分?jǐn)?shù)據(jù)放在測試數(shù)據(jù)集中。
目前學(xué)術(shù)界主要采用預(yù)測準(zhǔn)確度和分類準(zhǔn)確度進(jìn)行推薦算法評價[19]。預(yù)測準(zhǔn)確度指標(biāo)主要是平均絕對誤差(MAE:Mean Absolute Error,MMAE)。MAE通過計算預(yù)測的用戶評分與實際的用戶評分之間差的絕對值度量預(yù)測的準(zhǔn)確性,計算公式如下
(9)
其中N表示測試集中的項目評分記錄數(shù),pi表示項目預(yù)測評分,qi表示項目實際評分。MAE越小說明預(yù)
測值越精確,推薦質(zhì)量越高。
分類準(zhǔn)確度指標(biāo)包括查準(zhǔn)率(precision)、查全率(recall)及F值(F-measure)。查準(zhǔn)率表示系統(tǒng)生成的推薦列表中,用戶喜歡的概率。查準(zhǔn)率表示用戶喜歡的項目包含在系統(tǒng)生成的推薦列表中的概率。由于查準(zhǔn)率與查全率之間存在相互制約關(guān)系,F-measure是查準(zhǔn)率與查全率的加權(quán)調(diào)和平均值。令R(u)表示系統(tǒng)向用戶u推薦的項目集合,T(u)表示包含在推薦列表中且用戶u選擇的項目集合,U表示全體用戶的集合。查準(zhǔn)率、查全率及F-measure的計算公式如下
將筆者算法與傳統(tǒng)的協(xié)同過濾算法在不同的評價指標(biāo)上得出的結(jié)果進(jìn)行對比。筆者算法中用戶評分權(quán)重指數(shù)α取值為0.5。在訓(xùn)練集中,用戶最新評分的權(quán)重為1,用戶最早評分權(quán)重為0.5,其他評分權(quán)重由評分時間計算得出(參見式(6)、式(7))。相似性權(quán)重β取值為3。由于項目屬性值數(shù)量較少,與基于標(biāo)簽的用戶相似度相比,基于屬性值的用戶相似度方差較小,鄰居區(qū)分度不高,取β值為3可增大基于屬性值的鄰居區(qū)分度。
從圖2可以看出,兩種算法的MAE值都隨著鄰居數(shù)的增多而逐步下降。當(dāng)鄰居數(shù)少于10時,大部分未評分項由于缺少鄰居評分,預(yù)測評分只能取目標(biāo)用戶評分的平均值,隨著鄰居數(shù)量的增多,未評分項的評分預(yù)測趨于穩(wěn)定。筆者算法的MAE低于傳統(tǒng)的協(xié)同過濾算法,說明筆者算法對未評分項的評分預(yù)測比傳統(tǒng)協(xié)同過濾算法更準(zhǔn)確。
在計算precision值、recall值、F-measure值時,需要先固定鄰居數(shù)k。由于F-measure值是一個綜合指標(biāo),筆者先固定推薦數(shù)N,然后觀察F-measure值隨鄰居數(shù)變化的變化情況,如圖3所示。在N確定的情況下,F-measure值隨鄰居數(shù)的增加而逐步增加,當(dāng)鄰居數(shù)大于10時,F-measure值隨鄰居數(shù)的增加變化情況并不十分明顯。鄰居數(shù)的增加會增加推薦系統(tǒng)的計算量,影響系統(tǒng)性能,鄰居數(shù)并不是越高越好,筆者取鄰居k=25。
圖2 筆者算法與傳統(tǒng)協(xié)同過濾算法MAE值比較 圖3 鄰居數(shù)對推薦結(jié)果的影響 Fig.2 Comparison of MAE between this algorithm and traditional collaborative filtering algorithm Fig.3 Influence of neighbor number on recommendation results
在k=25的基礎(chǔ)上,計算不同推薦數(shù)量下的precision值、recall值、F-measure值,兩種算法的比較如圖4~圖6所示。
圖4 筆者算法與傳統(tǒng)協(xié)同過濾算法precision值比較 圖5 筆者算法與傳統(tǒng)協(xié)同過濾算法recall值比較Fig.4 Comparison of precision between this algorithm and traditional collaborative filtering algorithm Fig.5 Comparison of recall between this algorithm and traditional collaborative filtering algorithm
圖6 筆者算法與傳統(tǒng)協(xié)同過濾算法F-measure值比較Fig.6 Comparison of F-measure between this algorithm and traditional collaborative filtering algorithm
在precision值上,筆者算法的計算結(jié)果在0.04~0.06之間,傳統(tǒng)協(xié)同過濾算法的計算結(jié)果在0.02~0.04之間,筆者算法的推薦精確度明顯優(yōu)于傳統(tǒng)協(xié)同過濾算法。隨著推薦項目數(shù)的增大,筆者算法的precision值逐步降低,而傳統(tǒng)協(xié)同過濾算法的precision值卻有逐步上升之勢,說明傳統(tǒng)協(xié)同過濾算法的推薦結(jié)果排序存在比較大的偏差,用戶喜歡的項目往往排在推薦列表的后面,筆者算法的推薦結(jié)果排序更為合理。在recall值、F-measure值上,筆者算法也明顯優(yōu)于傳統(tǒng)協(xié)同過濾算法。
筆者針對傳統(tǒng)協(xié)同過濾算法的不足,引入項目屬性信息和用戶對項目的標(biāo)簽信息,提出一種融合標(biāo)簽和屬性信息的混合推薦算法,提高了協(xié)同過濾算法數(shù)據(jù)的稠密度,同時使用戶描述文件更易于解釋。與傳統(tǒng)協(xié)同過濾算法相比,該算法在評分預(yù)測的準(zhǔn)確度、推薦結(jié)果的準(zhǔn)確度、召回率和F值方面均有明顯提升。