鐘耀億,丁曉劍,楊 帆
(南京財經大學 信息工程學院,南京 210046)
互聯網的迅速發展使得網絡上每天都產生數量驚人的信息,其在為用戶提供豐富的信息化服務的同時,也讓用戶越發難以搜索到滿足其個人偏好的有效信息,進而讓用戶迷失在信息的海洋中,這就是互聯網時代的“信息過載”問題,推薦系統技術的出現在一定程度上緩解了互聯網數據爆炸式增長帶給人們的信息過載問題[1-3],如今,推薦系統擁有廣泛的實際應用場景,如商品推薦,影視推薦,新聞推薦,社交推薦等.
基于項目的協同過濾算法因簡單易行,目前是推薦系統廣泛使用的一種技術,其基于“物以類聚”的核心思想,根據用戶對項目的評價信息來計算項目相似性,再利用相似性信息進行后續的推薦步驟,但是其在實際應用中表現出了一些缺陷,首先是該算法非常依賴用戶評分矩陣的質量,只有高密度的評分矩陣才能保證項目相似度計算的準確度,然而用戶評分矩陣往往是稀疏的,因此計算出的項目相似度就會不準確[4,5],同時,基于項目的協同過濾算法也并未深入考慮用戶的主觀偏好情況,其往往會向單個用戶推薦大眾喜好的流行項目[6,7],因此推薦的個性化程度不高,不能很好地滿足用戶需求.
本文針對基于項目的協同過濾算法相似度計算不準確和推薦缺乏個性化這兩個問題進一步地做了改進工作,考慮到傳統基于項目的協同過濾算法只利用用戶評分數據計算相似度,比較單一,因此在原有基于評分的項目相似度計算方法基礎上,額外增加了兩個維度的項目相似度計算,可以更全面地評估項目間的相似度,此外考慮到用戶主觀偏好挖掘對推薦算法的重要性,本文使用支持向量機構建用戶標簽偏好預測模型,并用于評分預測公式的修正,可以提供更準確的評分預測.
以下是基于項目的協同過濾算法的主要流程[8]:
1)評分矩陣構建
基于項目的協同過濾推薦需要利用用戶對項目的評價數據.用戶評價數據可以表示為一個評分矩陣RM×N,其中M表示用戶的數量,N表示項目的數量,Ri,j表示用戶i對項目j的數值化評分.
2)項目相似性計算
項目相似性主要根據評分矩陣來計算,常用的相似性計算方法有皮爾遜相關系數,余弦相似度,Jaccard相似度,這3 種計算方式分別如式(1)~式(3)所示:
其中,Ru,i和Ru,j分別表示用戶u對項目i和項目j的評分,Ui,j表示對項目i和項目j都評分過的用戶集合,和分別表示項目i和項目j的平均評分,Ri和Rj分別表示項目i和項目j的用戶評分向量,和分別表示項目i和項目j評分向量的模,Ui和Uj分別表示對項目i和項目j有過評價的用戶集合.根據項目間的相似度值,就可以得到項目相似性矩陣SN×N,Si,j表示項目i和項目j的相似度.
3)項目鄰居選擇
給定項目i,它的鄰居是指與其相似性最高的k的項目,可以從項目相似性矩陣中得到,k是可選的值,一般根據實際情況調整.
4)項目評分預測
對用戶未評分的項目,根據式(4)來預測評分:

