孔 歡 黃樹成
(江蘇科技大學(xué)計(jì)算機(jī)學(xué)院 鎮(zhèn)江 212100)
隨著大數(shù)據(jù)時(shí)代的來臨,人們已經(jīng)很難從這些海量的數(shù)據(jù)中找到自己感興趣的,這樣就出現(xiàn)了“信息過載(Information Overload)”問題[1],導(dǎo)致信息利用率降低。推薦系統(tǒng)的出現(xiàn)讓人們從“大數(shù)據(jù)”中看到了“曙光”。然而對(duì)于個(gè)性化推薦系統(tǒng)的核心,推薦算法的研究一直是國(guó)內(nèi)外的研究熱點(diǎn)。2006年10月,美國(guó)Netfilx公司舉行了一場(chǎng)100萬美元的算法競(jìng)賽,競(jìng)賽的要求將RMSE降低到0.8572或更低。這極大地推動(dòng)了推薦算法的發(fā)展。
目前推薦算法中基于協(xié)同過濾的推薦應(yīng)用極其廣泛,協(xié)同過濾主要包括基于記憶的推薦和基于模型的推薦,基于記憶的推薦是通過計(jì)算物品之間的相似性為用戶推薦相似度較高的物品,而基于模型的推薦是通過分析用戶的歷史行為數(shù)據(jù)生成相應(yīng)的推薦模型。本文將通過融合用戶的情感因素和物品的熱門程度對(duì)傳統(tǒng)的LFM算法進(jìn)行改進(jìn),提出了一種基于動(dòng)量的學(xué)習(xí)算法(MO-B-LFM)并通過實(shí)驗(yàn)驗(yàn)證了算法的優(yōu)越性。
Goldberg等最早在文獻(xiàn)[2]中提出了“協(xié)同過濾(Collaborative Filtering,CF)”這一詞,Tapestry是文獻(xiàn)[2]中提出來的第一個(gè)基于協(xié)同過濾的推薦系統(tǒng),該系統(tǒng)是電子文檔過濾系統(tǒng),根據(jù)用戶評(píng)價(jià)過的文檔給其他用戶推薦適合自己的文檔。
基于用戶的協(xié)同過濾旨在找到興趣相似的用戶,把他們歸結(jié)成為一類群體。并且以此為前提,分析得出目標(biāo)用戶的最近鄰居(最相似的若干用戶)對(duì)某個(gè)項(xiàng)目的評(píng)分進(jìn)而預(yù)測(cè)出目標(biāo)用戶對(duì)該項(xiàng)目的評(píng)分[3]。其中相似度可以通過Pearson、歐幾里德距離等去計(jì)算,由于歐幾里得距離計(jì)算相似度很有局限性,通常采用Pearson進(jìn)行計(jì)算。用戶i和j的相似度記為sim(i,j),其計(jì)算公式為[4]

基于模型的協(xié)同過濾通常采用數(shù)據(jù)分析,機(jī)器學(xué)習(xí)等方式,比如聚類算法,決策樹以及貝葉斯分類。該算法對(duì)用戶的行為數(shù)據(jù)進(jìn)行建模訓(xùn)練,最終使用該模型為用戶提供較為合理的推薦[5]。Bereese等在文獻(xiàn)[6]提出了一個(gè)基于概率的算法,其公式如下:

矩陣分解(Matrix Factorization,MF)是常見的基于模型的協(xié)同過濾算法。其中Shanideng等在文獻(xiàn)[7]中提出的潛在因子模型(Latent Factor Model,LFM)是本文主要研究的算法,該算法曾在Netfilx舉辦的推薦算法競(jìng)賽中奪冠。
文獻(xiàn)[8]提出了基于內(nèi)容的推薦算法,該模型通過分析一個(gè)用戶-物品表來為用戶做相應(yīng)的推薦。基于內(nèi)容推薦的思想是通過機(jī)器學(xué)習(xí)的方式將用戶有過行為的物品動(dòng)態(tài)的添加到用戶-物品表中,并對(duì)其進(jìn)行分析。
文獻(xiàn)[9]中提出了一種混合推薦算法,該算法思想通過吸取其他算法的優(yōu)點(diǎn)來彌補(bǔ)自身的不足,其中最常見的就是基于協(xié)同過濾和基于內(nèi)容推薦相結(jié)合,稱其為基于內(nèi)容的協(xié)同過濾(Content-Based Collaborative Filtering)。
假設(shè)Ru×i是用戶user對(duì)物品item的評(píng)分矩陣,LFM算法就是找到兩個(gè)矩陣Pu×k,Qk×i使得P·Q≈R。稱P,Q分別為user和item的特征矩陣,其中k是隱類的特征維度。最后計(jì)算出用戶對(duì)每個(gè)物品item的預(yù)測(cè)評(píng)分,計(jì)算公式如下:

