李 浩,潘 瑩,梁京章
(1.廣西大學 電氣工程學院,廣西 南寧 530004;2.廣西大學 信息網(wǎng)絡中心,廣西 南寧 530004)
在當今數(shù)據(jù)化時代,海量信息的不斷產(chǎn)生和傳播的同時,也使我們面臨著嚴重的“信息過載”問題[1]。如在電子商務領(lǐng)域,在面對海量商品的情況下,一方面商家希望能將自己的物品及時推薦給需要的用戶,另一方面用戶希望能夠準確快速找到自己感興趣商品。推薦系統(tǒng)的出現(xiàn)為解決這一問題提供了方法。在各種推薦技術(shù)中。協(xié)同過濾(Collaborative Filtering,CF)[2]是最成功的個性化推薦算法。協(xié)同過濾推薦算法的主要思想是通過用戶-項目的評分矩陣來計算用戶之間的相似度并實現(xiàn)為目標用戶的相關(guān)推薦。目前協(xié)同過濾算法主要劃分為基于模型(model-based)的推薦和基于鄰域(memory-based)的推薦2 種[3]。其中基于模型的協(xié)同過濾算法中,基于矩陣分解的推薦算法應用最為廣泛[4],其具有良好的推薦性能,且對于大規(guī)模評分數(shù)據(jù)有著優(yōu)秀的處理能力。
文獻[5]中利用奇異值分解(Singule Value Decomposition,SVD)來進行矩陣分解,但SVD 算法存在當數(shù)據(jù)稀疏時無法正常運行的問題,需要對稀疏矩陣進行補全,計算復雜度高。為解決這一問題,在Netflix Prize 大賽中,Simon Funk 提出了Funk-SVD 算法。該算法僅對已存在的數(shù)據(jù)進行處理,可直接對稀疏矩陣進行分解;Koren 在Funk-SVD 算法的基礎(chǔ)上加入了用戶的歷史行為,提出了SVD++算法[6],使得推薦效果進一步提升。文獻[7]將時間效應引入SVD++算法中,提出了timeSVD++LR 算法,有效提高了模型的預測準確度。文獻[8]將社會信任關(guān)系加入矩陣分解模型中,提出了TrustSVD 算法,文獻[9]在TrustSVD 算法的基礎(chǔ)上融入了用戶之間的隱式信任關(guān)系,對TrustSVD 算法作了進一步改進,提高了該算法的推薦精度。文獻[10]將BiasSVD 算法與聚類算法結(jié)合,有效地改善了用戶-項目矩陣的可擴展性問題,提高了評分預測的準確度。
上述算法都證明了SVD 算法以及其相關(guān)改進算法能夠有效地從用戶-項目矩陣中挖掘出用戶和項目隱藏特征信息,但都較少地考慮或忽略了用戶和項目自身的屬性信息,而用戶或項目的顯性特征對于推薦效果是存在影響的,例如,十五歲的女孩和三十歲的成年男性在推薦選擇上是存在較大差異的,因此,本研究在BiasSVD 算法的基礎(chǔ)上提出加入用戶和項目屬性的奇異值分解(UIA-SVD)推薦算法,將用戶和項目的屬性信息加入到BiasSVD 算法中,并提出一種新的相似度計算方法,對用戶和項目的屬性信息賦予合適的權(quán)重,計算出最相似用戶集和項目集,對求得的集合繼續(xù)使用BiasSVD 算法得出最終的TopN 推薦。同時,引入用戶和項目的屬性,可以在用戶或項目冷啟動問題出現(xiàn)時,提供一定的數(shù)據(jù)支持,減輕冷啟動帶來的影響。
對于擁有M個用戶,N個項目的用戶- 項目矩陣A,其中元素au,i為用戶u對項目i的評分。
SVD 算法的基本原理是將矩陣A分解為3 個低秩矩陣U、S、V:
SVD 算法在使用時要求矩陣A稠密,但在實際應用過程中,所獲得的用戶-項目矩陣多為稀疏矩陣,因此,若要使用SVD 算法就必須手動填充矩陣,但這樣的矩陣就可能會失真,從而影響推薦結(jié)果,而且對于高階稠密矩陣,使用SVD 算法計算復雜,效率低下。
Funk-SVD 算法為改進SVD 算法的效率問題,將矩陣A分解為兩個低維矩陣P、Q:
式中:P為用戶k×m階隱性特征矩陣,Q為物品k×n階隱性特征矩陣,F(xiàn)unk-SVD 算法將矩陣A中未評分項的位置權(quán)重設(shè)置為0,存在評分的設(shè)置為1,因此Funk-SVD 算法可以直接對稀疏的評分矩陣進行計算,用戶u對項目i的預測評分可表示為:
BiasSVD 算法就是對上述Funk-SVD 算法加入了偏置項的改進,即將用戶u對項目i的預測評分改為:
式中μ為訓練集中所有已知評分的全局平均數(shù),表示訓練集中數(shù)據(jù)的總體評分水平,bu為用戶的評分偏差,bi為物品的得分偏差;bu表示為某一用戶的評分習慣,用戶給出的評分低,并不一定代表用戶對該物品的喜好程度低,可能是該用戶對所有物品都普遍給予低分;bi表示為某一物品的得分情況,同一物品可能存在其他方面的差異,如質(zhì)量好的物品得分普遍會比質(zhì)量差的物品得分高。
則實際評分au,i與預測評分的誤差為:
損失函數(shù)為(為防止過擬合,增加正則項):
根據(jù)梯度下降法來逐步減小損失函數(shù),令更新步長為γ,則可得到pu,qi,bu,bi的迭代公式:
以電影推薦系統(tǒng)為例,介紹UIA-SVD 推薦算法的主要內(nèi)容,場景為目標用戶甲剛看完一部電影X,現(xiàn)需要為用戶甲推薦一部電影。
在現(xiàn)如今的電影推薦系統(tǒng)中,用戶在初始注冊時,一般需要填寫年齡、性別、職業(yè)等個人基本信息,這些信息反映了用戶的顯性特征。例如,用戶一為三十歲女教師,用戶二和用戶三同為二十歲男大學生,用戶二和用戶三之間大概存在更多的觀影愛好,因此,可以看出用戶的顯性特征信息對于推薦效果存在一定的影響。用戶的顯性特征信息相似度計算步驟如下:
(1)基于用戶年齡的相似度計算
年齡差距越小的用戶可能具有更多的觀影愛好,文獻[11]將不同用戶的年齡差距閾值設(shè)為5,設(shè)用戶u的年齡為Du,用戶v的年齡為Dv,則用戶的年齡相似度Sim(u,v)a為:
(2)基于用戶性別的相似度計算
性別不同對于電影的興趣偏好也會存在較大的差異。設(shè)用戶u的性別為Gu,用戶v的性別為Gv,則用戶的性別相似度Sim(u,v)b為:
(3)基于用戶職業(yè)的相似度計算
用戶的職業(yè)環(huán)境也會對用戶對電影的偏好產(chǎn)生影響,設(shè)用戶u的職業(yè)為Ju,用戶v的職業(yè)為Jv,則用戶的職業(yè)相似度Sim(u,v)c為:
通過式(4)得到用戶u的隱性特征pu,用戶v的隱性特征pv,通過用戶-項目矩陣,可以得到每一個用戶觀看過的電影總數(shù)F,通過式(4)可以得出用戶的隱性特征p會受到用戶所看過的電影總數(shù)F的影響,F(xiàn)越大,用戶的隱性特征p所包含的隱藏信息越真實。因此需要將用戶的觀看次數(shù)引入用戶的隱性特征中,用戶u的隱性特征du:
利用余弦相似度[12]計算得到用戶的隱性特征相似度Sim(u,v)d為:
通過式(11)得到年齡相似度Sim(u,v)a,式(12)得到性別相似度Sim(u,v)b,式(13)得到職業(yè)相似度Sim(u,v)c,則用戶u和用戶v的相似度計算為:
其中α1+α2+α3+α4=1,α1、α2、α3、α4∈[0,1],分別為不同屬性的權(quán)重。
在電影推薦系統(tǒng)中,電影的顯性特征包含如主演、電影類型等電影的基本信息。用戶可能會因為喜歡某一位演員而去找該演員主演的電影。因此可以看出電影的顯性特征信息對于推薦效果也存在一定的影響。電影的顯性特征信息相似度計算步驟如下:
(1)基于電影的主演、類型的相似度計算
一部電影的主演可能不止一位,類型不止一種。設(shè)電影x的主演為集合φx,類型為集合ζx;電影y的主演為集合φy,類型為集合ζy;則電影的主演相似度Sim(x,y)a為:
電影的類型相似度Sim(x,y)b為:
形如式(14),式(15),項目的隱性特征q受到對該項目有歷史行為的用戶總數(shù)E的影響,項目x的隱性特征gx為:
電影x和電影y的隱性特征相似度Sim(x,y)c為:
則電影x和電影y的相似度計算為:
其中β1+β2+β3=1,β1、β2、β3?[0,1],分別為不同屬性的權(quán)重。
由公式(15)求出目標用戶甲與其他用戶的相似程度并排序,從中選取前K名用戶作為目標用戶的最相似用戶集R。同理由公式(19)求出電影X與其他電影的相似程度并排序,從中選取前K部且用戶甲未看過的電影作為電影X的最相似電影集H。
找到用戶集R內(nèi)用戶r的pr,br(r?R),電影集H內(nèi)電影h的qh,bh(h?H),利用公式(4)求得則目標用戶甲最終對電影集H內(nèi)電影h的評分預測為:
將電影集H內(nèi)的前N項電影推薦給目標用戶。其中K > N。
UIA-SVD 推薦算法的流程如圖1 所示。
圖1 算法流程圖
本研究的數(shù)據(jù)使用美國Minnesota 大學創(chuàng)辦的2個公開數(shù)據(jù)集:MovieLens-ml-latest-small,見表1。實驗將數(shù)據(jù)集的80%數(shù)據(jù)用作實驗的訓練,20%數(shù)據(jù)用作測試。實驗對UIA-SVD 推薦算法在數(shù)據(jù)集上分別基于正則化的RSVD 算法[13],SVD++算法、timeSVD++LR 算法進行對比實驗。
表1 數(shù)據(jù)集表述
硬件環(huán)境:
(1)Windows10
(2)CPU:Intel7 代6700k
(3)內(nèi)存16G
軟件環(huán)境:Pycharm
Python3.7
文獻[14]對推薦算法領(lǐng)域內(nèi)的多種評價指標做了總結(jié),本文將使用平均絕對誤差(Mean Absolute Deviation,MAE)、均 方 根 誤 差(Root Mean Square Error,RMSE)作為實驗指標[15]:
其中N為測試集項目的數(shù)量,X表示對項目的預測評分,Y表示用戶的實際評分。MAE,RMSE 的數(shù)值越小,算法的推薦效果越好。
(1)實驗一
最相似用戶集和最相似目標集內(nèi)成員的個數(shù)直接影響到最終對評分的預測,所以需要通過實驗來選取最佳個數(shù)K,來保證最終的推薦效果。
通過固定單值,調(diào)參步進的方法來分別確定式(16),式(21)中不同權(quán)重的最佳取值。
實驗一結(jié)果如圖2、圖3 所示。
圖2 參數(shù)K 對RMSE 的影響
圖3 參數(shù)K 對MAE 的影響
從圖1 和圖2 中可以看出,隨著K值的增大,MAE 和RMSE 最終都趨于平緩,對于最相似用戶集的K和最相似項目集的K的最佳取值并不相同,對于最相似用戶集,K的最佳取值為40,對于最相似項目集,K的最佳取值為50。并求得最佳推薦效果下;式(15)中的權(quán)重分別為α1≈0.5、α2≈0.1、α3≈0.1、α4≈0.3。式(21)中的權(quán)重β1≈0.2、β2≈0.4、β3≈0.4。
(2)實驗二
UIA-SVD 算 法 與RSVD 算 法、SVD++ 算 法、timeSVD++LR 算法的對比實驗。在MovieLens 數(shù)據(jù)集上,令各算法學習率= 0.002,矩陣分解維度= 20,測試不同的迭代次數(shù)下,各算法的推薦效果。實驗結(jié)果如圖4,圖5 所示。
圖4 不同迭代次數(shù)下各算法的MAE 比較
圖5 不同迭代次數(shù)下各算法的RMSE 比較
從圖4 和圖5 可以看出相比較其他算法,UIA-SVD 算法的MAE 和RMSE 值較小,其MAE 在迭代次數(shù)為80 時,UIA-SVD 算法的RMSE 值達到最小,約為0.857,當?shù)螖?shù)達到100 時,UIA-SVD 算法的MAE 值達到最小,約為0.664。實驗說明在BiasSVD 算法中加入用戶和項目的屬性信息能進一步提高算法的推薦效果。
本文提出一種加入用戶和項目屬性的奇異值分解推薦算法。在BiasSVD 算法模型中加入用戶和項目的顯性特征,再利用改進的相似度計算方法求得目標用戶和項目的最相近用戶集和最相近項目集,最終根據(jù)算法模型求得預測評分。實驗結(jié)果表明,UIA-SVD算法的推薦效果較傳統(tǒng)矩陣分解算法有明顯提高,同時能較好地改善推薦系統(tǒng)的冷啟動問題。下一步將在本算法的基礎(chǔ)上研究其他的屬性關(guān)系對推薦系統(tǒng)的影響。