式(4)中,Ni表示項目i的鄰居,Iu表示用戶u已評價的項目集合,Si,j表示項目i和項目j的相似性,Ru,j表示用戶u對項目j的評分,和為項目i和項目j的平均評分.
支持向量機作為一種新興的機器學習算法,以其自身在二類分類學習問題上表現出較好的泛化和推廣性能,近年來得到了人工智能和機器學習領域研究者的廣泛關注.基于統計學習理論,支持向量機的主要目標是借助于核方法來最小化結構風險,并最終得到支持向量[9].
支持向量機算法的基本理念是,假設給定一個特征空間上的訓練樣本數據集{ (x1,y1),(x2,y2),···,(xn,yn)},其中,xi∈Rn,yi∈{+1,-1},i=1,2,···,n.xi為第i個樣本數據的特征向量,yi為xi對應的類標記,當yi=+1時,稱xi為正例;而當yi=-1時,稱xi為負例,支持向量機的目標是在特征空間中找到一個最優的分離超平面,其能夠盡可能正確地將正負實例分到其各自所對應的類中去,不僅如此,支持向量機算法還確保兩種實例間分類間隔距離的最大化,以此來降低結構化風險,獲得較優的分類效果.
在本文的研究中,支持向量機將被用于學習并預測用戶對給定項目標簽的偏好,而給定一個項目標簽實例,其到分離超平面的距離將被認為是用戶對該項目標簽的偏好程度.
傳統基于項目的協同過濾算法依賴用戶的評分來計算項目之間的相似度,受到用戶評分矩陣稀疏的影響,相似度計算的結果往往不夠準確,因此推薦效果有很大的局限性.在推薦系統平臺中,除了有用戶的評分數據可用,有時項目本身也有一些描述性的屬性信息,例如標簽信息,那么就可以合理地利用這些信息來進一步地挖掘項目之間的聯系以及用戶對項目的主觀偏好.
標簽可以用于概括性地描述項目的內在特征,比較常見的根據標簽信息表征項目的方法是采用獨熱編碼(one-hot encoding)來構造項目的標簽向量[10],其將所有的項目標簽考慮進來,如果一個項目有一個給定的標簽,則該項目標簽向量中相對應的值將為1,否則為0,之后可以基于余弦相似度公式,使用標簽向量計算項目之間的相似度,該方法具有簡單易行的優點,但由于忽略了標簽之間的關系,只對兩個標簽向量中相對應的標簽進行了比較,因此損失了一些有價值的信息.
在電影推薦中,一部電影通常有多個標簽,有些標簽經常同時出現在一部電影中,這說明標簽之間存在一定的關聯,假如電影1 有動作標簽,電影2 有冒險標簽,并且假設動作標簽和冒險標簽經常同時出現,如果用標簽向量的方式表征電影,并用余弦相似度計算電影1和電影2在標簽之間的相似度,那么將得到值為零的相似度,這意味著系統會認為這兩部電影在用戶看來是完全不同的,不幸的是,對于一個喜歡動作和冒險電影的用戶來說,如果用戶曾經對電影 1 打過評分,但由于電影 1和電影2的相似度為零,那么電影2 就沒有機會被推薦給那個用戶,但是如果換種方式使用項目標簽數據,具體來說,可以統計所有不同標簽的共現次數,那么就可以計算出標簽之間的相關性,這樣就可以用標簽相關性代替標簽向量來計算項目之間的標簽相似度了,在前面提到的情況中,可以利用動作標簽和冒險標簽之間的相關性來計算兩部電影的相似度,這樣得到的電影相似度就不會為零,而用戶可能得到滿意的推薦.

本文根據不同標簽的共現次數來計算標簽間的相關性,具體如式(5)所示,其中COR(Ti,Tj)代表標簽Ti和標簽Tj的相關度,k為數據集中的項目數目,mn為訓練集中的第n個 項目,I(TiandT j)和I(Ti)是指示函數,前者判斷當前項目是否同時含有標簽Ti和標簽Tj,后者判斷當前項目是否含有標簽Ti,若為真則函數值為1,否則為0.

