王志遠(yuǎn) 王興芬
1(北京信息科技大學(xué)計(jì)算機(jī)學(xué)院 北京 100101)2(北京信息科技大學(xué)信息管理學(xué)院 北京 100192)
當(dāng)今大數(shù)據(jù)時(shí)代面臨的主要問(wèn)題之一是如何從龐大的數(shù)據(jù)海洋中尋找到用戶需要的信息,即信息過(guò)載問(wèn)題。個(gè)性化推薦技術(shù)逐漸興起,相比于信息系統(tǒng)、搜索引擎等技術(shù),個(gè)性化推薦技術(shù)有著精準(zhǔn)定位、因人而異的優(yōu)點(diǎn),它往往不需要用戶搜索式地輸入信息,而是通過(guò)用戶的歷史行為記錄或歷史評(píng)價(jià)信息為用戶提供個(gè)性化的信息推送和智能決策。個(gè)性化推薦技術(shù)在很大程度上能解決傳統(tǒng)搜索中的信息冗余問(wèn)題,盡可能地避免用戶瀏覽大量的無(wú)關(guān)信息和不感興趣的信息,極大地提升了用戶的體驗(yàn)。以往推薦算法的功能是在當(dāng)數(shù)據(jù)中沒有滿足用戶需求的信息時(shí),向用戶推薦盡可能接近用戶需求的信息。而目前推薦算法需要解決的問(wèn)題是,當(dāng)數(shù)據(jù)中有大量符合用戶需求的信息時(shí),根據(jù)用戶的歷史數(shù)據(jù)推測(cè)出用戶的潛在需求,然后根據(jù)用戶的潛在需求進(jìn)一步從數(shù)據(jù)庫(kù)中篩選出用戶可能需要的信息,排序后推薦給用戶。這種潛在的需求可能是用戶自身都沒有察覺到的個(gè)人偏好,但它是真實(shí)存在的,就蘊(yùn)藏在數(shù)據(jù)之中。
推薦技術(shù)的出現(xiàn)和不斷成熟使得這些網(wǎng)絡(luò)平臺(tái)的內(nèi)容提供商的個(gè)性化服務(wù)功能不斷完善,用戶的實(shí)際體驗(yàn)也逐步攀升,甚至對(duì)推薦系統(tǒng)產(chǎn)生依賴性,增加了用戶的黏性,帶來(lái)了巨大的經(jīng)濟(jì)價(jià)值。而對(duì)于廣大的用戶來(lái)說(shuō),一個(gè)高度智能的推薦系統(tǒng)不僅節(jié)約了大量寶貴的時(shí)間,快捷高效地獲得想要的信息數(shù)據(jù),而且極大地降低了尋找感興趣的信息的難度。因此無(wú)論是對(duì)信息服務(wù)的提供商還是對(duì)于廣大的普通用戶,推薦技術(shù)的應(yīng)用都有著其獨(dú)特的重要意義。
協(xié)同過(guò)濾算法是個(gè)性化推薦中使用最為廣泛的方法,然而在用戶和項(xiàng)目的數(shù)量十分龐大但是用戶只在很少的項(xiàng)目上有評(píng)分記錄時(shí)就會(huì)導(dǎo)致數(shù)據(jù)稀疏性問(wèn)題。在協(xié)同過(guò)濾算法中,數(shù)據(jù)稀疏會(huì)使得用戶之間計(jì)算相似度時(shí)可以用來(lái)進(jìn)行計(jì)算的數(shù)據(jù)過(guò)少,導(dǎo)致求得的用戶相似度不準(zhǔn)確,最終影響預(yù)測(cè)評(píng)分的準(zhǔn)確度。
針對(duì)協(xié)同過(guò)濾中存在的數(shù)據(jù)稀疏性問(wèn)題,國(guó)內(nèi)外學(xué)者進(jìn)行了大量的研究。在融合多源數(shù)據(jù)方面,王建芳等[1]針對(duì)用戶交叉評(píng)分項(xiàng)較少的情況,提出一種相似度與社交網(wǎng)絡(luò)中信任因子結(jié)合的協(xié)同過(guò)濾算法,在對(duì)評(píng)分矩陣填充時(shí)存在誤差的項(xiàng)目通過(guò)信任因子動(dòng)態(tài)調(diào)整,獲得更符合實(shí)際的相似度;萬(wàn)惠等[2]根據(jù)社區(qū)劃分的思想,采用凝聚式層次聚類算法對(duì)電影類別劃分為不同的社區(qū),在目標(biāo)用戶所屬的社區(qū)里通過(guò)用戶的標(biāo)簽和評(píng)分?jǐn)?shù)據(jù)計(jì)算用戶間的相似度,進(jìn)而對(duì)目標(biāo)用戶進(jìn)行推薦,提高了推薦的效果;肖成龍等[3]融合社交網(wǎng)絡(luò)和關(guān)鍵用戶信息,在用戶-項(xiàng)目矩陣的基礎(chǔ)上得到了社交信任矩陣和關(guān)鍵用戶評(píng)分矩陣,然后分別賦予這三個(gè)矩陣不同的權(quán)重,協(xié)同計(jì)算出用戶對(duì)目標(biāo)項(xiàng)目的預(yù)測(cè)評(píng)分,有效地緩解了數(shù)據(jù)的稀疏性問(wèn)題。在矩陣分解方面,李曉菊等[4]提出了一種基于變分循環(huán)自動(dòng)編碼器的概率矩陣分解方法,將商品的描述文本編碼成一個(gè)特征向量,然后將該特征向量融合到概率矩陣分解模型中,在評(píng)分矩陣極其稀疏的情況下,能更有效地預(yù)測(cè)用戶感興趣的商品列表,提高推薦準(zhǔn)確性;畢閏芳[5]提出了一種基于SVR的矩陣填充模型,首先通過(guò)對(duì)原始的用戶評(píng)分矩陣中的空缺值使用預(yù)測(cè)值填充,然后采用協(xié)同過(guò)濾算法形成初步的推薦列表,最后借助用戶興趣偏好畫像對(duì)推薦列表進(jìn)行二次篩選;羅國(guó)前等[6]通過(guò)融入情境偏置和全局偏置在矩陣分解算法的基礎(chǔ)上對(duì)目標(biāo)項(xiàng)目預(yù)測(cè)評(píng)分,一方面使得矩陣規(guī)模大大下降,另一方面通過(guò)情境因素對(duì)預(yù)測(cè)評(píng)分的修正,提高預(yù)測(cè)的準(zhǔn)確度;蔡念等[7]通過(guò)加入用戶和項(xiàng)目的影響因子改進(jìn)傳統(tǒng)的矩陣分解模型,同時(shí)與跨通道卷積神經(jīng)網(wǎng)絡(luò)結(jié)合,提高了預(yù)測(cè)模型的準(zhǔn)確度。在融合多模型方面,于歡[8]采用多模型融合的算法深層次提取了用戶的偏好,同時(shí)重點(diǎn)關(guān)注用戶的近期偏好,使得模型在推薦結(jié)果的準(zhǔn)確度和驚喜度上更加靈活,為不同用戶提供的推薦更個(gè)性化,有助于進(jìn)一步提升用戶的真實(shí)體驗(yàn);胡芳燚[9]全面分析了用戶評(píng)分所造成的全局影響,并且利用物品相似度與用戶之間的映射關(guān)系提高了用戶間相似度計(jì)算的準(zhǔn)確性,同時(shí)根據(jù)用戶評(píng)分時(shí)間通過(guò)引入艾賓浩斯遺忘曲線調(diào)整評(píng)分?jǐn)?shù)據(jù)的權(quán)重,挖掘用戶的興趣變化規(guī)律,分析群體性行為對(duì)用戶興趣偏好的影響;湯穎等[10]針對(duì)傳統(tǒng)的推薦算法難以捕捉用戶興趣偏好的問(wèn)題,設(shè)計(jì)了一種基于用戶局部模型加權(quán)融合的算法,該算法借助LDA主題模型于語(yǔ)義層次計(jì)算用戶的特征向量實(shí)現(xiàn)用戶聚類,進(jìn)而提高了電影的個(gè)性化推薦效果。
以上改進(jìn)研究在一定程度上提高了推薦的效果,但沒有充分挖掘分析在實(shí)際應(yīng)用場(chǎng)景中用戶屬性和項(xiàng)目?jī)?nèi)容相較于其他領(lǐng)域的特殊性及其對(duì)推薦結(jié)果的影響。本文聚焦于電影推薦領(lǐng)域,針對(duì)協(xié)同過(guò)濾算法只考慮用戶評(píng)分而忽略用戶屬性和項(xiàng)目?jī)?nèi)容的缺點(diǎn),研究不同用戶的興趣差異,在對(duì)用戶未評(píng)分項(xiàng)目進(jìn)行預(yù)測(cè)時(shí),著重分析了用戶興趣差異和項(xiàng)目屬性對(duì)預(yù)測(cè)結(jié)果的影響。經(jīng)過(guò)在電影評(píng)分?jǐn)?shù)據(jù)集上的實(shí)驗(yàn)驗(yàn)證,本文算法在數(shù)據(jù)稀疏的情況下仍能保持預(yù)測(cè)評(píng)分的準(zhǔn)確度,有效地提升了算法的推薦性能。具體的算法模型如圖1所示。
圖1 改進(jìn)矩陣填充的推薦算法模型
把不同用戶對(duì)商品的評(píng)分?jǐn)?shù)據(jù)轉(zhuǎn)化為用戶-商品矩陣,每一行為一個(gè)用戶,每一列為一個(gè)商品,矩陣的每一個(gè)取值為該行對(duì)應(yīng)用戶對(duì)該列對(duì)應(yīng)商品的評(píng)分,若無(wú)對(duì)應(yīng)評(píng)分則為空值。但是因?yàn)樯唐窋?shù)量眾多,對(duì)于每個(gè)用戶來(lái)講,他所評(píng)價(jià)過(guò)的商品只占所有商品很小的一部分,所以生成的用戶-商品矩陣是極度稀疏的。KNN算法的假設(shè)是:喜歡相似物品的用戶具有相似性,在商品推薦中即為對(duì)商品有相近評(píng)分的用戶具有相似性,有相近評(píng)分的商品越多兩位用戶的相似度越高。所以通過(guò)KNN算法計(jì)算得到的相似的用戶往往在兩者的商品評(píng)分列表中需要有足夠的交集。這就導(dǎo)致有許多相似用戶因?yàn)橄嘟徊糠诌^(guò)少甚至沒有相交部分而被忽略,但是這種情況會(huì)隨著用戶有評(píng)分的商品的數(shù)量的增加而減少。因此本文對(duì)用戶-商品矩陣進(jìn)行填充,降低用戶-商品矩陣的稀疏程度,推高商品推薦的準(zhǔn)確度。
在經(jīng)典的Slope One算法中,每一個(gè)被填充的項(xiàng)目的分值都受到所有其他項(xiàng)目的影響,然而實(shí)際上其他項(xiàng)目可以分為與被填充項(xiàng)目相似的項(xiàng)目和無(wú)關(guān)的項(xiàng)目?jī)刹糠?,如果能?zhǔn)確地將其劃分,那么一方面可以大大減少許多不必要的計(jì)算量,提高矩陣填充的速度,另一方面,由于減少了無(wú)關(guān)項(xiàng)的干擾,也可以使預(yù)測(cè)評(píng)分的準(zhǔn)確度得到提高。因此,在采用Slope One算法進(jìn)行矩陣填充之前,要先計(jì)算出不同項(xiàng)目之間的相似度。
在計(jì)算電影之間的相似度時(shí),若以電影的標(biāo)簽為基準(zhǔn)則顆粒度過(guò)于粗糙,只能籠統(tǒng)地分為幾類或是十幾類。所以,為了提高電影的相似度計(jì)算結(jié)果的精度,本文采用了電影的關(guān)鍵詞數(shù)據(jù)來(lái)進(jìn)行計(jì)算。表1展示了部分?jǐn)?shù)據(jù)的關(guān)鍵詞,可以看出,電影的關(guān)鍵詞對(duì)電影的主題以及包含的元素都有較為細(xì)致的體現(xiàn),因此通過(guò)對(duì)關(guān)鍵詞的計(jì)算可以衡量不同電影之間內(nèi)容的相似度。
表1 電影關(guān)鍵詞表
在本文使用的數(shù)據(jù)集中,每部電影有10個(gè)左右的關(guān)鍵詞,關(guān)鍵詞滿足約束條件:每個(gè)關(guān)鍵詞僅包含一個(gè)明確語(yǔ)義,不同關(guān)鍵詞語(yǔ)義之間可以有交叉,但不完全重復(fù)。以上約束可以保證,兩個(gè)關(guān)鍵詞的語(yǔ)義越相似則相關(guān)度越大。將所有的關(guān)鍵詞k組成一個(gè)集合K,每一部電影對(duì)應(yīng)的全部關(guān)鍵詞看作一個(gè)事件T,則每個(gè)事件都是項(xiàng)集的一個(gè)子集。統(tǒng)計(jì)所有的事件T中不同的ki和kj共同出現(xiàn)的頻數(shù),計(jì)算ki和kj的相關(guān)度cori,j,表示為:
(1)
兩部電影之間的相似度f(wàn)rei,j,即為這兩部電影的關(guān)鍵詞列表中相關(guān)度最高的前m項(xiàng)的平均值,計(jì)算式如下:
(2)
用戶在選擇商品時(shí),往往會(huì)對(duì)某一類或某幾類的商品情有獨(dú)鐘,在選擇電影時(shí)也是如此,即當(dāng)用戶在選擇看電影時(shí)有對(duì)電影種類的傾向性。同時(shí),當(dāng)用戶給某部電影一個(gè)很低的評(píng)分時(shí),事實(shí)上對(duì)于這位用戶而言,他已經(jīng)給這部電影投過(guò)贊成票,也就是說(shuō)在沒有觀看之前,他對(duì)這部電影是感興趣的。據(jù)此可以推斷出用戶對(duì)這類型電影的標(biāo)簽是感興趣的,但是由于這部電影本身的質(zhì)量不佳或與該用戶的預(yù)期不符導(dǎo)致最終該用戶對(duì)這部電影的評(píng)分不高。因此,雖然用戶對(duì)電影的評(píng)分很直觀地反映出了該用戶對(duì)這部電影的最終評(píng)價(jià),但仍可以通過(guò)對(duì)其行為規(guī)律的挖掘,找到隱藏在評(píng)分背后的用戶興趣傾向。用戶對(duì)電影類型的選擇傾向度計(jì)算式如下:
(3)
式中:I為電影的類型集合;NA,i為用戶A觀看過(guò)的i類電影數(shù);treA,i為用戶A對(duì)i類電影的選擇傾向度。計(jì)算出每位用戶對(duì)不同類型的電影的選擇傾向度之后,得到了一個(gè)用戶—電影類型矩陣,矩陣中的每個(gè)值為對(duì)應(yīng)用戶對(duì)相應(yīng)電影的選擇傾向度。矩陣的結(jié)構(gòu)如表2所示。
表2 用戶選擇傾向度
表2中的每一行代表不同用戶,每一列代表不同的電影類型,共有二十種,分別為:Action,Adventure,Animation,Comedy,Crime,Documentary,Drama,F(xiàn)amily,F(xiàn)antasy,F(xiàn)oreign,History,Horror,Music,Mystery,Romance,Science Fiction,TV Movie,Thriller,War,Western。基于這個(gè)矩陣,就可以根據(jù)用戶對(duì)不同類型電影的選擇傾向度采用k-means聚類算法將用戶聚類。
k-means聚類算法是基于劃分的聚類算法,使用最為廣泛,有著簡(jiǎn)單準(zhǔn)確的優(yōu)點(diǎn),在各領(lǐng)域備受歡迎。其基本思想是,通過(guò)度量不同點(diǎn)之間的距離,迭代地調(diào)整聚類中心的位置,直到中心點(diǎn)的位置變化差值小于某一閾值。經(jīng)典的k-means算法的缺點(diǎn)是選取聚類個(gè)數(shù)和聚類中心具有盲目性,使得聚類結(jié)果容易收斂到局部最優(yōu)解并且收斂速度緩慢。考慮到在協(xié)同過(guò)濾算法計(jì)算用戶相似度時(shí),兩名用戶都有評(píng)價(jià)的項(xiàng)目越多,計(jì)算結(jié)果就會(huì)越準(zhǔn)確。因此,結(jié)合用戶相似度計(jì)算的特殊性在采用k-means算法選擇初始的聚類中心時(shí),首先篩選出評(píng)分?jǐn)?shù)據(jù)中評(píng)分?jǐn)?shù)量最多的極小部分用戶,計(jì)算他們的相似度,然后采用兩兩之間相似度差值最大的k位用戶作為初始的聚類中心。在選擇聚類個(gè)數(shù)的時(shí)候,可以通過(guò)多次實(shí)驗(yàn)對(duì)比結(jié)果的辦法,找到效果最佳的聚類個(gè)數(shù)。
Slope One算法最早由Daniel Lemire教授于2005年提出,該算法假設(shè)兩個(gè)項(xiàng)目的評(píng)分之間存在線性關(guān)系,只要計(jì)算出兩項(xiàng)目的評(píng)分的平均偏差以及兩位用戶的評(píng)價(jià)尺度偏差,就可以計(jì)算出對(duì)某項(xiàng)目的預(yù)測(cè)值。用戶對(duì)項(xiàng)目的評(píng)分用矩陣Rm×n表示,Ru,i為用戶u對(duì)項(xiàng)目i的評(píng)分,Iu為用戶u的所有評(píng)分項(xiàng)目,Ui為對(duì)項(xiàng)目i有評(píng)分的所有用戶的集合,Ui,j=Ui∩Uj為對(duì)項(xiàng)目i和項(xiàng)目j都有評(píng)分的用戶的交集,Ni,j為集合中元素的個(gè)數(shù),則項(xiàng)目i和項(xiàng)目j之間的評(píng)分偏差Devi,j以及目標(biāo)用戶x對(duì)項(xiàng)目i的預(yù)測(cè)評(píng)分prex,i的計(jì)算公式為:
(4)
(5)
經(jīng)典的Slope One算法簡(jiǎn)單高效并且易于擴(kuò)展,但是沒有考慮到用戶的興趣偏好和項(xiàng)目的內(nèi)容之間存在的相似性,隨著數(shù)據(jù)規(guī)模的不斷增大,會(huì)導(dǎo)致內(nèi)存占用大、運(yùn)算效率低并且預(yù)測(cè)結(jié)果的準(zhǔn)確度也會(huì)變低。因此,利用前面得到的基于選擇傾向度的用戶聚類結(jié)果和電影的相似度計(jì)算結(jié)果,在對(duì)用戶-電影評(píng)分矩陣進(jìn)行填充時(shí),只使用同類型用戶中與待填充項(xiàng)相似的電影評(píng)分進(jìn)行計(jì)算,可以大大減少預(yù)測(cè)某一評(píng)分時(shí)所需的其他評(píng)分?jǐn)?shù)據(jù)量,提高系統(tǒng)的運(yùn)行速度。另外,只采用同類用戶和相似項(xiàng)目的評(píng)分進(jìn)行預(yù)測(cè),可以使預(yù)測(cè)更加準(zhǔn)確更有說(shuō)服力,同時(shí)提高整個(gè)推薦系統(tǒng)的個(gè)性化程度。
協(xié)同過(guò)濾是推薦系統(tǒng)中被最廣泛采用的推薦方法,它大致可以分為三類:基于用戶的協(xié)同過(guò)濾、基于項(xiàng)目的協(xié)同過(guò)濾和基于模型的協(xié)同過(guò)濾。本文采用基于用戶的協(xié)同過(guò)濾算法,它基于與某用戶相似的用戶喜歡的物品該用戶也會(huì)喜歡的基本假設(shè),通過(guò)對(duì)用戶的歷史數(shù)據(jù)進(jìn)行分析,找到與該用戶最相似的用戶群,然后根據(jù)該用戶群里的其他用戶對(duì)項(xiàng)目的評(píng)分情況,找到該用戶可能感興趣的項(xiàng)目。
基于用戶的協(xié)同過(guò)濾首先要計(jì)算用戶之間的相似度,主流的相似度方法有歐式距離、皮爾遜系數(shù)、余弦相似度以及它們的變種。在電影推薦系統(tǒng)中,皮爾遜系數(shù)往往比其他計(jì)算方法更為有效,因?yàn)槠栠d系數(shù)在計(jì)算相似度時(shí)充分考慮了不同用戶的評(píng)價(jià)準(zhǔn)則不同對(duì)相似度計(jì)算結(jié)果的影響。在經(jīng)過(guò)多次對(duì)比實(shí)驗(yàn),在其他條件都相同時(shí),基于皮爾遜系數(shù)的相似度有較小的MAE值,且較為穩(wěn)定。在計(jì)算某兩名用戶的相似度時(shí),只需要把他們共同評(píng)價(jià)過(guò)的n部電影取出來(lái),用對(duì)應(yīng)的評(píng)分值作為這n維向量每個(gè)維度的值,即可根據(jù)公式計(jì)算兩向量的皮爾遜相關(guān)系數(shù)得到兩位用戶的相似度。
(6)
由于對(duì)于每個(gè)用戶來(lái)說(shuō),有評(píng)價(jià)的電影只占很小的一部分,將所有用戶的評(píng)分轉(zhuǎn)化為用戶-評(píng)分矩陣是極其稀疏的。同時(shí),利用皮爾遜系數(shù)計(jì)算出的相似用戶的必要條件是兩位用戶都有評(píng)分的電影有足夠大的交集,若都打過(guò)分的電影數(shù)量不足時(shí),計(jì)算出的相似度就會(huì)不準(zhǔn)確。因此,本文采用矩陣填充的方法,將用戶對(duì)電影的預(yù)測(cè)評(píng)分插入評(píng)分矩陣中,拓展用戶向量的維度,彌補(bǔ)交集數(shù)量不足的影響。但是預(yù)測(cè)評(píng)分往往和真實(shí)評(píng)分之間存在誤差,而用兩個(gè)有誤差的數(shù)據(jù)進(jìn)行計(jì)算顯然會(huì)造成誤差的累積。因此,首先找到兩位用戶有真實(shí)評(píng)分的電影集合的并集,然后對(duì)并集中沒有某一用戶評(píng)分的電影采用對(duì)應(yīng)的預(yù)測(cè)值進(jìn)行補(bǔ)全,最后用補(bǔ)全后的集合計(jì)算兩位用戶的相似度。
(7)
根據(jù)電影的標(biāo)簽,將A對(duì)電影的評(píng)分轉(zhuǎn)化為對(duì)標(biāo)簽的評(píng)分,得到A的偏好列表。然后根據(jù)電影m的標(biāo)簽,修正用戶A對(duì)電影m的評(píng)分預(yù)測(cè)值:
(8)
式中:rA,g為用戶A對(duì)電影m對(duì)應(yīng)的標(biāo)簽g的偏好值,α為修正系數(shù),修正系數(shù)的取值為使得真實(shí)評(píng)分值與類型標(biāo)簽加權(quán)后的評(píng)分預(yù)測(cè)值間的平均誤差ε取得最小值時(shí)的權(quán)重系數(shù)。具體的計(jì)算公式如下:
(9)
式中:Num為該用戶的評(píng)價(jià)電影數(shù)。
改進(jìn)后的協(xié)同過(guò)濾算法步驟如下:
輸入:用戶A,評(píng)分矩陣Rm×n。
輸出:針對(duì)用戶u的Top-N推薦列表。
Step3根據(jù)最近鄰居集UA里用戶的評(píng)分,利用式(7)計(jì)算出用戶A對(duì)待預(yù)測(cè)項(xiàng)目的預(yù)測(cè)評(píng)分。
Step4利用式(8)對(duì)用戶A的預(yù)測(cè)評(píng)分進(jìn)行修正,將修正評(píng)分后的項(xiàng)目降序排列,把前N個(gè)項(xiàng)目推薦給用戶A。
本文的實(shí)驗(yàn)數(shù)據(jù)來(lái)源于Kaggle網(wǎng)站上的The Movies Dataset,在該數(shù)據(jù)集中包括270 000位用戶對(duì)超過(guò)45 000部電影的約2 600萬(wàn)條評(píng)分?jǐn)?shù)據(jù),根據(jù)式(10)計(jì)算出數(shù)據(jù)的稀疏度為1-26 000 000/(270 000×45 000)=0.997 8。
(10)
式中:spares為矩陣的稀疏度;Nr表示總評(píng)分?jǐn)?shù);Nu表示數(shù)據(jù)包括的總用戶數(shù);Ni表示數(shù)據(jù)包括的總項(xiàng)目數(shù)。
該數(shù)據(jù)集包括了5個(gè)數(shù)據(jù)文件:存儲(chǔ)包括海報(bào)、背景、發(fā)布日期等元數(shù)據(jù)信息的文件movies_metadata.csv,存儲(chǔ)電影情節(jié)關(guān)鍵詞信息的文件keywords.csv,存儲(chǔ)演員和制作人員信息的文件credits.csv,存儲(chǔ)所有評(píng)分?jǐn)?shù)據(jù)的文件ratings.csv,以及該數(shù)據(jù)集中所有電影對(duì)應(yīng)的TMDB id和IMDB id文件links.csv。在實(shí)驗(yàn)中采用五折交叉法進(jìn)行驗(yàn)證以避免偶然性,將數(shù)據(jù)集中每位用戶的評(píng)分?jǐn)?shù)據(jù)隨機(jī)分為大致均勻的5份,每次實(shí)驗(yàn)取其中4份為訓(xùn)練集,剩余的1份為測(cè)試集,經(jīng)過(guò)獨(dú)立的5次實(shí)驗(yàn)后,取結(jié)果的平均值作為最后的實(shí)驗(yàn)結(jié)果。
對(duì)聚類的效果進(jìn)行評(píng)判的標(biāo)準(zhǔn)一般為各個(gè)樣本之間的距離或相似度,對(duì)于聚類生成的不同簇來(lái)說(shuō),將簇內(nèi)的距離或相似度稱為凝聚度,將簇間的距離或相似度稱為分離度。通常簇內(nèi)距離越小或者相似度越高則凝聚度越大,反之則越??;簇間距離越大或者相似度越低則分離度越大,反之則越小。然而凝聚度和分離度兩者并不獨(dú)立,其和等于每個(gè)樣本到總均值距離的平方和,因此不應(yīng)該單獨(dú)地使用凝聚度或分離度作為聚類效果的評(píng)價(jià)標(biāo)準(zhǔn),在本文中采取結(jié)合了凝聚度和分離度的輪廓系數(shù)作為聚類效果的度量標(biāo)準(zhǔn)。
輪廓系數(shù)的計(jì)算可以分為以下兩步:
第一步計(jì)算樣本個(gè)體的輪廓系數(shù),假設(shè)樣本di被劃分到簇A中,ai為該樣本到它所屬的簇中其他所有樣本的平均距離(體現(xiàn)凝聚度),bi為該樣本與不包含它的任意簇中其他所有樣本的平均距離(體現(xiàn)分離度),則該樣本的輪廓系數(shù)silhouettei的計(jì)算公式為:
(11)
第二步計(jì)算這次聚類結(jié)果的平均輪廓系數(shù)silhouettek,n為樣本的總數(shù),k為聚類的個(gè)數(shù),則silhouettek的計(jì)算公式為:
(12)
樣本的輪廓系數(shù)可以衡量該樣本劃分的匹配程度,其取值silhouettei∈[-1,1],值越接近1表示該樣本與它所屬的簇內(nèi)的其他樣本越相似,越接近0表示該樣本越靠近簇的邊緣,越接近-1則表示該樣本更應(yīng)該被分到其他的簇中。平均輪廓系數(shù)silhouettek可以用于評(píng)估本次聚類的效果,通過(guò)比較所有可能的分類個(gè)數(shù),取其中silhouettek最大的分類數(shù)k為最終的聚類個(gè)數(shù)。
本文對(duì)用戶可能的聚類個(gè)數(shù)進(jìn)行實(shí)驗(yàn),得到選擇不同聚類個(gè)數(shù)k時(shí)的輪廓系數(shù)走勢(shì),如圖2所示。可以看出,聚類結(jié)果的輪廓系數(shù)隨著聚類的個(gè)數(shù)增多有下降的趨勢(shì),在等于2時(shí)取得最大值,但只是簡(jiǎn)單地將用戶分為兩類并不能將用戶的興趣偏好多元化地呈現(xiàn)出來(lái),因此考慮第二個(gè)波峰,即聚類個(gè)數(shù)等于5或6的情況。由于后續(xù)的步驟中會(huì)在不同興趣偏好的用戶群組的內(nèi)部進(jìn)行計(jì)算,又希望不同群組中包含的用戶數(shù)量盡可能均勻,因此參考不同聚類個(gè)數(shù)下的方差,經(jīng)計(jì)算在聚類個(gè)數(shù)為6時(shí)簇內(nèi)方差的平均值比聚類個(gè)數(shù)為5時(shí)小。綜合以上兩點(diǎn)考慮,本文選取的聚類個(gè)數(shù)k為6。
圖2 不同聚類個(gè)數(shù)時(shí)的輪廓系數(shù)
Slope One算法的實(shí)質(zhì)是預(yù)測(cè)用戶對(duì)某一個(gè)項(xiàng)目的評(píng)分,它依賴于用戶與用戶評(píng)分尺度的差值以及項(xiàng)目與項(xiàng)目之間平均評(píng)分的差值,有著準(zhǔn)確率高、易于實(shí)現(xiàn)的優(yōu)點(diǎn)。但傳統(tǒng)的Slope One算法存在盲目性,它并不對(duì)參與預(yù)測(cè)計(jì)算的值進(jìn)行篩選,對(duì)于某兩位興趣偏好截然不同的用戶或者某兩個(gè)內(nèi)容毫不相關(guān)項(xiàng)目顯然并沒有可比性,使用所有數(shù)據(jù)進(jìn)行計(jì)算一方面會(huì)使計(jì)算量比較大,另一方面數(shù)據(jù)來(lái)源并不精準(zhǔn)會(huì)導(dǎo)致預(yù)測(cè)結(jié)果的個(gè)性化程度降低。
傳統(tǒng)的Slope One算法可以根據(jù)用戶-項(xiàng)目評(píng)分矩陣對(duì)矩陣中絕大部分的空缺值計(jì)算出預(yù)測(cè)值,但是本文在這一步中的目標(biāo)并不是計(jì)算出所有空缺值的預(yù)測(cè)評(píng)分,而是希望降低用戶-項(xiàng)目評(píng)分矩陣的稀疏程度。因此利用用戶以及項(xiàng)目之間的相似度對(duì)Slope One產(chǎn)生的預(yù)測(cè)值數(shù)量進(jìn)行限制,在預(yù)測(cè)精度與預(yù)測(cè)數(shù)量之間進(jìn)行取舍,將高準(zhǔn)確度的預(yù)測(cè)值填充進(jìn)用戶項(xiàng)目矩陣。
根據(jù)式(5),對(duì)于某一待預(yù)測(cè)的項(xiàng)目添加限制條件:待預(yù)測(cè)項(xiàng)目和與它相似項(xiàng)目的共同評(píng)分用戶數(shù)量需大于閾值Nu。通過(guò)對(duì)閾值Nu進(jìn)行調(diào)整即可控制預(yù)測(cè)評(píng)分的數(shù)量,根據(jù)不同的閾值計(jì)算出填充后的矩陣稀疏度如圖3所示??梢钥闯?,當(dāng)閾值取8時(shí)矩陣的稀疏度為0.952 3,最接近理論值,因此本文選擇將Nu=8時(shí)計(jì)算出的預(yù)測(cè)值填入用戶-評(píng)分矩陣。原始數(shù)據(jù)對(duì)應(yīng)的用戶-評(píng)分矩陣的稀疏度為0.997 8,填充后對(duì)比原始矩陣的稀疏程度降低了(1-0.952 3)/(1-0.997 8)=21.68倍,有效地降低了評(píng)分矩陣的稀疏度。
圖3 閾值與矩陣稀疏度的關(guān)系
個(gè)性化推薦算法性能的指標(biāo)非常豐富,不同的指標(biāo)側(cè)重于推薦結(jié)果的不同方面,主要有覆蓋率、多樣性、新穎性和驚喜度等。而對(duì)于離線實(shí)驗(yàn)往往采用評(píng)分預(yù)測(cè)準(zhǔn)確度來(lái)進(jìn)行衡量,常用的指標(biāo)主要有平均絕對(duì)誤差和均方根誤差。
平均絕對(duì)誤差MAE和均方根誤差RMSE都是根據(jù)用戶的實(shí)際評(píng)分值和預(yù)測(cè)評(píng)分值來(lái)進(jìn)行誤差度量的,MAE或RMSE的值越小則評(píng)分的預(yù)測(cè)值越準(zhǔn)確。假設(shè)P為用戶的預(yù)測(cè)評(píng)分集合,R為用戶的實(shí)際評(píng)分集合,pi和ri為某用戶對(duì)某一電影對(duì)應(yīng)的一組評(píng)分預(yù)測(cè)值和真實(shí)值,pi∈P且ri∈R,N為數(shù)據(jù)集中的評(píng)分總數(shù),MAE和RMSE的計(jì)算公式如下:
(13)
(14)
本文選擇平均絕對(duì)誤差MAE和均方根誤差RMSE作為評(píng)分預(yù)測(cè)準(zhǔn)確度的度量指標(biāo),從現(xiàn)有方法中挑選了最具代表性的SVD++[12]、NNMF[13]、FML[14]3種方法作為基線,與本文提出的方法分別在MovieLens 100k數(shù)據(jù)集[11]和The Movies Dataset上進(jìn)行對(duì)比實(shí)驗(yàn)。
1)SVD++:在考慮用戶和商品偏差項(xiàng)的矩陣分解模型的基礎(chǔ)上引入了隱反饋。
2)NNMF:使用多層感知機(jī)來(lái)對(duì)用戶和商品間的關(guān)系建模,實(shí)驗(yàn)中使用了4個(gè)隱藏層。
3)FML:引入了度量學(xué)習(xí)對(duì)用戶和商品間的關(guān)系建模。
MovieLens 100k數(shù)據(jù)集是電影推薦領(lǐng)域最常用的數(shù)據(jù)集,它包括來(lái)自1 000個(gè)用戶對(duì)1 700部電影的100 000個(gè)評(píng)分,根據(jù)式(10)計(jì)算得出其稀疏度為0.941 2,The Movies Dataset的稀疏度為0.997 8,是前者的(1-0.941 2)/(1-0.997 8)=26.73倍。
最近鄰的個(gè)數(shù)k也是影響推薦結(jié)果的一個(gè)重要因素,實(shí)驗(yàn)一將本文算法SFCF與其他3種算法在MovieLens 100k數(shù)據(jù)集上比較,結(jié)果如圖4所示??梢钥闯觯弘S著最近鄰數(shù)目增大,各算法的MAE值都迅速下降,當(dāng)超過(guò)某個(gè)值時(shí),會(huì)趨于穩(wěn)定并有一定波動(dòng)。以SVD++算法為例,在最近鄰數(shù)目40左右時(shí)MAE取得最小值,之后會(huì)有明顯回升,其他2種算法與它類似。而本文提出的SFCF算法在最近鄰數(shù)目增大時(shí)較為穩(wěn)定,起伏不大,說(shuō)明填充后的矩陣中每位用戶的相似用戶數(shù)目較多,不會(huì)因?yàn)橄嗨朴脩魯?shù)目過(guò)多而導(dǎo)致選取低相似度用戶進(jìn)行評(píng)分預(yù)測(cè)計(jì)算,有效地保持了預(yù)測(cè)評(píng)分的精度,這一特性也符合為解決數(shù)據(jù)稀疏性而對(duì)評(píng)分矩陣進(jìn)行填充的效果預(yù)期。
圖4 4種算法隨最近鄰數(shù)目變化對(duì)比
實(shí)驗(yàn)二將本文算法SFCF與其他3種算法分別在MovieLens 100k數(shù)據(jù)集和The Movies Dataset上進(jìn)行對(duì)比實(shí)驗(yàn),結(jié)果如圖5和圖6所示。
圖5 4種算法在MovieLens 100k的MAE和RMSE對(duì)比
圖6 4種算法在The Movies Dataset的MAE和RMSE對(duì)比
通過(guò)對(duì)比可以看出在數(shù)據(jù)相對(duì)稠密的數(shù)據(jù)集MovieLens 100k上,本文算法的MAE和RMSE均比NNMF算法和SVD++低,與FML算法基本相同。但在數(shù)據(jù)更為稀疏的The Movies Dataset上,本文算法的MAE和RMSE均低于其他3種算法。同時(shí),當(dāng)數(shù)據(jù)的稀疏性增大時(shí),其他3種算法的準(zhǔn)確度都有大幅度下降,而本文算法仍能保持較高的準(zhǔn)確度,證實(shí)了本文算法通過(guò)深入分析用戶和電影的各維度屬性數(shù)據(jù),將挖掘出的不同用戶的興趣差異與協(xié)同過(guò)濾算法結(jié)合,有效地緩解了數(shù)據(jù)稀疏性問(wèn)題對(duì)協(xié)同過(guò)濾算法的影響。
本文針對(duì)經(jīng)典的協(xié)同過(guò)濾算法由于數(shù)據(jù)的稀疏性導(dǎo)致的推薦結(jié)果質(zhì)量下降的問(wèn)題[15-17],提出一種基于用戶興趣差異改進(jìn)矩陣填充的個(gè)性化推薦算法。首先利用優(yōu)化項(xiàng)目選取的Slope One算法對(duì)用戶-評(píng)分矩陣進(jìn)行填充,然后使用填充后的矩陣形成Top-N推薦列表,最后根據(jù)用戶的興趣偏好對(duì)推薦列表再次過(guò)濾,得到最終的推薦結(jié)果。實(shí)驗(yàn)通過(guò)與其他協(xié)同過(guò)濾算法的比較,驗(yàn)證了本文算法可以緩解數(shù)據(jù)稀疏性的問(wèn)題,在數(shù)據(jù)規(guī)模及其稀疏性不斷增大的情況下,能有效地提高系統(tǒng)的推薦質(zhì)量。本文提出的推薦算法在計(jì)算用戶和項(xiàng)目的相似度時(shí)還有提升空間,在下一步的研究中,將考慮更多的用戶的年齡、職業(yè)、地域,以及電影的導(dǎo)演信息、演員構(gòu)成等更多維度的數(shù)據(jù),以提高用戶以及項(xiàng)目的相似性度量結(jié)果,從而提高最終的推薦質(zhì)量。