孫傳明,周 炎*,涂 燕
(1.華中師范大學國家文化產業(yè)研究中心,武漢 430079; 2.武漢理工大學安全科學與應急管理學院,武漢 430070)
互聯網的迅速發(fā)展帶來了信息的飛速增長,同時也給人們帶來了“信息過載”[1]的困擾性問題.推薦系統(tǒng)的產生在一定程度上解決了該問題,并且隨著個性化推薦技術的發(fā)展,推薦系統(tǒng)的推薦質量也得到有效提升.在個性化推薦領域中,基于協同過濾(Collaborative filtering,CF)的推薦算法逐漸成為研究熱點,并被廣泛應用[2].目前傳統(tǒng)的協同過濾算法存在數據稀疏性問題和推薦范圍問題,其中數據稀疏問題會導致相似度計算的不準確,推薦范圍問題會影響最終的推薦結果質量.許多學者也針對這些問題對傳統(tǒng)的協同過濾算法進行了改進,周超等針對用戶-項目評分矩陣進行橫縱聚類,并且提出杰卡德系數和皮爾遜相關系數結合的相似度計算方法[3].郭雷等將用戶或項目的共同評分項數量引入相似度計算中,利用控制因子將兩種推薦算法結合并產生最終推薦[4].時念云等合理量化了影響信任的相關因素,并建立以及優(yōu)化多元信任模型,以信任度取代相似度,考慮了用戶信息[5].李丹等提出基于讀者用戶畫像構建方法,將具有相同特征的用戶劃歸成一類,給出個性化推薦方案[6].Kang引入用戶信任相似度以及基于加權信息熵的相似度作為最終的用戶相似度[7].YUAN等提出了多級混合相似度,依據用戶等級的數量動態(tài)整合用戶興趣相似度和用戶的特征相似度[8].這些算法主要對用戶的相似度進行優(yōu)化,考慮了影響用戶相似度計算的多種因素,或者充分利用用戶-項目評分矩陣生成橫縱聚類集,但未充分考慮項目本身具有的屬性特征以及與其相關的外部信息.
針對當前數字信息資源與日俱增的背景,本文結合兩種傳統(tǒng)的協同過濾算法,提出一種混合的協同過濾方法,并以電影評分的數據集MovieLens作為實驗數據,完成了與傳統(tǒng)算法的對比實驗和關于權重因子的靈敏度分析,以證明方法的有效性.
基于用戶(User-based)和基于項目(Item-based)的協同過濾算法是傳統(tǒng)算法中比較典型的兩種[9],均包括三個部分:用戶行為[10]表示、鄰居用戶/項目選擇以及產生推薦[11].
用戶行為是指在各大平臺網站上,從用戶進行相關搜索到用戶停止相關搜索而產生的一系列用戶操作.用戶行為主要采用用戶-項目評分矩陣來表示,該矩陣記為R(m,n),如公式(1)所示.其中,m為行數,表示用戶數,n為列數,表示項目數,矩陣中的第i行第j列(即Rij,1≤i≤m,1≤j≤n)表示用戶i對項目j的評分.
(1)
為便于計算和理解,評分值通常是對原有數據處理之后形成的數字指標,數值大小代表了用戶對項目的滿意/喜愛程度.用戶i對項目j的評分定義公式為:
(2)
1)相似度計算
將用戶對項目的評分集合表示為一個向量(即公式(1)所示矩陣中的某一行/列數據),計算向量相似度得到用戶/項目間的興趣偏好相似性,相似度越高可認為用戶/項目間的興趣偏好較一致.本文采用余弦相似度(Cosine-based Similarity)來計算用戶相似度以及項目原始相似度.以用戶相似度為例,其計算公式如下:
(3)
2)選擇最近鄰
本文采用k最近鄰選擇法[12],選擇相似度較高的前k個用戶/項目,這k個用戶/項目便組成了目標用戶/項目的最近鄰Ni.
1)基于用戶的協同過濾算法中,利用預測評分法產生推薦
首先,對未評分項目計算預測評分Pui,計算公式如下:
(4)
其次,根據公式(4)計算的預測評分,將分值較高的N個項目推薦給目標用戶.
2)基于項目的協同過濾算法中,利用權重求和法產生推薦
對項目j的預測評分Puj進行計算,計算公式為:
(5)
其中,Rui代表項目i在目標用戶u上的評分,Nj表示項目j的最近鄰.利用公式(5)進行計算可以使預測值在分值定義的范圍內.
傳統(tǒng)協同過濾算法僅依靠評分相似度進行推薦,本部分考慮了除評分相似度以外的項目標簽屬性相似度,不僅可以充分利用項目信息,也能夠有效改善數據稀疏性并提高推薦的精確性.項目綜合相似度的計算方式以及該方法的計算步驟如圖1所示,該方法主要通過兩步形成最終推薦,首先針對原始用戶-項目評分矩陣中的零值,利用基于項目的協同過濾算法進行評分預測;其次是利用基于用戶的協同過濾算法對替換零值后的評分矩陣進行評分預測并形成推薦.
在混合協同過濾算法中采用皮爾遜相關系數來計算任意兩個項目i和j的評分相似性,其中,Uij=Ui∩Uj,代表對項目i和項目j已評分的用戶集合.此相似度計算公式為:
(6)
1)建立項目標簽屬性矩陣I(m,n),其中m行表示m個項目,n列代表n個標簽屬性,矩陣中的第i行第j列(即Iij,1≤i≤m,1≤j≤n)表示項目i是否擁有標簽屬性j.一般Iij=0或1,表示項目i不具有/具有標簽屬性j.
(7)
2)計算項目標簽屬性相似度
項目標簽屬性相似度可以表示為:
(8)
其中,Nij表示項目i和項目j都具有的標簽屬性數量,Nc表示標簽屬性的總量,Nn表示既不屬于項目i也不屬于項目j的標簽屬性數量.公式(8)即杰卡德系數計算方法.
最后引入權重因子λc[13](表示項目屬性的權重),如公式(9):
(9)
混合相似度的計算公式為:
simij=λc*simc(ij)+(1-λc)*simR(ij).
(10)
圖1 混合協同過濾推薦流程圖Fig.1 Hybrid collaborative filtering recommendation flowchart
和傳統(tǒng)協同過濾算法的計算過程類似,該方法的計算過程可以分為以下四個步驟:輸入用戶-項目評價矩陣、選擇相似項目集、選擇最近鄰居集合以及產生推薦[14].
1) 輸入用戶-項目評價矩陣
輸入用戶-項目評分矩陣R(m,n),其中,m行代表有m個用戶,n列代表有n個項目,矩陣中的第i行第j列(即Rij,1≤i≤m,1≤j≤n)表示用戶i對項目j的評分.若用戶i未對項目j評分,則Rij為空值.
2)選擇相似項目集
(1)建立如公式(7)所示的矩陣,利用公式(8)計算出相應的相似度,接著采用公式(10)計算項目綜合相似度.
(2)根據項目綜合相似度選擇相似項目集.例如,對于項目a,在整個項目集中選擇與項目a相似度最高的N個項目作為項目a的相似項目集,假設相似項目集為SIa.
3)選擇最近鄰居集合
(1) 填充用戶-項目評分矩陣
對目標用戶v未評分的項目a,通過項目a的相似項目集SIa,來預測用戶v對項目a的評分Pva,計算公式為:
(11)
依據公式(11),對原始評分矩陣進行填充,直到用戶v對所有項目均有評分.
(2) 計算用戶相似度
對于填充后的用戶-項目評分矩陣,利用皮爾遜相關系數計算目標用戶v和用戶i之間的相似度simvi,計算公式為:
(12)
(3)選擇最近鄰居集合
在整個用戶集中,選擇與用戶v相似性最高的前k個用戶作為最近鄰居集合Nv.
4)產生推薦
將目標用戶v對項目j的評分預測記為Pvj,其計算公式為:
(13)
計算用戶v對每個項目的預測評分之后,選擇預測評分最高且屬于用戶未評分項目集中的N個項目作為Top-N推薦集.
本實驗將采用MovieLens 20M數據集進行分析,此數據集描述了5星之內的電影以及相應的標記,適用于對用戶進行推薦.數據集包括了138 493個用戶,27 278部電影,20 000 263個評分值和465 564個標簽,每名用戶都至少評分了20部電影,分值介于1~5之間,且分值增量為0.5.此數據集的收集時間為1995年1月到2015年3月.
本部分主要利用ratings數據集(見表1)和genome-scores數據集(見表2),并且在ratings數據集中選取100 000條評分數據作為實驗的數據集,其中包括702名用戶和8 227部電影.在設計算法時將數據集按8∶2的比例劃分訓練集和測試集.該實驗測試集的用戶評估矩陣稀疏度為:1-100000/(702×8227)=0.983,表示在該用戶評估矩陣中,零值的比例達到了98.3%,即該矩陣數據特別稀疏.
ratings數據集如表1所示,包括userId、movieId、rating以及timestamp四種數據.其中userId是指每個用戶的id,movieId是指每部電影的id,rating是指用戶評分.
表1 ratings數據集示例Tab.1 Example of ratings dataset
表2 genome-scores數據集示例Tab.2 Example of genome-scores dataset
genome-scores數據集如表2所示,包括movieId、tagId以及revelance三種數據.其中movieId是指每部電影的id,tagId是指電影標簽,revelance是指電影與標簽的相關性.
在實現算法時,將genome-scores數據表轉化為0~1矩陣,將relevance值分為0~0.5和0.5~1兩個區(qū)間,relevance值若在0~0.5區(qū)間則視為項目不具有該標簽屬性,在0.5~1區(qū)間則視為項目具有該標簽屬性.
本部分主要采用平均絕對誤差和均方根誤差兩種指標進行評價.
1)平均絕對誤差
本部分采用的精確度量化指標是平均絕對誤差(Mean Absolute Error,MAE)[15].該指標能較好地反映預測值誤差的實際情況,計算公式如下:
(14)
其中,n代表整個項目集中已有評分的項目數量,rα代表項目的實際評分,vα代表項目的預測評分.比較不同算法的MAE值,MAE值較小則表示預測誤差較小,更能反映實際情況.
2)均方根誤差
本部分還采用了均方根誤差(Root Mean Square Error,RMSE)[16],該指標用來衡量觀測值同真值之間的偏差,即數據的離散程度,計算公式如下:
(15)
其中,n、rα與vα的含義與公式(14)相同.比較不同算法的RMSE值,RMSE值越小則表示預測精確度越高.
本次實驗采取獨立實驗和對比實驗的方法,選取的用戶/項目鄰居集的數值(即k值)為10、20、30、40、50、60、70、80、90、100.
實驗1:基于混合協同過濾方法與傳統(tǒng)算法的對比實驗
1) 采用兩種傳統(tǒng)的協同過濾算法,得到相應推薦結果.
2) 采用混合的協同過濾方法,得到相應推薦結果.
3) 比較3種推薦結果的MAE值和RMSE值.
實驗2:基于混合的協同過濾方法的靈敏度分析實驗
1) 將權重因子分別設置為0.3、0.5、0.7、0.9,采用混合的協同過濾方法計算,得到相應推薦結果.
2) 采用原始權重因子的混合推薦方法計算,得到相應推薦結果.
3) 比較不同權重因子下推薦結果的MAE值.
確定了實驗內容之后,利用Python編程語言設計實現3.3節(jié)中的兩個實驗,輸出相應結果并進行分析.
1) 基于混合協同過濾方法與傳統(tǒng)算法的對比
實驗1結果:在不同最近鄰個數下,比較基于傳統(tǒng)與基于混合的協同過濾方法的MAE值和RMSE值,實驗結果如圖2和圖3所示.
圖2 不同方法中k值對MAE值的影響Fig.2 Effect of k value on MAE value in different algorithms
從圖2可以看出,基于用戶的協同過濾算法的MAE值均在0.78附近,基于混合的協同過濾方法的MAE值均在0.75附近,比前者的MAE值均降低了3%.而基于項目的協同過濾算法的MAE值變化幅度較大,均大于混合的協同過濾方法的MAE值.在基于項目的協同過濾算法中,MAE值變化幅度較大的原因可能是因為計算項目相似度時,項目數量較為穩(wěn)定,算法對k值的變化較為敏感.在預測評分填充矩陣時,引入項目標簽屬性相似度,充分利用有效信息,在計算項目相似集方面提高了準確度,說明基于混合的協同過濾方法產生的推薦更加符合用戶需求,在一定程度上可以達到提高推薦質量的目的.
圖3 不同方法中k值對RMSE值的影響Fig.3 Effect of k value on RMSE value in different algorithms
從圖3中可以看出,基于用戶的協同過濾算法的RMSE值均在1.07附近,而基于項目的協同過濾算法的RMSE值變化較大,均大于0.97,而混合協同過濾方法的RMSE值位于0.95~0.97中間,比兩種傳統(tǒng)的協同過濾算法均降低了0.1左右.基于混合的協同過濾方法考慮了項目標簽屬性特征,并且利用基于項目的協同過濾算法計算預測評分并填充用戶-項目矩陣,降低了數據的稀疏性,使得不同k值下的RMSE值較小,說明算法預測出的結果具有更好的精確度.因此,在相同的數據條件下,基于混合的協同過濾方法優(yōu)于兩種傳統(tǒng)的協同過濾算法.
2) 基于混合的協同過濾方法的靈敏度分析
實驗2結果:設置不同的權重因子,比較不同權重因子下混合協同過濾方法的MAE值,實驗結果如圖4所示.
圖4 不同權重因子下的MAE值比較Fig.4 Comparison of MAE values for different weighting factors
從圖4中可以看出,不同近鄰數下(鄰居數分別為10、20、30、40、50、60、70、80、90、100),不同的權重因子計算出的MAE差別較小.當權重因子為0.3、0.5、0.7、0.9時,計算出的MAE值均大于本文方法的MAE值.采用原始權重因子的混合協同過濾方法利用權重因子將項目評分相似度和項目標簽屬性相似度結合作為項目綜合相似度,當用戶未對項目進行評分時,項目的最終相似度即為項目的標簽屬性相似度,并不會出現項目無評分就無法計算項目相似度的情況.由此可見,文中計算所采用的權重因子計算方法較為合理,能夠較準確的進行相關推薦.
本文在傳統(tǒng)協同過濾算法的基礎上,提出了一種基于用戶-項目混合的協同過濾方法,有效降低了數據稀疏性.同時在利用基于項目的協同過濾算法時引入項目標簽屬性相似度,綜合考慮了除用戶對項目評分之外的相關信息,并利用權重因子將項目標簽屬性相似度和項目評分相似度結合,解決了傳統(tǒng)推薦算法存在的推薦范圍的問題.因此,本方法在項目數據比較豐富的情況下,能夠較為充分的利用項目數據并給出準確推薦.但是本方法主要是離線計算并推薦,在實現有效的實時推薦方面仍需改進,并且方法中僅主要考慮了項目屬性,并未充分考慮其他的項目特征.因此下一步工作將盡力優(yōu)化算法流程,提高算法效率,滿足用戶個性化信息推薦的需求.