張紫嫣 周 馳
1(同濟大學醫學院 上海 200092) 2(浙江大學軟件學院 浙江 杭州 310027)
近幾年來,隨著網絡技術的快速發展,用戶數量急劇增加的同時數據信息也大量增多,出現了信息過載、信息迷失等現象,推薦系統應運而生。為使人們能夠更加有效地利用資源,接收更符合用戶需要的信息,主要采用個性化推薦系統方法解決此類問題。最常見的方法有協同過濾算法[1]、基于內容的推薦算法[2]、二部圖網絡結構推薦算法[3]、混合推薦算法[4]。
最近鄰協同過濾技術[5]是當前應用最為廣泛的個性化推薦算法之一,但其存在難以處理稀疏數據、算法較低的可擴展性、推薦結果的難解釋性等缺點。針對以上問題,國內外學者們進行了各種深入的探討和研究,提出了不同的解決方案。早在1994年,基于用戶的協同過濾算法[6]就被應用在了新聞過濾中。2003年,亞馬遜公司提出了基于Item的協同過濾方法[7]。文俊浩等[8]提出了一種基于標簽主題的協同過濾算法,從語義層面上計算了用戶對項目的偏好概率。林建輝等[9]利用有向網絡圖構建出用戶之間的信任關系,提出一種融合信任用戶的協同過濾推薦算法。趙紅等[10]通過融合初始資源配置以及協同過濾,形成了更為有效的組合推薦算法。李龍生等[11]將用戶行為和物品標簽與協同過濾相結合,更好地解決了物品冷啟動問題。廖志芳等[12]采用了隨機森林來處理用戶的屬性特征,從而構建出一種新的混合相似度計算模型。衛澤等[13]將用戶評分一致頻次與評分項目數之比作為懲罰函數引入到相似度的計算中,從而提高了推薦質量。李雪等[14]提出了一種系統主題生成算法,將主題相似度引入到相似度的計算中。但是,如何在海量的數據資源中將信息準確地推薦給用戶,依舊是我們目前所面臨的一個難題。
由于用戶對類別的偏好會導致一定的喜好傾向,所以結合用戶類別偏好的相似度計算會比原來的相似度計算更接近真實情況。比如某用戶喜歡運動品牌李寧,則他的鞋架上該品牌的鞋子可能會明顯多于其余品牌,有相同類別喜好的用戶的相似度也會較高。針對此種情況,本文提出一種結合類別偏好的協同過濾算法,通過計算用戶對不同類別的偏好程度來得到用戶之間的相似度,并結合原有的用戶相似度來獲得推薦結果,同時還需要對過于熱門的類別進行懲罰,避免熱門類別的影響,從而提高推薦效果。
傳統的協同過濾算法包括基于用戶的協同過濾和基于項目的協同過濾。二者除了相似度計算有所差異之外,本質上都是基于鄰域的協同過濾。下面以基于用戶的協同過濾為例:
步驟1計算用戶相似度。計算用戶相似度是協同過濾算法的核心部分,有多種不同的方法,如余弦相似度、Pearson相關系數、Jaccard相似性度量等。
步驟2根據步驟1中的相似度計算方法得到用戶相似度,進而得到用戶的近鄰集合,近鄰集合的大小通常可以設置為K,而K的取值一定程度上影響了推薦效果。

(1)
式中:rvi表示用戶v對項目i的真實評分;sim(u,v)表示用戶u與用戶v的相似度。
傳統的協同過濾算法在計算用戶相似度時,往往會受限于數據稀疏的問題,其中的原因是兩個用戶之間共同喜愛的項目很少甚至沒有,這導致了計算用戶相似度的時候會與真實的情況存在偏差,從而影響了推薦系統的效果。
本文通過將協同過濾與用戶的類別偏好相結合,來計算用戶之間的綜合相似度,進而從近鄰用戶得到推薦結果,來提高推薦的效果。
協同過濾算法中經常使用余弦相似度來計算用戶相似性。余弦相似度計算方式如下:
(2)
式中:N(u)、N(v)分別為用戶u和用戶v有正反饋的項目集合。
某用戶對某一類別的偏好一定程度上會影響用戶對item的評價結果,可以通過F(u,t)來表示用戶u對類別t的偏好程度。
(3)
式中:Item(u)為用戶u有正反饋的item集合;I()為指示函數,用于判斷項目i是否為類別t的項目。

(4)
式中:Tag2Item(t)表示類別t所包含的所有item集合。
Ct為對熱門tag的懲罰系數:
(5)
這里還額外引入了平滑項,避免出現分子為0的情況。
不同的用戶有不同的類別偏好,通過計算用戶的類別偏好,從而可以依據余弦相似度或其他相似度度量方法來得到用戶之間的類別偏好維度上的相似度Simtag。
在得到用戶的類別偏好后,同樣可以用余弦相似度來計算在類別偏好維度上的用戶相似度Simtag。在原有的余弦相似度的基礎上結合類別偏好的相似度,得到用戶綜合相似度Sim():
Sim(u,v)=α×Simcos(u,v)+(1-α)×
Simtag(u,v)
(6)
式中:α為權重因子,用來平衡綜合相似度中兩種不同的用戶相似度。
本實驗采用Movielens-100k數據集,這是推薦系統的一個經典數據集。該數據集包含了943名用戶、涵蓋了19個類別的1 682部電影以及100 000條評分記錄。其中:將80%的數據劃分為訓練集, 剩余20%的數據劃分為測試集。
本文采用精度(Precision)和召回率(Recall)來評價算法的推薦效果。
(1) 精度:指在推薦結果中,用戶真正喜歡的項目數所占的比例。
(7)
(2) 召回率:指在個性化推薦算法產生的推薦結果中,用戶喜歡的項目數占用戶真實喜歡項目總數的比例[15]。
(8)
式中:TP為真正例;TN為真負例;FP為假正例。
實驗發現,選取的α因子約為0.8時,推薦效果最好,所以以下實驗的α因子均設置為0.8。
由于不同大小的K值會影響推薦的效果,所以對于不同的近鄰個數K,我們取了不同的值來驗證算法的有效性。圖1為在不同K值下,結合類別偏好的協同過濾算法在測試集上的精度。

圖1 精度與最近鄰個數K的關系
圖2為不同K值下,結合類別偏好的協同過濾算法在測試集上的召回率。

圖2 召回率與最近鄰個數K的關系
結果表明,當K在20~80之間時,精度和召回率均表現較好,說明K值在這個范圍內的推薦效果較好。而在實際應用中,如果K值過大,會導致計算時間的大量增加,從而影響用戶的體驗,所以選取一個合適的K值在推薦系統中極為重要。因此,本文針對小K值,選取了3~30之間的多個K值來進行實驗,將算法改進前后的精度和召回率進行對比。圖3、圖4是協同過濾算法改進前后的精度和召回率的對比。

圖3 算法改進前后精度對比

圖4 算法改進前后召回率對比
實驗結果表明,在相同K值的情況下,結合類別偏好的協同過濾與傳統的協同過濾相比,在精度和召回率這兩個評價指標上均有較為明顯的提升,這表明了改進后的算法能較好地結合用戶的類別偏好,使得近鄰計算更為合理,從而提高推薦效果。
推薦系統是針對信息過載現象的一種常見處理手段,而協同過濾算法則是其中最為基本的技術之一。本文提出一種結合類別偏好的協同過濾推薦算法,在原有的計算用戶相似度的基礎上結合了用戶的類別偏好相似度,使得算法對用戶相似度的計算更為準確,也更能反映真實情況。實驗表明,該方法能夠有效地結合類別偏好,提高推薦效果。