如式(6)所示,可以計算出項目間基于標簽的相似性,其中,Ttmi和Ttmj分別表示項目mi的第tmi個標簽和項目mj的第tmj個標簽,kmi和kmj分別表示項目mi和項目mj的標簽數.式(6)通過式(5)對兩個項目中的各個標簽對計算相關度,之后再求出兩個項目中所有標簽對間相關度的均值得出兩個項目的標簽相似性.
如前文所述,基于項目的協同過濾算法僅利用用戶矩陣來進行推薦,兩個項目的相似性很大程度取決于有多少用戶共同評價過,這就使傳統的協同過濾算法偏向于給單個用戶推薦大眾流行的項目,但并未探究用戶對特定項目標簽的主觀偏好,因此給品味獨特的用戶的推薦就不夠個性化,考慮到傳統算法的這一不足,本文使用支持向量機構建一種可以預測單個用戶對項目標簽偏好的模型,以提高推薦的個性化程度和準確度.
由于要訓練預測模型,因此要根據用戶歷史評分構建數據集,設用戶ui的歷史評價項目集合為M={m1,m2,···,mK},項目集中任意一個項目mk包含標簽的集合為T={t1,t2,···,tl},l表示項目mk包含的標簽總數,用戶ui對項目mk的評分為Ri,k,首先需要確定用戶對項目的偏好程度,可以依據評分設定一個用戶偏好閾值?,若Ri,k≥?,則認為用戶ui對項目mk有正向偏好,若Ri,k<?,則認為用戶ui對項目mk有負向偏好,其次,需要將用戶對項目的偏好映射到用戶對標簽的偏好上,本文的做法是構建項目mk的標簽特征向量xk={xk1,xk2,···,xkL},將其對應的用戶偏好記為yk,L表示所有標簽的總數,xki表示項目mk屬于標簽ti的程度,具體計算如式(7)所示,項目標簽特征向量記錄項目屬于各個標簽的程度,若用戶對項目mk有正向偏好,則將用戶對該標簽特征向量的偏好yk設為1,否則將yk設為-1.

項目標簽特征向量包含了所有標簽的權值,這么做的原因和3.1 節中所述例子類似,即若僅考慮用戶已評價過的標簽,則學習到的預測模型只會在這個用戶歷史評價標簽范圍內做出有效預測,對一個不在該范圍內但和用戶歷史評價標簽高度相關的標簽就會一直預測為負向偏好,這顯然是不合理的.
對任意一個用戶ui,其標簽偏好數據集為{(x1,y1),(x2,y2),···,(xK,yK)},其中,K為用戶已評價項目的總數,這樣就可以對每個用戶訓練一個標簽偏好預測模型,預測模型的獲得需要求解如式(8)所示的優化問題[11]:

式(8)中,ω ·xi+b為需要求解的預測模型,在實際情況中,一些樣本數據往往是非線性可分的,支持向量機通常會先使用一些映射函數將樣本的特征從低維空間映射到高維空間中,然后再進行后續的優化步驟,最終的預測模型可由式(9)表示.

式(9)中,xj是支持向量,μ為支持向量的個數,αj是支持向量xj所對應的拉格朗日乘子,經映射函數映射后的點積運算k(x,xj)=φ(x)·φ(xj)被稱為核函數.
在預測階段,將項目的標簽特征向量輸入到預測模型f(x)中,若所得結果為正數,則說明用戶可能會對該項目的標簽感興趣,否則就表示用戶可能不感興趣,同時結果的大小也反映了用戶對項目標簽正偏好或負偏好的程度.
目前有些研究工作考慮了項目各種屬性間的相似度,并將其與評分相似度相結合,在一定程度上進一步提高項目相似度計算的準確度[12,13],然而項目屬性信息只能從項目的角度單方面地描述項目的特征,在電影推薦中,常識思維認為動畫標簽的電影是面向低齡用戶的,但是對為有些動畫標簽電影打過較高評分的用戶群體的特征進行分析,就會發現這些用戶不一定是低齡用戶,那么這些動畫電影也不一定是面向低齡用戶的,其就不應被和面向低齡用戶動畫電影等同看待,更進一步說,雖然兩個項目具有相同的屬性信息,但用戶對它們的偏好也有可能是不同的,具有相同屬性信息的項目可能會受到不同用戶群體的偏好,而具有不同屬性信息的項目也可能會受到同一用戶群體的偏好,由此可以看出,分析項目的受眾特征信息可以比直接分析項目自身屬性信息能更準確地判斷項目會受哪類用戶偏好,所以,不能僅僅根據項目的屬性信息來評估兩個項目之間的相似性,因為這可能會導致有偏的推薦,此外還應該考慮項目的受眾類型是否相似.
有研究工作利用了用戶特征來提高用戶之間相似度計算的精確度[14,15],但是很少有研究試圖利用用戶特征來提高項目之間相似度計算的精確度,本文提出利用受眾特征來構造項目的擴充屬性,進而可以從項目受眾類型的角度來豐富項目的屬性,是對僅利用項目自身屬性計算項目相似度的有效補充,最終可以更全面地比較項目之間的相似度.
在給出項目擴充屬性的計算方式之前,將列舉一個關于電影推薦的啟發性例子.
假設有表1所示用戶電影評分(0 分表示沒有評分)和表2所示用戶特征信息,若表1中所列都不是熱門電影,那么本文推測一部電影的受眾在某些方面是相似的,也就是說如果用戶有共同的品味,那么在其他方面應該也有一定的相似性.在這個例子中,從直觀上來看,對電影1、2和5 這3 部電影有正面評價的用戶有兩個方面比較相似,其一是用戶的年齡,其二是用戶的職業;再如電影3和電影4,通過用戶評分和用戶特征信息可以看出電影3 更受女性用戶偏好,電影4 更受男性用戶偏好.

