黎丹冰,丁 陽(yáng),陳怡華,呂雪松,黎丹雨
(1.武漢理工大學(xué)繼續(xù)教育學(xué)院,湖北 430070;2.廣州探途網(wǎng)絡(luò)技術(shù)有限公司研發(fā)部,廣州 510000;3.廣州新華學(xué)院信息科學(xué)學(xué)院,廣州 510000)
目前主流平臺(tái)及應(yīng)用程序(APP)為了提升用戶體驗(yàn),增加平臺(tái)對(duì)用戶的粘性,都提供推薦功能。在這個(gè)數(shù)據(jù)即價(jià)值的時(shí)代,不論是新聞、電影、音樂(lè),還是美食、書(shū)籍、服裝等,平臺(tái)都能夠快速捕獲用戶的注意力,滿足用戶的需求,例如Amazon電子商務(wù)推薦系統(tǒng)[1],Netflix視頻推薦系統(tǒng),今日頭條新聞推薦系統(tǒng)[2]等。在電影推薦領(lǐng)域,電影信息與用戶信息的交互度不高,使得數(shù)據(jù)呈現(xiàn)極度稀疏狀態(tài),從而造成傳統(tǒng)的電影推薦系統(tǒng)個(gè)性化不強(qiáng),很多平臺(tái)推薦給用戶的電影都是一些熱門(mén)電影,但這并不能代表一定是用戶偏愛(ài)的電影。因此,針對(duì)用戶的個(gè)性化電影推薦,滿足用戶的興趣需求,是一個(gè)長(zhǎng)期棘手的問(wèn)題。
目前推薦系統(tǒng)最常用的算法大致可分為以下幾種:
(1)矩陣分解技術(shù):是推薦系統(tǒng)中廣泛使用的一種方法,Yehuda Koren將矩陣分解模型的優(yōu)勢(shì)發(fā)揮得淋漓盡致。近年來(lái)很多學(xué)者、專家都致力于對(duì)矩陣分解算法進(jìn)行優(yōu)化,從而誕生出很多經(jīng)典的矩陣分解算法,例如加權(quán)正則化矩陣分解(WRMF)[3],非負(fù)矩陣分解(NMF)[4],概率矩陣分解(PMF)[5],貝葉斯個(gè)性化排序(BPR)[6],分解機(jī)(FM)[7],等等。
(2)協(xié)同過(guò)濾技術(shù):該方法主要有兩種,基于用戶的協(xié)同過(guò)濾算法(User CF)和基于物品的協(xié)同過(guò)濾算法(Item CF),依據(jù)對(duì)商品的評(píng)分來(lái)向用戶推薦商品。
(3)深度學(xué)習(xí)技術(shù):將深度學(xué)習(xí)模型應(yīng)用于推薦系統(tǒng),使模型自主學(xué)習(xí)用戶和物品的特征,進(jìn)行精準(zhǔn)推薦是當(dāng)前研究的熱點(diǎn)。深度學(xué)習(xí)模型具有強(qiáng)大的學(xué)習(xí)和預(yù)測(cè)能力[8]。電影推薦系統(tǒng)中,針對(duì)電影的評(píng)論、圖片海報(bào)等信息,可利用深度學(xué)習(xí)模型提取特征來(lái)代替用戶的興趣或電影屬性。
推薦算法中的矩陣分解最初是從SVD(singular value decomposition)借鑒來(lái)的。推薦系統(tǒng)中的矩陣分解最典型的就是隱語(yǔ)義模型(LFM)[9],諸多學(xué)者在此基礎(chǔ)上進(jìn)行優(yōu)化和改進(jìn)。尤耀華等[10]提出基于矩陣分解的感知興趣點(diǎn)智能推薦算法,該方法改進(jìn)用戶范圍矩陣和感知興趣點(diǎn)矩陣,利用矩陣分解的思想為用戶推薦感知興趣點(diǎn),可信度最高可達(dá)98%。潘曉等[11]在軌跡推薦中使用了矩陣分解技術(shù),通過(guò)矩陣分解學(xué)習(xí)用戶行為習(xí)慣。蔡崇超等[12]結(jié)合社交網(wǎng)絡(luò)中的用戶關(guān)系,來(lái)緩解矩陣的稀疏性,最終推薦精度在Douban數(shù)據(jù)集上提升62%,但該方法沒(méi)有考慮用戶的興趣及關(guān)聯(lián)關(guān)系。張黎[13]將矩陣分解技術(shù)引入到深度學(xué)習(xí)模型中,提出一種加權(quán)神經(jīng)網(wǎng)絡(luò)矩陣分解模型。白露露[14]融合了矩陣分解思想與深度學(xué)習(xí)模型,利用卷積神經(jīng)網(wǎng)絡(luò)(CNN)提取用戶和物品的淺層語(yǔ)義矩陣,并利用矩陣分解思想進(jìn)行評(píng)分的預(yù)測(cè)。田震等[15]在廣義矩陣分解模型的基礎(chǔ)上引入了隱藏層,利用深層神經(jīng)網(wǎng)絡(luò)模型來(lái)學(xué)習(xí)用戶和物品間高階交互關(guān)系,但是網(wǎng)絡(luò)層數(shù)的增加會(huì)導(dǎo)致模型過(guò)擬合。由此可見(jiàn),矩陣分解和深度學(xué)習(xí)的發(fā)展也在影響著推薦系統(tǒng)。
本文將矩陣分解思想與神經(jīng)網(wǎng)絡(luò)結(jié)合,利用矩陣分解進(jìn)行初始值的篩選,改進(jìn)神經(jīng)網(wǎng)絡(luò)中損失函數(shù)的優(yōu)化方法,使最終的參數(shù)更加接近全局最優(yōu)解。
MovieLens電影數(shù)據(jù)集提供的數(shù)據(jù)屬性有多種,例如用戶的基本信息、評(píng)分、電影的名稱、年份、類型等,本文根據(jù)數(shù)據(jù)集中的movie ID、user ID和rating之間的關(guān)系,創(chuàng)建原始電影評(píng)分矩陣和評(píng)分記錄矩陣,并分解出電影內(nèi)容矩陣與用戶喜好矩陣,結(jié)合BP神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)模型生成推薦列表。整體架構(gòu)圖如圖1所示。
2.2.1 原始屬性篩選
電影原始數(shù)據(jù)的屬性有user ID、movie ID、rating、timestamp、title、genres等。需要用到的關(guān)鍵屬性有user ID、movie ID、rating、title。由于movie ID并不等于行號(hào),并且遠(yuǎn)遠(yuǎn)大于行號(hào),故需要用行號(hào)代替movie ID,以緩解矩陣的稀疏性。
2.2.2 利用矩陣分解進(jìn)行初始權(quán)值及閾值篩選
(1)隱語(yǔ)義模型(LFM)
LFM是用隱語(yǔ)義來(lái)表達(dá)用戶和物品的特征,其乘積可以得到近似原始數(shù)據(jù)。假設(shè)有m部電影,電影集合為I={i1,i2,…,im},n個(gè)用戶,用戶集合為U={u1,u2,…,un},評(píng)分矩陣R為用戶對(duì)電影的評(píng)分,LFM的目的是找到最優(yōu)的U和I,通過(guò)U×I得到預(yù)測(cè)評(píng)分矩陣R?。為了獲得更精確的U和I,LFM最小化損失函數(shù),見(jiàn)式(1)。
其中,φ為正則化系數(shù),通過(guò)隨機(jī)梯度下降法(SGD)找到潛在的U和I。
(2)本文中的相關(guān)矩陣分解方法
本文將用戶-電影評(píng)分矩陣分解成電影內(nèi)容矩陣α和用戶偏好矩陣β。創(chuàng)建一個(gè)全零矩陣,行和列分別為電影及用戶的數(shù)量,即m與n。再將原始rating中的評(píng)分值填入創(chuàng)建的矩陣中,沒(méi)有評(píng)分的即為空。由此得到m×n的電影原始評(píng)分矩陣A,用來(lái)記錄每個(gè)用戶的評(píng)分情況。A的形式如下:
其中,Aij表示用戶j對(duì)電影i的評(píng)分值。
電影內(nèi)容矩陣α可表示為電影i的類型,數(shù)據(jù)集中的電影類型有:Action/Adventure/Animation/Children's/Comedy/War等,每部電影類型并不單一,可同時(shí)屬于幾種類型,如表1所示。
表1 部分電影類型情況
α為m×k的矩陣,其中k為電影類型數(shù)量。
αxy表示第x部電影的第y種類型的權(quán)重。
β表示用戶對(duì)某種類型的喜愛(ài)程度,為k×n階矩陣。
βxy表示第x個(gè)用戶對(duì)第y種類型電影的評(píng)分均值。
則?即為預(yù)測(cè)的用戶評(píng)分矩陣:
步驟如下:
(1)使用用戶對(duì)每種電影類型的評(píng)分均值,初始化α、β;
(2)構(gòu)建損失函數(shù)J(α,β);
(3)使J(α,β)誤差最小化,訓(xùn)練模型;
(4)得到預(yù)測(cè)評(píng)分矩陣?,并根據(jù)?中的評(píng)分由高到低進(jìn)行推薦。
2.3.1 損失函數(shù)的設(shè)計(jì)
本次構(gòu)建的損失函數(shù)如下,在誤差評(píng)分和的基礎(chǔ)上引入正則化項(xiàng)來(lái)防止過(guò)擬合:
其中,前半部分表示預(yù)測(cè)評(píng)分與實(shí)際評(píng)分之間的偏差,后半部分是為了避免訓(xùn)練過(guò)擬合而引入的正則化項(xiàng)。γ評(píng)分記錄表,λ為正則化參數(shù),y(i,j)表示用戶i對(duì)電影j的真實(shí)評(píng)分。
2.3.2 自適應(yīng)矩估計(jì)算法(Adam)的改進(jìn)
Adam算法是常用的優(yōu)化訓(xùn)練方法,優(yōu)點(diǎn)是經(jīng)過(guò)偏置校正后的參數(shù)比較平穩(wěn)[17]。
Adam算法參數(shù)更新方式如下:
初始化參數(shù):
while(迭代次數(shù)t<設(shè)定最大迭代次數(shù)tmax):
修正mt和vt:
更新參數(shù):
其中,θ為初始參數(shù),gt為t步的梯度,β1為一階矩估計(jì)指數(shù)衰減率,β2為二階矩估計(jì)指數(shù)衰減率,mt和vt分別是對(duì)梯度的一階矩估計(jì)和二階 矩 估 計(jì),和是 對(duì)mt和vt的 校 正,對(duì)學(xué)習(xí)率形成一個(gè)動(dòng)態(tài)約束,但在后期有一些小的缺陷,Adam算法中對(duì)vt的計(jì)算加入了指數(shù)移動(dòng)平均函數(shù),其值為有效時(shí)間內(nèi)的梯度的加權(quán)平均值,隨著時(shí)間的變化,學(xué)習(xí)率可能會(huì)出現(xiàn)震蕩。
針對(duì)上述問(wèn)題,本文結(jié)合時(shí)間函數(shù)和高斯核函數(shù)的方法,來(lái)訓(xùn)練后期學(xué)習(xí)率的更新。該方法主要思想是為每個(gè)時(shí)間段學(xué)習(xí)一個(gè)學(xué)習(xí)率參數(shù),添加時(shí)間距離作為權(quán)重。對(duì)于這些隨時(shí)間變化的函數(shù),結(jié)合高斯核方法,獲得前n-1次迭代的時(shí)間集合T={t0,t1,…,tn-1},利用高斯核計(jì)算時(shí)間相似性計(jì)算前n-1次迭代在時(shí)間上的相似性,使用時(shí)間相似性對(duì)參數(shù)γi(ti)進(jìn)行加權(quán),得到第n次迭代的學(xué)習(xí)率。
其中,γi(ti)為時(shí)間ti時(shí)的學(xué)習(xí)率,τ為時(shí)間衰減指數(shù)。在訓(xùn)練過(guò)程前期,模型還未達(dá)到穩(wěn)定狀態(tài),時(shí)間因素影響不大,可使用Adam優(yōu)化器進(jìn)行訓(xùn)練,當(dāng)訓(xùn)練步長(zhǎng)大于設(shè)定閾值t0時(shí),學(xué)習(xí)率的更新規(guī)則如公式(16)。學(xué)習(xí)率更新如圖2所示。
本次實(shí)驗(yàn)用的數(shù)據(jù)集是MovieLens 1M,該數(shù)據(jù)集是機(jī)器學(xué)習(xí)和推薦系統(tǒng)常用的公開(kāi)數(shù)據(jù)集,記錄了6040個(gè)用戶對(duì)3952部電影的1000209條評(píng)分記錄。隨機(jī)選取數(shù)據(jù)集的80%作為訓(xùn)練集,20%作為檢驗(yàn)集,檢驗(yàn)推薦系統(tǒng)的性能。
實(shí)驗(yàn)在Windows10系統(tǒng)環(huán)境下,采用Anaconda3平臺(tái)進(jìn)行網(wǎng)絡(luò)訓(xùn)練,實(shí)驗(yàn)中的所有代碼由Python3.7編寫(xiě)完成。激活函數(shù)選擇Relu函數(shù),輸出函數(shù)為Sigmoid函數(shù),用Adam算法優(yōu)化3層BP神經(jīng)網(wǎng)絡(luò),根據(jù)迭代次數(shù)的不斷調(diào)整,最終選擇迭代次數(shù)為5000次。
本文的評(píng)價(jià)指標(biāo)包括準(zhǔn)確率(Accuracy)和平均絕對(duì)誤差(MAE)。
準(zhǔn)確率的計(jì)算過(guò)程如式(17)所示:
式(17)中,n為用戶數(shù)量,N為推薦列表中用戶真正喜歡的數(shù)量,L為給用戶m推薦的列表長(zhǎng)度。
平均絕對(duì)偏差MAE體現(xiàn)預(yù)測(cè)與真實(shí)評(píng)分之間的偏差平均值,計(jì)算過(guò)程如式(18)所示:
式(18)中,n為用戶數(shù)量,pi為預(yù)測(cè)評(píng)分,ri為測(cè)試數(shù)據(jù)中的實(shí)際評(píng)分。因此,準(zhǔn)確率越高,說(shuō)明模型性能越好;MAE值越小,說(shuō)明誤差越小,模型的性能越好。
準(zhǔn)確率隨迭代次數(shù)的變化如圖3所示。
3.3.1 不同近鄰數(shù)目下的結(jié)果比較
該實(shí)驗(yàn)用于驗(yàn)證深度學(xué)習(xí)模型在電影推薦系統(tǒng)上的性能。取最小近鄰數(shù)分別為10、20、30、40、50的情況下,通過(guò)計(jì)算Top-N結(jié)果,對(duì)比基于用戶的協(xié)同過(guò)濾User CF和基于項(xiàng)目的協(xié)同過(guò)濾Item CF,觀察準(zhǔn)確率和MAE值。結(jié)果分別如圖4和圖5所示。
實(shí)驗(yàn)結(jié)果顯示,本文所提改進(jìn)的矩陣分解與神經(jīng)網(wǎng)絡(luò)模型推薦方法,在不同的近鄰數(shù)上,性能指標(biāo)變化不大,這可能是由于BP神經(jīng)網(wǎng)絡(luò)中超參數(shù)和結(jié)構(gòu)確定下來(lái)后,模型的學(xué)習(xí)能力受限所導(dǎo)致的。但是在上述這些指標(biāo)上本文的方法對(duì)比基于項(xiàng)目和基于用戶的傳統(tǒng)協(xié)同過(guò)濾方法,均有較好的效果。
圖6 和圖7的結(jié)果表明,Adam優(yōu)化器和改進(jìn)后的Adam優(yōu)化器,稍微優(yōu)于SGD優(yōu)化器,在迭代次數(shù)較小時(shí),前兩者的準(zhǔn)確率基本一致;當(dāng)?shù)螖?shù)增加,模型的訓(xùn)練時(shí)間變長(zhǎng),改進(jìn)的Adam優(yōu)化器的優(yōu)勢(shì)才逐漸體現(xiàn)出來(lái)。
本文利用改進(jìn)的矩陣分解方法與BP神經(jīng)網(wǎng)絡(luò)模型結(jié)合,將用戶對(duì)電影的評(píng)分矩陣分解成電影內(nèi)容矩陣與用戶愛(ài)好矩陣,利用BP神經(jīng)網(wǎng)絡(luò)進(jìn)行學(xué)習(xí),訓(xùn)練過(guò)程使用了改進(jìn)的Adam方法,在MovieLens數(shù)據(jù)集上進(jìn)行驗(yàn)證,并分別與User-CF和Item-CF算法,以及Adam與SGD優(yōu)化器進(jìn)行了對(duì)比。實(shí)驗(yàn)結(jié)果表明,本文提出的方法比傳統(tǒng)協(xié)同過(guò)濾算法的推薦效果更好。在與Adam和SGD的對(duì)比中,前期效果不明顯,但隨著時(shí)間增加,優(yōu)勢(shì)逐漸顯現(xiàn)出來(lái)。