下面是LFM的目標(biāo)函數(shù),其中rui為用戶user對(duì)物品item的真實(shí)評(píng)分:


求解上式最優(yōu)化問題可以使用交替最小二乘法(Alternating Least Square,ALS)[10]和梯度下降法,由于最小二乘法計(jì)算復(fù)雜這里使用隨機(jī)梯度下降法(Stochastic Gradient Descent,SGD)。每次迭代單獨(dú)更新參數(shù)和其中α為學(xué)習(xí)率:

式(6)、(7)帶入式(5)得:

該算法很重要的影響的因素是P,Q初始值的選擇,一般選取P,Q初始為全0或1的矩陣和隨機(jī)數(shù)矩陣。大量實(shí)驗(yàn)證明,P,Q取隨機(jī)值時(shí)模型推薦效果更佳,本次實(shí)驗(yàn)在隨機(jī)值的基礎(chǔ)上除以。
上述算法沒有考慮到用戶的偏好,也沒有考慮到物品的冷門程度。假設(shè)用戶A偏向于打分很低,即使自己很喜歡的物品也只會(huì)給個(gè)中等分?jǐn)?shù),而用戶B偏向于打分很高,每個(gè)物品都給了較高的分?jǐn)?shù),LFM對(duì)于這種用戶的推薦的準(zhǔn)確率就會(huì)降低。同樣的,假定物品X屬于熱門產(chǎn)品,大多數(shù)用戶都對(duì)該物品有過行為,而物品Y屬于冷門產(chǎn)品,為極少數(shù)用戶所知。可能該物品某個(gè)用戶非常喜歡,但是沒有為該用戶進(jìn)行推薦,導(dǎo)致覆蓋率很低。
本文首先計(jì)算出所有評(píng)分的平均分μ,初始化用戶和物品的偏置矩陣bu,bi。給出改進(jìn)后的評(píng)分公式:

從而得到目標(biāo)函數(shù):


使用式(12)、(13)反復(fù)迭代訓(xùn)練出bu,bi。
以上訓(xùn)練方法訓(xùn)練時(shí)間過長(zhǎng),本文在更新P,Q前分別加入了用戶動(dòng)量M以及物品動(dòng)量N,其中M表示上一次更新時(shí)P的梯度的下降程度,N表示上一次更新時(shí)Q的梯度的下降程度,β為每次能夠接受的下降的程度。通過動(dòng)量M,N的添加能夠讓上一次梯度較大的地方下降的更快。同時(shí)梯度趨近與0的過程更加平緩,并且防止了過擬合和欠擬合的現(xiàn)象。通過實(shí)驗(yàn)證明準(zhǔn)確率和召回率有了明顯的提升,并且覆蓋率提升了近原來的兩倍。下面是算法的執(zhí)行過程:

上述介紹的算法訓(xùn)練出的模型,其在測(cè)試集的準(zhǔn)確率以及召回率有了明顯的提升,由于將用戶的偏好和物品的偏好也加入了訓(xùn)練,所以其在覆蓋率上更有了成倍的增長(zhǎng)。
本文采用了控制變量法來對(duì)本文的算法進(jìn)行驗(yàn)證,主要有兩組實(shí)驗(yàn)。第一組實(shí)驗(yàn)使用加入用戶偏好和物品偏好的算法(B-LFM)與傳統(tǒng)的LFM算法進(jìn)行對(duì)比,其驗(yàn)證了將用戶偏好和物品偏好帶入訓(xùn)練會(huì)大大的提高推薦的覆蓋率。第二組實(shí)驗(yàn)使用加入動(dòng)量并融合用戶和物品的情感因素的算法(MO-B-LFM)與B-LFM進(jìn)行對(duì)比,其驗(yàn)證了加入梯度下降動(dòng)量訓(xùn)練模型不僅能夠加快訓(xùn)練速度,在準(zhǔn)確率上相比LFM算法有了明顯提升,在覆蓋率上相比B-LFM也有了可見的增長(zhǎng)。下面介紹實(shí)驗(yàn)的具體內(nèi)容。
實(shí)驗(yàn)使用了MovieLens數(shù)據(jù)集[11],這是由GroupLens項(xiàng)目組創(chuàng)辦的一個(gè)包含大、中、小規(guī)模的推薦系統(tǒng)數(shù)據(jù)集[12~13]。其中小規(guī)模數(shù)據(jù)100k包含了1000個(gè)用戶對(duì)1700部電影的10000條評(píng)分記錄;中規(guī)模數(shù)據(jù)1M包含了6000個(gè)用戶對(duì)4000部電影的1000000個(gè)評(píng)分;大規(guī)模數(shù)據(jù)10M包含了72000個(gè)用戶對(duì)10000部電影的10000000個(gè)評(píng)分和100000個(gè)標(biāo)簽。實(shí)驗(yàn)使用了中、小規(guī)模兩個(gè)數(shù)據(jù)集對(duì)實(shí)驗(yàn)數(shù)據(jù)按照8:2劃分訓(xùn)練集與測(cè)試集并且保證了每個(gè)用戶都至少有20個(gè)評(píng)分?jǐn)?shù)據(jù)。
評(píng)價(jià)一個(gè)推薦算法的性能一般使用平均絕對(duì)誤差(MAE)[14]和均方根誤差(RMSE)[11]兩種,但是推薦系統(tǒng)關(guān)注的是推薦的TopN中的準(zhǔn)確率以及召回率,對(duì)于實(shí)際應(yīng)用還應(yīng)考慮其覆蓋率。
文獻(xiàn)[15]給出了準(zhǔn)確率、召回率以及覆蓋率的定義。對(duì)于用戶u推薦的N個(gè)物品組成的集合記作R(u),用戶u在測(cè)試集上喜歡的物品組成的集合記作T(u)[16]。

