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