表1 用戶電影評分

表2 用戶特征信息
通過對數據集中每個項目的用戶特征信息進行統計分析,就可以得出每個項目的受眾特征,然后利用這些受眾特征構造項目的擴充屬性來表示該項目的受眾類型,便可以進一步從受眾類型的角度進行項目相似度計算.
定義用戶的特征集合為{f1,f2,···,fk},用戶u的特征可以表示為{uf1,uf2,···,ufk},若該用戶具備特征fi,則u fi的值為1,否則為0,定義項目mi的擴充屬性集合為Ami={Attr1,Attr2,···,Attrk},項目mi關于用戶特征fi的擴充屬性值,即Attri的大小,可通過式(10)來計算,式(11)對式(10)的計算結果進行了歸一化處理:

式(10) 中,Rated表示對項目有過評價的用戶集合,I(ufi==1)是一個指示函數,若用戶u具備特征fi,則函數值為1,否則為0,Ru為用戶u對該項目的評分.項目的各個擴充屬性值表現為對項目有過評分的用戶的特征加權評分(權值即前文所提指示函數的值)與項目歷史評分總和的比值,若一個用戶對一個項目有較高的評分,則該用戶的特征信息對該項目的擴充屬性值就會有較高的貢獻,最終,項目的擴充屬性會記錄對項目有較高評分的用戶群體的特征信息.
項目的擴充屬性標識項目的受眾類型信息,因此,如果不同項目的受眾類型是相似的,那么這些項目也可以被認為是相似的,可用于推薦,因為它們受到了具有相似特征用戶群體的偏好.
通過項目擴充屬性計算項目相似性的方法如式(12):

式(12)中,Ami,k和Amj,k分別表示項目mi和項目mj的第k個擴充屬性值的大小,當兩個項目的各個擴充屬性值基本相同時,根據式(12)計算出的項目相似值就會接近1,也就表明兩個項目具有相似的受眾群體,當兩個項目的各個擴充屬性值基本不同時,根據式(12)計算出的項目相似值就會接近0,表明兩個項目具有不相似的受眾群體.
在基于評分的項目相似度計算基礎上,本文結合第3 節和第4 節描述的標簽相似度和擴充屬性相似度提出綜合相似度.綜合相似度考慮項目在3 個維度上的相似性,采用相乘的方式得出,如式(13)所示:

對用戶u未評價過的項目mi,并找出k個與項目mi最相似的項目,再根據式(14)計算用戶u對項目mi的預測評分,式(14)對相似項目集合中的項目計算出經過相似度加權的評分均值,加上待預測項目的歷史評分均值,最終得到預測評分,其中Ni表示項目mi的k近鄰,MU表示用戶u已 經評價過的項目集合,Ru,mk表示用戶u對項目mk的評分,和為項目mi和mk的平均分.

