劉琦,羅玉
(西華大學(xué)計(jì)算機(jī)與軟件工程學(xué)院,成都 610039)
在信息爆炸的時代,推薦系統(tǒng)在減輕信息過載方面發(fā)揮了巨大的作用,被眾多在線服務(wù),包括電子商務(wù)、網(wǎng)絡(luò)新聞和社交媒體等廣泛采用。個性化推薦系統(tǒng)的關(guān)鍵在于根據(jù)過去用戶交互的內(nèi)容(評分、點(diǎn)擊),對用戶對項(xiàng)目的偏好進(jìn)行建模。個性化推薦技術(shù)中運(yùn)用的推薦算法雖不盡相同,但基于協(xié)同過濾算法的推薦由于其簡單性、準(zhǔn)確性、有效性等優(yōu)勢成為目前應(yīng)用最廣泛的個性化推薦算法。
數(shù)據(jù)稀疏性一直以來都是協(xié)同過濾算法的一大難題,對此,國內(nèi)外學(xué)者進(jìn)行了大量的研究。有些研究者認(rèn)為數(shù)據(jù)稀疏性問題會從近鄰搜尋不夠準(zhǔn)確和近鄰評分過少兩方面對協(xié)同過濾產(chǎn)生不利影響。還有些學(xué)者針對推薦系統(tǒng)中的數(shù)據(jù)稀疏性和冷啟動等問題,對社會化推薦系統(tǒng)在信任推理以及推薦關(guān)鍵技術(shù)等方面做了比較全面的綜述。
本文就近鄰評分?jǐn)?shù)據(jù)過少,先通過原始數(shù)據(jù)得到初步的用戶相似度和每個用戶的近鄰,利用Slope One算法計(jì)算評分預(yù)測值來填充數(shù)據(jù),并基于填充后的數(shù)據(jù)修正相似度和優(yōu)化近鄰選取集合,最終給出目標(biāo)用戶的推薦列表。實(shí)驗(yàn)數(shù)據(jù)集來自MovieLens-100K數(shù)據(jù)集。
Slope One算法是一種基于物品協(xié)同過濾的算法,它的一個主要優(yōu)點(diǎn)是簡潔性、容易實(shí)現(xiàn)、執(zhí)行效率高,推薦的準(zhǔn)確性相對傳統(tǒng)的基于用戶和項(xiàng)目的協(xié)同過濾算法也較高。Slope One算法來自Daniel Lemire和An?na Machlachlan的論文Slope One Predictors for Online Rating-Based Collaborative Filtering。
Slope One算法是基于不同項(xiàng)目之間的評分差來預(yù)測用戶對于物品的評分,步驟主要分為兩步:
(1)計(jì)算偏差
計(jì)算項(xiàng)目之間的偏差,記devi,j為評分偏差(兩個項(xiàng)目要被同時評分),如公式(1)所示:
其中,card(S)是S集合中的元素個數(shù),X是整個評分集合。因此,card(Si,j(X))是所有同時對i和j進(jìn)行評分的用戶集合。如表1所示:
表1 四個用戶對三個樂隊(duì)的評分矩陣
評分區(qū)間為1-5之間(1分為最低分,5分為最高分),其中“?”表示缺失項(xiàng)??紤]PSY到Taylor Swift的評分偏差。這種情況下,card(Si,j(X))就應(yīng)該是2,這是因?yàn)橛袃蓚€用戶(Amy和Ben)同時對PSY和Taylor Swift進(jìn)行了評分。ui-uj是用戶對Taylor Swift的評分減去其對PSY的評分。因此,偏差結(jié)果為:
于是,PSY到Taylor Swift的評分偏差為2,這也意味著用戶對Swift的評分平均要比PSY高2分。同樣,可以得到Taylor Swift到PSY的評分偏差為:
(2)利用Slope One算法進(jìn)行預(yù)測
現(xiàn)在我們擁有了一個非常大的偏差數(shù)據(jù)集,然后便可以利用該數(shù)據(jù)集進(jìn)行評分預(yù)測了,公式如下:
其中,ci,j=card(Si,j(X)),表示同時對項(xiàng)目i和j有過評分的用戶個數(shù)。psl(u)j表示用戶u對項(xiàng)目j的預(yù)測評分。例如 psl(Ben)WhitneyHouston指的是Ben對White Hous?ton的預(yù)測評分。
“協(xié)同過濾”概念最早是由GlodBerg等人在上世紀(jì)90年代中期設(shè)計(jì)Tapestry推薦系統(tǒng)時提出的。近些年隨著學(xué)者們深入研究和應(yīng)用,協(xié)同過濾技術(shù)也得到了長足發(fā)展。目前協(xié)同過濾技術(shù)大體分為三類,分別是基于用戶的協(xié)同過濾、基于物品的協(xié)同過濾以及基于模型的協(xié)同過濾。
在基于內(nèi)存的協(xié)同過濾算法中,是通過尋找相似來進(jìn)行推薦。例如在基于用戶的協(xié)同過濾算法中,假設(shè)要完成的任務(wù)是推薦一本書給用戶,則算法搜索出與你興趣類似的其他用戶,一旦找到該用戶,就看看這個用戶所喜歡的書然后將它們推薦給你。又例如在基于物品的協(xié)同過濾算法中(上述的Slope One就屬于這類算法),算法會計(jì)算出書籍之間的相似度,然后推薦給用戶消費(fèi)過的相似書籍。
基于神經(jīng)網(wǎng)絡(luò)的協(xié)同過濾是基于模型的協(xié)同過濾,其本質(zhì)其實(shí)也是一種機(jī)器學(xué)習(xí)模型。本文采用DNN網(wǎng)絡(luò)進(jìn)行設(shè)計(jì)。模型分為三層,分別是輸入層、隱藏層以及輸出層。輸入層輸入的是由用戶特征和物品特征連接形成的輸入向量。輸出層是一個神經(jīng)元,輸出的是對物品的評分。在本文中,我們將某用戶的評分情況作為它的特征向量,例如在表1中的某一行。我們將某物品的被評分情況作為它的特征向量,例如在表1中的某一列。在本文中,隱藏層的激活函數(shù)采用的是relu,輸出層的激活函數(shù)采用的是sigmoid。因?yàn)槲覀兊妮敵鰧拥妮敵龇秶?~1之間,而標(biāo)簽數(shù)據(jù)是1~5之間,所以我們還要事先將訓(xùn)練標(biāo)簽歸一化處理,這樣,標(biāo)簽數(shù)據(jù)也就映射到0.2~1之間。本文采用隨機(jī)梯度下降法發(fā)來訓(xùn)練網(wǎng)絡(luò),代價函數(shù)采用的是均方誤差(MSE):
其中,y(x)是我們的預(yù)測值,a是我們的實(shí)際值,a的取值范圍在0.2~1之間??梢钥闯?,本質(zhì)上該模型其實(shí)與基于用戶協(xié)同過濾有相同點(diǎn),不過該模型的優(yōu)點(diǎn)在于它還考慮了特征與評分之間的非線性關(guān)系。
本模型主要分為兩個模塊:①矩陣填充模塊:通過Slope One算法先將原始稀疏的用戶-物品矩陣進(jìn)行填充,該算法對比其他的填充算法(均值、中值等),它避免了填充過于單一的問題,填充的分?jǐn)?shù)可信度也更高。②基于神經(jīng)網(wǎng)絡(luò)的評分模塊:利用填充過后的用戶-物品評分矩陣,然后訓(xùn)練神經(jīng)網(wǎng)絡(luò),這樣就一定程度上避免了矩陣過于稀疏的問題。
算法流程根據(jù)上述模型,整理算法流程如下:(1)輸入原始稀疏的評分矩陣;
(2)對每一個物品計(jì)算它與其他物品的評分偏差并得到偏差數(shù)據(jù)集;
(3)利用偏差數(shù)據(jù)集進(jìn)行評分填充,得到填充過后的稠密矩陣;
(4)將得到的稠密矩陣送入網(wǎng)絡(luò)中進(jìn)行訓(xùn)練;
(5)用訓(xùn)練得到的神經(jīng)網(wǎng)絡(luò)進(jìn)行評分預(yù)測。
使用的數(shù)據(jù)集是來自美國明尼蘇達(dá)州立大學(xué)的GroupLens研究小組整理的MovieLens標(biāo)準(zhǔn)數(shù)據(jù)集。本次采用里面的ml-100k數(shù)據(jù)集。該數(shù)據(jù)集包含了943個獨(dú)立的用戶對1682部電影作品的10條評分?jǐn)?shù)據(jù),數(shù)據(jù)的稀疏程度為0.063。該數(shù)據(jù)集有三個數(shù)據(jù)文件:存儲了用戶信息的users.dat,存儲了電影信息的movies.dat和存儲用戶對電影評分信息的ratings.dat。本次實(shí)驗(yàn)使用第三個數(shù)據(jù)文件即可,即ratings.dat。rat?ing的范圍在1~5之間,數(shù)值越大,表明用戶對該部電影的評價越高,反之越低。
推薦系統(tǒng)的評估大體分為兩類:離線測試和A/B測試。離線測試是在線下通過準(zhǔn)備好的測試集對模型進(jìn)行測試。A/B測試是一種線上測試方法,通過將用戶隨機(jī)分為兩組,然后對這兩組用戶分別使用不同的推薦算法,然后通過用戶的點(diǎn)擊率購買率等來判斷兩種方法孰優(yōu)孰劣。本次實(shí)驗(yàn)采用均方根誤差(RMSE)作為評測指標(biāo)。公式為:
實(shí)驗(yàn)使用Python作為開發(fā)語言,我們將數(shù)據(jù)集90%作為訓(xùn)練集,10%作為測試集。并且我們與其他算法做對比實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果如表2所示:
表2
從實(shí)驗(yàn)結(jié)果可以看出,我們提出的方法在與另外四種方法的對比中得到了最小的RMSE值。
評分?jǐn)?shù)據(jù)過于稀疏的問題一直是一個影響推薦效果的因素,在一定程度上緩解了協(xié)同過濾推薦中的數(shù)據(jù)稀疏性問題,并彌補(bǔ)了空值填補(bǔ)法填補(bǔ)值過于單一的問題。隨后,在填充后的用戶-項(xiàng)目評分矩陣下給出推薦列表及測試集的預(yù)測值,并與其他協(xié)同過濾推薦算法進(jìn)行比較,結(jié)果表明本文算法可以改善數(shù)據(jù)稀疏性問題,并推高推薦系統(tǒng)的推薦質(zhì)量。