崔北亮,周小康,李樹青
(1.南京工業(yè)大學圖書館,江蘇南京 210009 2.南京財經(jīng)大學信息工程學院,江蘇南京 210023)
推薦系統(tǒng)與人們的日常生活息息相關(guān),各大電商網(wǎng)站如淘寶[1]、京東[2]、亞馬遜[3]等都離不開推薦系統(tǒng)的支持,社交媒體[4]之間的競爭也逐漸向個性化推薦服務轉(zhuǎn)變。推薦系統(tǒng)旨在根據(jù)用戶已表現(xiàn)的興趣愛好挖掘出未來可能出現(xiàn)的興趣愛好,這正是各大電商網(wǎng)站以及社交媒體所追求的。推薦系統(tǒng)通過用戶之前購買過的產(chǎn)品向用戶推薦下次可能購買的產(chǎn)品,或者在用戶購買完一件產(chǎn)品之后立即向其推薦可能一并購買的產(chǎn)品,如此可以給電商網(wǎng)站帶來巨大的利潤。同樣對于社交媒體來說,通過推薦系統(tǒng)給用戶實時推薦其最想看到的內(nèi)容,這無疑會大大提升社交媒體的用戶黏性和穩(wěn)定性。因此,個性化推薦成為近年來備受關(guān)注的研究熱點之一。
在計算機領域,數(shù)據(jù)的好壞很大程度上會影響到結(jié)果的優(yōu)劣,例如對一些數(shù)據(jù)進行分類時,如果待分類的數(shù)據(jù)大多數(shù)是在分類依據(jù)的邊界,那么這些數(shù)據(jù)分類出來的結(jié)果也必然是模棱兩可的。在推薦系統(tǒng)以往的研究中,研究者主要是將用戶對項目的評分數(shù)據(jù)作為評價用戶興趣愛好的重要因素,這在提高了推薦系統(tǒng)的推薦效果的同時,也產(chǎn)生了一定的局限性。傳統(tǒng)推薦系統(tǒng)算法中用到的評分數(shù)據(jù)是基于用戶之間的共同打分項目的評分進行計算的,這部分數(shù)據(jù)往往十分稀疏,從而會引起“冷啟動”問題[5]。而另一方面,在評分數(shù)據(jù)中占很大比重的非共同評分數(shù)據(jù),卻一直被研究者所忽略,本文則認為這類數(shù)據(jù)同樣具有很大研究價值。由此看來,對于這類數(shù)據(jù)信息的挖掘是推薦系統(tǒng)中非常重要的一個步驟。已有眾多的實驗表明,有效的數(shù)據(jù)信息的挖掘可以在一定程度上提高推薦系統(tǒng)的推薦效果。例如,已有研究證明電影推薦系統(tǒng)中影片類型或影片導演這類異質(zhì)信息也會影響用戶的相似度評判,通過挖掘并分析這類數(shù)據(jù)信息可以顯著提升推薦系統(tǒng)的推薦效果[6]。
因此,本文考慮推薦系統(tǒng)的研究可以朝著提高數(shù)據(jù)信息利用率的方向進行,即通過挖掘更有效的數(shù)據(jù)信息,從而設計出更加有效的推薦算法。而傳統(tǒng)協(xié)同過濾作為一種非常有效的個性化推薦技術(shù)[7],對于數(shù)據(jù)信息的利用率卻不高,例如亞馬遜在為用戶推薦商品時[8],只分析了其購買過的商品類型,對于用戶本身的個人信息和商品的詳細信息卻并不關(guān)心。
而本文提出的算法在計算用戶相似度時,不僅利用了用戶之間共同評價項目的評分數(shù)據(jù),也利用了其并非共同評價項目(即遺漏項目)的評分數(shù)據(jù),極大地提高了數(shù)據(jù)信息的利用率,在很大程度上緩解了數(shù)據(jù)稀疏的同時,也更能夠全面地反映用戶的真實興趣。改進算法將不同用戶的項目分為共同參與的項目和非共同參與的項目兩部分,其中共同參與的項目的影響度只在共同參與的項目所占總項目的比例中體現(xiàn),非共同參與的項目也是如此。由于考慮了非共同參與項目,即使共同參與的項目數(shù)異常的稀少,也不會影響到用戶的真實興趣。同時,改進算法還提取了用戶參與的整個項目的側(cè)面特征,本文中對側(cè)面特征的選取主要是用戶參與項目的類型信息。當然,這其中會涉及到共同參與的項目與非共同參與的項目的權(quán)重,為此本文通過對多次實驗的數(shù)據(jù)分析從而找到最佳的權(quán)值。
由于傳統(tǒng)協(xié)同過濾算法在計算相似度時僅考慮用戶共同參與過的項目,而用戶之間共同評分的項目又非常少,便會導致一個用戶很難找到與之高度相似的用戶的問題。而當一個新用戶或者新項目進入到系統(tǒng)時,傳統(tǒng)協(xié)同過濾算法又因為缺乏足夠的信息,而難以對其進行推薦,即產(chǎn)生“冷啟動”問題,也被稱作新用戶問題和新項目問題[9]。以購物網(wǎng)站為例,當一個用戶新注冊了一個賬號之后,考慮到該賬號之前沒有任何的購買記錄,那么推薦系統(tǒng)可能無法對這些用戶生成建議,或是即便生成建議也不會達到預期的推薦效果。同時傳統(tǒng)協(xié)同過濾算法很少利用項目的側(cè)面特征,例如在電影推薦中,傳統(tǒng)協(xié)同過濾算法只考慮用戶對電影的評分情況,而忽略了用戶自身年齡、性別等自身情況以及電影自身類型、影片導演等側(cè)面特征信息的挖掘,又或是對于側(cè)面特征的提取大多是基于用戶對項目的評論文本[10]。
為了解決以上問題,一些研究者考慮通過降維技術(shù)改進傳統(tǒng)算法,例如奇異值分解(SVD)[11-13],即在保留矩陣原有重要數(shù)據(jù)的前提下,通過刪除一些不具有代表性的用戶和項目來達到減少用戶-項目矩陣的維數(shù)的目的,從而提升推薦效果。而Nilashi等[14]則利用了主成分分析(PCA)的方法,該方法通過分析因素的相關(guān)性來簡化維度,從而提高系統(tǒng)的推薦性能。還有一些研究基于項目的側(cè)面特征的挖掘而展開,如基于項目特征的個性化研究中,作者將項目特征考慮到整體的相似度算法中從而達到提高推薦效果的目的[15]。
本文主要考慮到傳統(tǒng)協(xié)同過濾算法對數(shù)據(jù)源的利用率過低的問題,在使用相似度算法進行計算時,傳統(tǒng)算法只選用了不同用戶共同參與過的項目,對于非共同參與的項目則直接丟棄。而本文認為這部分被遺漏的項目也具有很大價值,且僅考慮共同評分項目的數(shù)據(jù)信息只是單純的分析用戶對項目的評價習慣,并不能體現(xiàn)出用戶各自的興趣特征。針對傳統(tǒng)協(xié)同過濾算法的這點不足,本文引入非共同項目的側(cè)面特征和整體項目的側(cè)面特征來體現(xiàn)用戶的真實興趣,提出了相似度改進算法。
改進的相似度算法采用分塊處理方法,將項目分為公共評分項目、非共同評分項目以及整體項目。公共評分項目指的是不同用戶之間共同參與評分的項目,非共同評分項目指的是不同用戶未共同參與評分的項目,整體項目指的是不同用戶評分的所有項目。將整體項目信息納入相似度計算因素,可以很大程度上緩解傳統(tǒng)協(xié)同過濾算法的數(shù)據(jù)稀疏性問題,因為即使一個用戶參與過的項目非常稀少,也并不影響該用戶與其他用戶的比較,整體項目所用的是兩個用戶所有參與過的項目。在數(shù)據(jù)不是過分稀疏的情況下,本文的改進算法在一定程度上提高了用戶與用戶之間相似度度量的準確性,從而更加真實地表現(xiàn)不同用戶之間的興趣特征。實驗證明改進算法通過提高數(shù)據(jù)源的利用率,不僅用戶的興趣能得到更為真實的反饋,不同用戶之間的相似性也得到進一步的優(yōu)化,推薦的效果得到明顯改善。
在現(xiàn)實生活中,人們對人或事物的評價往往會專注于某個特定的領域,就像偉大的牛頓在物理學的輝煌造詣、馬克思在政治和思想上的創(chuàng)造和愛迪生開辟了發(fā)明創(chuàng)造的先河。如果將牛頓的成就放到政治和思想上,那么貢獻率就很小,正是考慮到這種在特定領域的重要性,本文的改進算法,對用戶共同參與的項目與用戶非共同參與的項目進行了各自的重要性規(guī)劃。用戶對共同參與項目的評價情況比較重要,這點也正是傳統(tǒng)協(xié)同過濾算法帶來的驚喜。本文重點在于對用戶非共同參與項目的研究,如果不關(guān)注項目本身的側(cè)面特征,那么用戶之間的相似性就沒有一個統(tǒng)一的計算標準。
用戶的真實興趣通過什么來表示一直被廣大研究學者不斷探索,本文通過對用戶觀影總數(shù)的類型統(tǒng)計來表示用戶的真實興趣趨向,舉個例子,通過選取緊靠的年齡段和職業(yè)相同的10個用戶數(shù)據(jù),目的是為了最大程度地降低干擾因素對數(shù)據(jù)的影響程度。調(diào)查數(shù)據(jù)分別見表1、2,其中表1為電影類型表,表2為電影評分表,評分區(qū)間為[0~5],其中0代表沒有看過。
表1 電影類型表
表2 電影評分表
根據(jù)表2的信息可以發(fā)現(xiàn),大多數(shù)用戶對喜劇和動作這兩部電影的打分都偏高,只基于該數(shù)據(jù)而言,用戶對這兩類電影的興趣比較高,那么如果有了新電影的加入,比如最近即將推出新的電影是喜劇或者動作類的,那么對這兩種電影偏愛的用戶看的可能性會非常高,打分情況也會更合理。重點看一下用戶5和9,這兩個用戶的打分情況及其相似,如果按照傳統(tǒng)協(xié)同過濾的算法來計算,那么這兩個用戶的相似度為100%。但用戶9對喜劇類的電影興趣并不高,幾乎都沒有看過,用戶5對喜劇類的電影打分卻很高,那么電影院推出新電影分類為:喜劇,用戶9可能還是不會去觀看,用戶5有很大的可能性會去觀看并且還會給予高分,這種情況的出現(xiàn)對推薦系統(tǒng)來說并不友好,正是如此,本文為了彌補這個缺點,將電影的類型屬性特征作為一種側(cè)面信息引入到用戶的相似性比較中從而緩解這種情況。
傳統(tǒng)協(xié)同過濾算法的相似度計算方法大致有:歐式距離相似度、余弦相似度、修正的余弦相似度、杰卡德相似度以及皮爾森相似度[16-17],本文借鑒了傳統(tǒng)相似度計算中的皮爾森相似度算法,該算法公式如下
其中,X,Y分別代表兩個不同用戶的共同參與項目的評分序列,N為評分序列中評分的個數(shù),下面給出以上幾種常用相似度的算法公式。
歐式距離相似度計算公式
式(5)中的sim1相似度使用了傳統(tǒng)協(xié)同過濾算法中的皮爾森相似度計算方法,sim2相似度為本文中定義的遺漏項目的側(cè)面特征相似度,sim3為不同用戶共同參與的所有項目的側(cè)面特征相似度,通過引入遺漏項目來增加數(shù)據(jù)利用率并增加整體項目來體現(xiàn)用戶真實興趣的改進相似度算法在實驗結(jié)果部分得到了推薦效果顯著提高的證實。式中的k為影響因子,在實驗部分會對k值的選取進行分析,X1和Y1為兩個用戶共同參與項目的評分序列,X2和Y2為兩個用戶非共同參與項目的項目類型序列,X3和Y3為兩個用戶參與項目總數(shù)(無重合項目)的項目類型 序 列, sim1(X1,Y1),sim2(X2,Y2),sim3(X3,Y3)計算公式分別為
式中,sim4(X1,Y1)為皮爾森相似度,k1為共同參與項目數(shù)占兩個用戶參與項目總數(shù)(無重合項目)的比例。
式中 sim5(X2,Y2) 計算公式為
sim3(X3,Y3) 和 sim5(X2,Y2) 計算公式相同。在式(5)中重點對 sim2(X2,Y2) 的計算方法進行分析,其中的X2和Y2并不是傳統(tǒng)協(xié)同過濾中的共同參與項目的評分矩陣,而是一個計數(shù)矩陣。
其中X1和Y1分別為兩個不同用戶的共同參與項目的評分向量。X2和Y2分別為兩個不同用戶的非共同參與項目的項目屬性向量。這里對項目屬性向量進行詳細的解釋,對于兩個不同用戶的非共同參與項目的評分向量,舉個簡單的例子:[0,3,0,0,4,5]和[2,0,1,3,0,0]這兩個向量即為兩個不同用戶的非共同參與項目的評分向量形式,這樣的向量對于相似度的計算來說,毫無意義,因此本文中采用的是統(tǒng)計兩個不同用戶的非共同參與項目的項目類型形成一個1*(項目類型數(shù))的向量,該向量中的值即為用戶參與項目的項目類型的累計。X3和Y3分別為不同用戶的各自參與項目的項目屬性向量。這里需要注意一點,對于每個用戶參與的項目而言,就不存在共同參與和非共同參與項目的區(qū)別,而是指每個用戶個體參與的所有項目。
這里需要對sim1和sim2算法公式進行必要的解釋,在算法公式內(nèi)部引入了權(quán)重值k1作為共同評價項目數(shù)占兩個用戶評價項目總數(shù)(無重合項目)的比例,考慮到傳統(tǒng)協(xié)同過濾算法只是對用戶共同評價的項目進行相似性分析,因此計算sim1只考慮用戶共同評價項目在所有項目中的比重,計算sim2只考慮用戶非共同評價項目在所有項目中的比重,將相似度的計算局限在各自的領域當中,從而使不同領域的相似度計算更加準確和嚴謹。下面給出該算法的具體步驟。
算法:sim2相似度算法。
輸入:劃分好的訓練集。
輸出:用戶與除自身之外所有其他用戶的相似度。
步驟1:為每一個用戶生成一個1*n的零矩陣。
步驟2:列出每個用戶參與的所有項目,找出這些項目對應的類型矩陣,其中類型矩陣為 1*n的矩陣,形如[1,0,0,1,…,0,1,0]每一列的布爾值代表項目是否包含這一類,統(tǒng)計這些類型的個數(shù)填充到步驟1的零矩陣生成新的類型矩陣。
步驟3:通過式(7)代入步驟2中新生成的類型矩陣,計算出用戶與其他所有非自身用戶的相似度。
傳統(tǒng)標準協(xié)同過濾推薦系統(tǒng)算法時間復雜度為O(N2),與此相對,該算法只在進行用戶相似度計算之前增加了填充矩陣的計算,因此時間復雜度為O(2N2)。
本文對項目側(cè)面特征的研究基于MovieLens數(shù)據(jù)集(100 kB),數(shù)據(jù)集中包含了943個用戶對1 683部電影的評分情況,1 683部電影的類型矩陣和用戶的個人信息,本文使用的是用戶對電影的評分情況以及電影的類型矩陣。通過提取電影的類型特征屬性給用戶之間非共同觀影制定一個統(tǒng)一的標準,通過對數(shù)據(jù)集的觀察,所有的電影都包括在19種不同的電影類型中,當然一種電影可能包含幾種類型,比如電影Toy Story屬于Action、Adventure和 Animation三種,通過用戶觀看電影的類型比重對非共同的觀影進行分析,在此之前,已有很多關(guān)于對電影側(cè)面信息的研究[18-20]。 另外,本文在對共同觀影和非共同觀影研究的基礎上也考慮到了整體項目的相似性情況,將用戶真實的興趣加入到相似性的考慮當中。使用python語言編寫算法。
(1)預測值計算
將數(shù)據(jù)集拆分為訓練集與測試集,拆分規(guī)則為:將每個用戶看過的電影按照90%和10%的比例進行拆分,90%的數(shù)據(jù)用來做訓練,10%的數(shù)據(jù)用來做測試。通過前面相似度計算的結(jié)果,對測試集里面的數(shù)據(jù)進行預測,預測函數(shù)如下
該式可以計算出用戶u1對電影i的打分情況。式中分別為用戶u1和用戶u2對其觀看的所有電影打分平均值,sim(u1,u2)為使用式(5)計算出的相似度,ru2,i為用戶u2對電影i的打分。
(2)均方根誤差(RMSE)
在使用式(9)計算出測試集里面所有數(shù)據(jù)的打分情況之后,需要與測試集里面的真實值進行誤差的評定,選擇評定誤差的方法為RMSE(Root Mean Square Error),指均方根誤差,也稱標準誤差。計算公式如下
式中,rui為用戶u對電影i的真實評分,為用戶u對電影i的預測評分,|T|為預測評分的數(shù)量。
本文為了預測的數(shù)據(jù)更加接近實際生活中的情況,生活中的推薦情況只會給用戶推薦最有可能感興趣的幾個項目,而不是將所有的項目按興趣的高低全部展示給用戶。在此,考慮到測試集的數(shù)據(jù)稀疏度,對RMSE的計算進行了如下調(diào)整:
調(diào)整1。用戶預測電影數(shù)少于等于5的選取全部預測值。
調(diào)整2。用戶預測電影數(shù)大于5的按照真實值與預測值的差值絕對值進行從小到大排序,選取前90%的數(shù)據(jù)。
在式(5)中引入了k值作為權(quán)重參數(shù),對于不同的k值的選取,可以直接影響到最終的誤差結(jié)果。為了得到最佳的k值數(shù)據(jù),進行如下實驗:
實驗步驟。通過對k值的不同取值,計算最終的均方根誤差。
實驗標準。統(tǒng)一選取60個最近鄰用戶。
實驗結(jié)果。如圖1所示RMSE變化圖和如圖2所示RMSE變化率圖。
圖1 RMSE變化圖
圖2 RMSE變化率圖
實驗分析。根據(jù)圖1可以很容易發(fā)現(xiàn)當k取值為26/27時,最終的誤差結(jié)果達到最低,最低并不一定是最佳的,因此分析圖2 RMSE的變化率,當k取值為26/27的時候,變化率為負并且絕對值最小,這個意義在于RMSE的變化趨于平穩(wěn),并且還處于降低的趨勢,在k值為27/28時,變化率的值為正,說明RMSE的值在變大,由此得出結(jié)論,當k取值為26/27時,最終結(jié)果RMSE變化率最低,并且值最小,達到最佳結(jié)果,在改進算法中將k值引入為26/27。
本文使用式(5)改進相似度算法進行推薦算法的計算,其中k值選取為26/27,分別與傳統(tǒng)協(xié)同過濾算法與文獻[21]中提出的基于用戶興趣和項目屬性算法以及經(jīng)典的基于SVD的協(xié)同過濾算法進行MAE值和RMSE值對比。
MAE(Mean Absolute Error)是用來衡量推薦系統(tǒng)的評分預測效果的一種重要指標,利用用戶的實際評分與預測得到的用戶評分之間的偏差度量預測結(jié)果的準確性,定義為
MAE值如表3所示。
表3 MAE值比較
RMSE和MAE相比,RMSE相當于L2范數(shù),MAE相當于L1范數(shù),因此對異常值更為敏感。
RMSE值隨著最近鄰個數(shù)變化在不同算法下的效果比較如圖3所示。
圖3 RMSE比較圖
通過圖3可以發(fā)現(xiàn),當最近鄰為60時,折線的斜率絕對值最小,此時最終結(jié)果達到最佳狀態(tài),改進算法在此時的RMSE比傳統(tǒng)協(xié)同過濾算法降低了12.96%,平均降低了10.83%,同其他兩種比較優(yōu)越的改進算法相比,隨著最近鄰的增加,推薦效果逐漸接近并且最終超越了兩種算法。可見,本文的相似度改進算法在推薦效果上面取得了非常顯著的提高,通過將共同參與項目與非共同項目分開,只考慮其在對應的項目比例中的重要性,并且為共同參與項目與非共同項目找到最近的權(quán)重值k,最后提取項目的側(cè)面特征,將用戶對整體項目的興趣加入到改進算法中,切實提高了推薦的效果。
本文針對傳統(tǒng)協(xié)同過濾算法存在的不足,通過對傳統(tǒng)協(xié)同過濾算法中用戶遺漏的非共同參與項目的分析,提取出非共同參與項目的側(cè)面特征,在數(shù)據(jù)集上,有效地緩解了數(shù)據(jù)稀疏度過低的問題,同時提高了對數(shù)據(jù)集的數(shù)據(jù)利用率,傳統(tǒng)協(xié)同過濾算法只考慮用戶對項目的評分情況,對用戶以及項目自身的特征并不去了解。并且傳統(tǒng)協(xié)同過濾算法只考慮用戶的共同參與項目,一定程度上丟失了用戶的自身興趣,本文的改進算法對用戶整體項目進行分析從而在相似度計算中有效地反饋了用戶的自身興趣。通過對實驗的數(shù)據(jù)與實驗結(jié)果的分析,改進的相似度算法比傳統(tǒng)協(xié)同過濾算法有更好的推薦效果,但本文只對項目的側(cè)面特征進行了分析和引入,并沒有針對用戶的側(cè)面特征進行剖析,因此后續(xù)的研究工作將重點放在對用戶側(cè)面特征的分析和提取,通過結(jié)合用戶和項目兩者的側(cè)面特征達到更好的推薦效果。