(江蘇科技大學計算機學院 鎮江 212003)
伴隨著互聯網和信息技術的快速發展,數據量呈指數型增長,在促進社會經濟快速發展的同時,也使我們面臨著嚴重的“信息過載”問題[1]。如在電子商務領域,面對海量商品,買家容易產生選擇疲憊,從而會使商家失去寶貴的潛在客戶資源。推薦系統基于用戶歷史數據記錄,根據相關算法處理用戶數據,完成個性化商品推薦,使用戶能夠快速并準確地獲取自己感興趣的商品。目前,推薦系統已經廣泛應用在電子商務、電影推薦、新聞推薦、音樂推薦、短視頻推薦等領域[2]。協同過濾是目前推薦系統中使用最廣泛也是最成熟的一種推薦算法[3],分為基于用戶的協同過濾(User-based CF)和基于項目的協同過濾(Item-based CF),它們都是基于鄰域的推薦[4]。協同過濾主要分為三個步驟:用戶-項目評分矩陣的建立、相似度計算、評分預測。其中相似度計算是最核心的部分,后續的評分預測是在此基礎上完成的,相似度的計算將直接決定著推薦系統的質量[5]。本文是在基于用戶的協同過濾基礎上,對相似度的計算加以改進的。
基于用戶的協同過濾的算法思想是通過計算用戶間的相似度,找到目標用戶的相似鄰居集,通過分析相似用戶對某些商品的評分數據,來預測目標用戶的未評分項目的分值,選取評分最高的若干項目進行推薦[6]。傳統相似度計算方法主要有余弦相似度、皮爾遜相似度、杰卡德相似度等[7]。
余弦相似度是將用戶對項目的評分看成兩個空間向量[8],通過計算兩向量的余弦值,來衡量用戶間相似度大小,余弦值越大,兩向量之間夾角越小,相似度越高。余弦相似度只考慮夾角大小,僅在角度這個維度上去比較相似度。
余弦相似度計算公式:

皮爾遜(Pearson)相似度又稱相關相似度,是基于兩用戶共同評分項目來計算兩向量線性相關程度的一種統計計算方法[9]。計算結果值介于-1和1之間,當值為負數時,表示兩向量負相關,為正數則呈正相關,值越接近上下限,兩向量線性關系越強。
皮爾遜相關系數計算公式如下:

rv,i表示用戶v對項目i的評分,為用戶v的平均評分。
杰卡德相似度是從集合的角度去考慮,即兩用戶共同評價項目數占兩用戶總的評價項目的比例[10]。該相似度計算方法只注重是否被用戶評價,而忽略具體評分的影響,一般用于離散型二元變量(喜歡、不喜歡;點贊、踩等),對于非二元變量的使用場景,計算效果較差。
杰卡德公式如下:

Ui,j表示用戶共同評價的項目,Ui表示用戶對項目i的評分。
根據相關研究文獻,Pearson相似度計算的實驗效果較其余方法準確率更高[3],故本文的相似度計算的改進以Pearson相似度為基礎。
隨著系統中用戶數和商品數的指數型增長,用戶的評分數據顯得十分稀疏,這會對相似性計算的準確性產生很大影響。近年來,很多學者對相似度的計算提出了改進,李容等[11]提出了共同評分項目數占比來改進相似度的計算,文俊浩等[12]提出Tan?imoto修正系數,并將用戶共同評分項和用戶所有評分項之間的關系融入到傳統的相似性計算方法中,這些算法的改進在一定程度上提高了相似度計算的準確性,但依然存有一些缺陷。
傳統的Pearson相似計算并沒有考慮到每個用戶的平均評分情況,只是單純地直接計算向量間的線性關系[13]。如表1,表示用戶和對應項目的評分,用評分向量表示用戶,U1=(2,1,2,1,1)和U2=(5,4,5,4,4),利用Pearson相似度計算可得出sim(U1,U2)=1。而實際上,兩用戶在對應項目上評分懸殊很大,根據具體評分可以看出,U2用戶對項目1和2比較喜歡,而用戶U1明顯不太喜歡這兩個項目,說明兩用戶間相似性并不大,而通過皮爾遜相似度公式計算的相似度卻為1,現實情況與傳統的Pearson相似度計算結果相沖突。

表1 用戶-項目評分矩陣
為了解決這個問題,本文提出平均評分修正因子,以衡量用戶間的評分差異,公式如下:

d(u,v)表示兩向量的歐氏距離[14],n為兩用戶共同評分項的數量,ru,i和rv,i分別表示兩用戶對同一商品i的評分,d(u,v)值越小,兩用戶間評分差距越小,相似度越高,則平均評分修正因子如下所示:

很明顯,d(u,v)越小,S(u,v)值越大,用戶間相似度越高。
傳統的Pearson相似度計算,計算的時候所有商品都被賦予了相同的權重[15],并沒有考慮到商品的熱門程度對相似度計算的影響。如表2所示,大部分用戶都對商品I1和I3給了評分,這兩商品相對于其他商品更加流行[16]。

表2 用戶-項目評分矩陣
從表2可知,用戶U1和U2,U4和U5兩組用戶,共同評價商品數和具體評分值均相同,根據Pearson相似度計算公式,得出相同的相似度,即sim(U1,U2)=sim(U4,U5)。計算雖然正確,但不符合現實情況的邏輯。
從表2可看出項目1,3較項目2,4評分數目多,屬于相對熱門商品。例如一些人都買洗衣液,并不能很大程度上說明他們都喜歡此商品,洗衣液屬于生活必需的熱門商品,如果兩用戶都買了《推薦系統實踐》,則能很大程度上說明他們都對此物品有更大的興趣相似度。因此,對于熱門程度不同的商品[17],在相似度的計算中,要賦以不同的權重。
本文引出熱門商品懲罰因子,公式定義如下:

其中,n為商品的評分總數,ni為用戶對商品i的評分值。物品越熱門,n值越大,H(i)值就越小,該熱門商品懲罰因子H(i)在懲罰熱門商品的同時,對于冷門商品相似度計算的權值有了一定的提高,在降低熱門商品對相似度計算影響的同時,也有利于對冷門商品的推薦[18]。
綜合式(5)和式(6),把熱門商品懲罰因子和平均評分修正因子融入相似度計算中,改進后的皮爾遜相似度為

1)建立用戶-項目評分矩陣,評分為5分制。
2)求取相似用戶集N。利用式(7)計算目標用戶和其他用戶間的相似度,結果按大小順序排列,前k個用戶即為目標用戶的相似用戶集。
3)預測評分。根據相似用戶集的歷史評分數據預測目標用戶對項目的評分,計算公式如下:

其中,N為目標用戶u的鄰居集,Sim(u,v)為改進后的皮爾遜相似度計算公式。
4)根據評分結果進行推薦。
本文實驗數據集選取MovieLens數據集,該數據集是一個開源電影數據集,很多研究基于此數據集[19]。本文實驗使用100kb的該數據集,包括1682部電影,943個用戶和100,000條評論等數據,評分大小1~5分,此數據集包含以下幾個屬性:用戶ID,電影ID,電影評分和評分時間,數據稀疏度[20]為93.7%。取80%評分作為訓練集,剩余20%作為測試集,訓練集用作用戶相似度計算,后續對訓練集中的未評分項目預測評分,測試集用于和某項目對應的預測評分作比較[21],以判斷推薦準確率。
本文采用平均絕對誤差(MAE)來評估推薦質量。

N為測試集,實際評分為{rv,1,rv,2,rv,3,…rv,N},預測評分為{Rv,1,Rv,2,Rv,3,…Rv,N}預測評分和實際評分越接近,MAE就越小,推薦的準確率就越高。
本文選取傳統的Pearson相似度算法,文獻[11]提到的算法、文獻[12]提出的相似算法和本文改進后的皮爾遜相似度計算方法進行實驗,各算法計算流程均相同,不同算法的MAE值如圖1所示。
由圖1可知,除原始皮爾遜相似度計算公式外,其他算法的MAE值都有一定程度的降低,推薦準確度得到了一定的提高。文獻[11]的算法通過引入共同評分項目占比,使相似度的計算更加準確,文獻[12]的算法通過將用戶共同評分項和用戶所有評分項之間的關系引入相似度的計算更加有效地降低了MAE值。各算法均在相似用戶數量50~60附近使MAE出現收斂,但本文提出的改進算法能更快地實現MAE值的收斂,且MAE值較其他方法更低,進一步提高了推薦的準確性。

圖1 不同算法下的MAE值
用戶協同過濾是基于用戶評分數據,計算用戶間的相似度,通過相似鄰居集來預測目標用戶對未評分項目的喜好程度。本文通過分析傳統相似度計算方法的缺陷,考慮到用戶具體評分值和商品的熱門程度對相似度計算的影響,提出了熱門商品懲罰因子和平均評分修正因子,從而得到了一種優化的相似度計算方法。實驗表明,改進后的相似度計算方法能在一定程度上提高推薦準確率。隨著用戶數據的進一步增加,數據的可擴展性將是推薦系統中亟待解決的問題,提高系統的可擴展性并為用戶提供實時推薦,這些將是下一步的重要研究方向。