實(shí)驗(yàn)環(huán)境是Windows 10操作系統(tǒng),i7-9500H處理器,內(nèi)存24GB的CPU,使用的語言是Python,其版本是Python 3.7,編程工具使用了PyCharm。下面是實(shí)驗(yàn)中用于比較的算法。
算法1:傳統(tǒng)LFM算法
算法2:B-LFM算法:在傳統(tǒng)LFM算法基礎(chǔ)上添加了用戶偏好和物品偏好參與訓(xùn)練,其中bu,bi初始值為零矩陣。
算法3:MO-B-LFM算法:在算法2的基礎(chǔ)上添加用戶動(dòng)量M和物品動(dòng)量N,令β=0.65,M,N初始值為零矩陣。
采用兩組實(shí)驗(yàn)進(jìn)行對(duì)比,分別是算法1和算法2對(duì)比,以及算法2和算法3對(duì)比。
4.3.1 不同K值對(duì)實(shí)驗(yàn)的影響
LFM算法執(zhí)行的時(shí)間與隱類K有著直接的聯(lián)系,并且K值的選取也會(huì)影響算法的性能。實(shí)驗(yàn)固定α=0.02,λ=0.01正負(fù)樣本比例為1∶1分別研究K值取50,100,200,300,400的情況下推薦算法的準(zhǔn)確率,召回率以及覆蓋率,以求出最佳的K值。通過圖1表明,當(dāng)K=200時(shí)召回率和覆蓋率都是最高,故以下實(shí)驗(yàn)均基于K=200進(jìn)行。

圖1 不同K值下算法的準(zhǔn)確率和召回率
4.3.2 算法1與算法2對(duì)比試驗(yàn)
以上通過實(shí)驗(yàn)證明K值為200時(shí)算法性能最優(yōu),以下均使用K=200進(jìn)行試驗(yàn),B-LFM初始化bu,bi均為零矩陣。本文僅研究N取5,10,15,20,25時(shí)的情況,因?yàn)镹值取得過大,對(duì)于一個(gè)推薦系統(tǒng)就毫無意義。下圖是不同N值情況下算法的覆蓋率對(duì)比。實(shí)驗(yàn)結(jié)果如圖2所示,從圖可以看出,在N取何值時(shí),B-LFM算法的覆蓋率都遙遙領(lǐng)先于LFM算法,由此說明加入情感因素訓(xùn)練模型能極大地提高算法的覆蓋率。

圖2 不同N值下算法的覆蓋率
4.3.3 算法2與算法3對(duì)比試驗(yàn)
以上通過實(shí)驗(yàn)證明加入情境因素進(jìn)行訓(xùn)練可以極大提高算法的覆蓋率。下面研究在用戶動(dòng)量和物品動(dòng)量的加持下算法MO-B-LFM的準(zhǔn)確率以及召回率。通過圖3可知MO-B-LFM算法在準(zhǔn)確率和召回率都比B-LFM算法要高,進(jìn)而證明了加入動(dòng)量矩陣能夠有效地提升算法的性能。

圖3 BLFM與MO-B-LFM算法性能對(duì)比
本文通過分析LFM算法的不足,融合了用戶和物品的情感因素,這不僅僅增加了算法準(zhǔn)確率和召回率,還極大地提升了算法的覆蓋率,使得冷門物品也能被推薦給更多的用戶,這樣就不會(huì)讓某個(gè)物品出現(xiàn)“餓死”現(xiàn)象。通過加入動(dòng)量參與模型的訓(xùn)練,不僅能夠縮短訓(xùn)練所需時(shí)間,也能夠大大提升算法的準(zhǔn)確率和召回率。