雖然式(14)使用了項目綜合相似度來預測用戶評分,會一定程度提高預測準確度,但未能直接表達出用戶對項目的主觀偏好,因此結合3.4 節所述用戶標簽偏好預測模型,提出一種用戶標簽偏好修正因子,如式(15)所示,能根據用戶主觀偏好情況,調整預測評分計算.

式(15)中,fu(x)為用戶u的標簽偏好預測模型,xi為待預測項目mi的標簽特征向量,fu(xi)為用戶u對項目mi的標簽偏好度,若其值為正且越大,則說明用戶對項目標簽正向偏好程度越大,β值會趨于1,否則 β值趨于0.將式(15)引入到式(14)中即得用戶偏好修正的預測評分計算法,如式(16)所示.

式(16)中,最后一個分項即為協同過濾算法評分預測公式中根據待預測項目與用戶歷史偏好項目的相似性計算出的預測偏差,修正因子可以調節預測偏差對最終預測評分計算的作用,若用戶偏好該項目的標簽,則最終預測評分就會受到預測偏差的影響,否則就會削弱預測偏差帶來的影響,即使待預測項目與用戶歷史偏好項目的相似度很高,但若偏好預測模型預測出用戶的偏好度很低,則預測評分也不會很高.
輸入:用戶對項目的評分矩陣RM×N,用戶的特征矩陣FM×K,項目類別矩陣GN×L,近鄰數k,待預測項目m,待推薦用戶u.
輸出:用戶u對項目m的預測評分.
步驟1.根據項目類別信息,根據式(5)計算出項目標簽的關聯度.
步驟2.根據式(6)計算出數據集中項目間的標簽相似度.
步驟3.根據項目標簽信息和評分信息構建用戶標簽偏好數據集,使用支持向量機對數據集中每個用戶訓練標簽偏好預測模型.
步驟4.根據用戶特征,對數據集中每個項目按式(10)和式(11)計算出項目的擴充屬性.
步驟5.根據式(12)計算出數據集中項目間的擴充屬性相似性.
步驟6.根據式(13)計算出項目間的綜合相似度.
步驟7.對于待預測項目m,根據步驟6 得出的項目綜合相似度找出與項目m最相似的k個項目作為鄰居,并在鄰居中去除掉用戶已經評價過的項目,通過式(16)計算出用戶u對項目m的預測評分.
本文采用在推薦系統研究領域中具有較大知名度的MovieLens-100 k 數據集進行實驗分析[16],該數據集包含了由明尼蘇達大學GroupLens 研究組從MovieLens電影評分網站上收集的943 個用戶對1652 部電影的100 000 條評分數據、943 條用戶個人信息以及1652條電影信息.本文使用用戶個人信息中的性別、年齡和職業信息來構造項目的擴充屬性,并利用電影信息中的標簽信息來計算項目標簽的關聯度以及訓練用戶標簽偏好預測模型.數據集被隨機地分成80%的訓練數據集和20%的測試數據集.
為了評估算法預測的用戶評分與實際用戶評分之間的差異,本文采用了均方根誤差(RMSE)作為算法性能評估的指標.RMSE的計算如式(17)所示.

式中,TD為測試數據集,Ru,i為測試數據集中用戶u對項目i的實際評分,為算法預測出的測試數據集中用戶u對項目i的評分.
本文根據用戶歷史評分數據學習并預測用戶的標簽偏好,因此合理的用戶偏好閾值 ?的選擇就很關鍵,其直接影響到預測模型的工作性能,因此就幾種閾值?的選擇對算法性能的影響做了實驗驗證.由于數據集采用了1 分至5 分的評價標準,所以采用2 分、3 分和4 分作為用戶正向偏好和負向偏好的分界閾值進行實驗,實驗結果如圖1所示.
由圖1實驗結果可以看出當 ?取3 時,本文算法的評分預測性能表現得最好,故后續實驗取?為3.

圖1 閾值?對算法性能的影響
為了驗證用戶標簽偏好修正因子 β能夠有效地根據用戶偏好修正傳統評分預測公式的計算結果,故分別采用式(14)和式(16)作為評分預測公式進行了對比實驗,實驗結果如圖2所示.
由圖2實驗結果可以看出,用戶標簽偏好修正因子 β確實能在一定程度上修正預測評分的誤差,說明了用戶偏好的挖掘對推薦算法的重要性.

圖2 用戶標簽偏好修正因子β的有效性
本文假設擴充屬性的粒度對項目相似度計算有一定的影響,即用戶特征劃分地越細,則項目相似度的計算準確度就越高.為了驗證這一假設,本文根據用戶的年齡特征和職業相似性,通過適當簡化原始數據集中的用戶特征構造了一個粒度稍低的用戶特征集用于實驗,其中,使用原始數據集中用戶特征的算法記為TPIAE-1,使用本文簡化用戶特征的算法記為TP-IAE-2.擴充屬性粒度對本文算法性能影響的實驗結果如圖3所示.
由圖3實驗結果可以看出,兩種算法預測誤差率變化趨勢一致,但使用原始用戶特征的TP-IAE-1 算法的預測誤差率低于使用簡化用戶特征的TP-IAE-2 算法,很顯然,這是因為原始用戶特征具有相對更高的粒度,因此項目受眾特征更加豐富,可以為項目構造更精細的擴充屬性,項目受眾類型相似度計算也更加準確.

圖3 擴充屬性粒度對本文算法性能的影響
為了驗證本文算法對傳統基于項目的協同過濾算法做出了有效的改進,以及相較于其他相關算法的性能改善,故將本文算法TP-IAE和TP-IAE- β (在評分預測階段,TP-IAE用式(14),TP-IAE- β用式(16)進行)與基于項目的協同過濾算法(IBCF)、文獻[17]提出的基于內容和標簽權重的混合推薦算法(TW-ContentItem)、文獻[18]提出的結合項目屬性偏好的混合協同過濾算法(HCF)以及文獻[19]提出的基于用戶偏好矩陣填充的改進混合推薦算法(UPR)做了對比實驗,實驗結果如圖4所示.

圖4 對比實驗結果
從圖4中可以看出,本文所提算法和其他4 種對比算法的預測評分誤差率都隨著鄰居數目的增加而下降,4 種算法的用戶預測評分誤差率變化趨勢也基本相同,但在鄰居數的變化范圍內,本文算法的預測評分誤差率相比其他4 種算法降低了2%至13%,顯示出良好的推薦效果.與傳統基于項目協同過濾方法相比,盡管HCF 算法在預測效果上有了很大的提高,因為其不再僅依賴用戶的評分信息,但是,該方法只是從項目的角度額外地比較項目相似度,而本文算法不僅考慮了項目的標簽屬性信息,另外還考慮了項目的受眾特征,用來判斷給定的兩個項目是否會得到同一用戶群體的偏好,可以進一步地提高項目相似度計算的準確性,與UPR和TW-ContentItem 算法的對比結果也顯示出本文算法預測效果的提升,且經用戶標簽偏好修正因子β對評分預測公式進行修正后,預測評分的誤差率能夠進一步地下降.
本文針對傳統基于項目的協同過濾算法面臨相似度計算不準確和推薦缺乏個性化這兩個問題做了相關的改進工作,提出的方法結合項目的受眾特征信息和項目的標簽信息對傳統基于項目的協同過濾算法的相似度計算方式做出了有效改進,不僅可以避免項目相似度計算方法過于片面單一,而且可以在評分數據稀疏的實際場景下提高項目相似性計算的準確度,提出的方法還考慮了用戶的個性化偏好程度,以進一步提高推薦效果,實驗結果表明,本文算法相較傳統基于項目的協同過濾算法可以顯著地降低預測評分的誤差率.基于項目的協同過濾算法的核心是項目相似性計算,因此下一步的工作是研究從更多的維度來計算項目的相似性以提高推薦算法的性能.