王 運 倪 靜 馬 剛
(上海理工大學管理學院 上海 200093)
近年來,互聯(lián)網(wǎng)呈現(xiàn)出迅猛的發(fā)展趨勢,用戶接觸到的信息也變得越來越多,如何從海量數(shù)據(jù)中找到用戶感興趣的內(nèi)容變得至關(guān)重要。對于用戶來說,可以節(jié)省搜尋時間,提高效率;對于企業(yè)來說,可以提升用戶滿意度,也為企業(yè)吸引更多的用戶。因此,合適的推薦算法顯得尤為重要。針對這一目標,廣大專家學者提出了大量的相關(guān)算法,其中最廣泛使用的有基于內(nèi)容的推薦算法、協(xié)同過濾推薦算法和混合推薦算法等[1-2]?;趦?nèi)容的推薦算法可以根據(jù)用戶的已有數(shù)據(jù)找出興趣相似的物品進行推薦,但是需要用戶有足夠多的數(shù)據(jù);協(xié)同過濾推薦算法利用用戶對物品行為的相似性找出相似用戶進行推薦,最為經(jīng)典;而混合推薦算法是上述算法的融合,推薦準確性更好。
但是,需要處理的用戶數(shù)據(jù)往往面臨稀疏等缺點,針對這些問題,文獻[3]利用用戶-標簽-資源三維關(guān)系刻畫用戶偏好,并以此來找出相似用戶從而進行Top-N推薦;文獻[4]采用社交網(wǎng)絡(luò)中的信息及用戶標簽數(shù)據(jù)來計算用戶之間的相似度并作推薦,有效克服了數(shù)據(jù)稀疏的缺點;文獻[5]提出將棧式降噪自編碼器運用于基于內(nèi)容的推薦模型中,可以深層次挖掘用戶之間的潛在關(guān)系,同時與基于標簽的協(xié)同過濾算法結(jié)合在一起進行推薦。根據(jù)上述文獻中的方法可以在用戶數(shù)據(jù)稀疏時較好地求出用戶之間的相似度,然而,當一個用戶沒有數(shù)據(jù)或者數(shù)據(jù)極少時難以準確計算出用戶之間的相似度。本文采用了FunkSVD矩陣分解與相似度矩陣的推薦算法來計算用戶相似度??紤]到用戶的偏好因素,利用用戶評分數(shù)據(jù)與物品標簽數(shù)據(jù)計算用戶之間的相似度,同時,存在用戶之間評分數(shù)據(jù)過少的情況,因此,將得到的用戶相似度矩陣進行FunkSVD矩陣分解,加權(quán)矩陣分解前后的相似度值并做評分預測。經(jīng)過Movielens數(shù)據(jù)集的實驗表明,該算法的評分預測準確性得到了提升。
在眾多推薦算法中,基于用戶的協(xié)同過濾推薦算法[6]被使用次數(shù)最多,并且效果最為理想,其主要思想為相似的用戶具有相同的偏好,所以推薦的準確性更好。當兩個用戶對同一物品的評分越接近,則說明用戶之間的相似性越高[7],用戶之間共同評分的物品數(shù)越多,計算的相似度值也會更準確。其相似度計算方法如下:
(1)
(2)
在推薦系統(tǒng)中,包含許多用戶和物品的數(shù)據(jù),但是,單一用戶的評分物品數(shù)經(jīng)常是稀疏的,通過將用戶對所有物品的評分值預測出來,可以將評分值高的物品推薦給用戶,間接達到推薦的目的。對于填充用戶物品評分矩陣這一問題,可以有很多的解決辦法,其中矩陣分解較為理想[8]。矩陣分解法有傳統(tǒng)的奇異值分解、BiasSVD算法、SVD++算法和FunkSVD算法[9]。奇異值分解簡單直接,但是需要用戶物品評分矩陣中沒有缺失值,同時當數(shù)據(jù)量很大時計算十分耗時;BiasSVD在計算中考慮了其他限制條件,比如若有干擾用戶評分因素的情況存在,則只適合應用在特定的場景;SVD++在BiasSVD的基礎(chǔ)上又做了增強,增加考慮用戶的隱私反饋,算法較為復雜,在實際應用中較少出現(xiàn);而FunkSVD算法是奇異值分解的改進,避開了數(shù)據(jù)稀疏的缺點,同時將矩陣分解成兩個新的矩陣計算時間較短,在實際中應用十分廣泛[9]。
正如前文所述,F(xiàn)unkSVD是傳統(tǒng)奇異值分解的改進版,它可以將目標矩陣分解成兩個矩陣。將期望矩陣M進行如下分解:
(3)
(4)
(5)
式中:λ為正則化系數(shù),需要調(diào)參。對于這個優(yōu)化問題,一般通過梯度下降法進行優(yōu)化得到結(jié)果。
分別對pi、qj求導得到:
(6)
(7)
則在梯度下降迭代時,pi、qj的迭代公式為:
(8)
(9)
通過迭代最終可以得到P和Q,進而用于用戶評分預測。
然而,本文沒有將FunkSVD應用在用戶評分矩陣中,而是提出了一種新的思路,將其應用在用戶的相似度矩陣中,并且考慮到用戶偏好的情況,在得到初始相似度矩陣時利用了用戶評分數(shù)據(jù)與物品標簽數(shù)據(jù)進行綜合計算。同時,提出了新的模型將矩陣分解后的相似度值再次加權(quán),有效避免了用戶數(shù)據(jù)稀疏的情況。
對于基于用戶的推薦算法而言,用戶相似度計算的準確性高低是核心所在,同時,在本文提出的算法中也是極其重要的一步。
傳統(tǒng)推薦算法是按照用戶物品評分數(shù)據(jù)來計算用戶之間的相似度,當兩個用戶對同一物品的評分相似時則說明兩者具有極高的相似性,同時,共同評分物品數(shù)越多,則可以更精確地刻畫出用戶之間的相似度,與式(1)相同(假設(shè)得到的相似度為sim(u,v)item)[10]。
當數(shù)據(jù)稀疏時可以根據(jù)用戶偏好來計算用戶之間的相似度,用戶的偏好即為標簽。例如,當用戶A對物品1的評分為4分,物品1由標簽a與b組成,則可以認為用戶A對標簽a與b的評分均為4分,如果對同一標簽有多次評分,則取值為它們的平均值。用戶之間的標簽相似度計算方法與式(1)類似,式(1)中的共同評分物品集合對應為共同標簽評分集合即可(假設(shè)得到的相似度記為sim(u,v)tag)[11]。
根據(jù)前文計算的用戶物品評分相似度與用戶標簽相似度可以計算出用戶的物品標簽相似度[12],計算方法如下:
(10)
式中:con為用戶u與用戶v的共同評分物品數(shù);φ為參數(shù),用于平衡用戶物品評分相似度與用戶標簽評分相似度對物品標簽相似度值計算的影響程度,實驗中會根據(jù)數(shù)據(jù)調(diào)出。當兩個用戶的共同評分物品數(shù)一定時,參數(shù)值越小,則用戶物品評分相似度越接近用戶的物品標簽相似度[13];反之,則需要用戶標簽相似度來共同刻畫。
根據(jù)式(10)可以計算出任意兩個用戶之間的相似度,經(jīng)過一系列的計算可以得到用戶的相似度矩陣,如表1所示。用戶與自身的相似度為1,與其他用戶之間的相似度滿足0≤sim(u,v)item_tag≤1。
表1 用戶相似度矩陣
當兩個用戶的最小評分物品數(shù)非常少時,即小于參數(shù)?(與后文中的?一致,實驗中會根據(jù)數(shù)據(jù)調(diào)出),則可認為由式(10)計算的相似度不夠準確,并將相應的用戶相似度記為0,如將表1中的用戶1與用戶2,用戶2與用戶3之間的相似度值替換為0,最終可以得到一個新的用戶相似度矩陣。然后,利用FunkSVD對其進行矩陣分解,生成的相似度矩陣如表2所示,并記用戶u與用戶v之間的相似度值為sim(u,v)matrix。
表2 矩陣分解生成用戶相似度矩陣
根據(jù)用戶物品標簽數(shù)據(jù)可以計算出用戶的相似度矩陣,同時,F(xiàn)unkSVD矩陣分解方法可以計算出一個新的用戶相似度矩陣,所以,最終的用戶綜合相似度計算方法為:
(11)
式中:?為參數(shù),用于調(diào)節(jié)物品標簽相似度與矩陣分解后的相似度對綜合相似度值的影響程度,實驗中根據(jù)數(shù)據(jù)調(diào)出;m為用戶u的最小評分物品數(shù);n為用戶v的最小評分物品數(shù)。當兩個用戶的最小評分物品數(shù)一定時,參數(shù)值越小,則由物品標簽算出的相似度值可以更好地表示為用戶之間的綜合相似度;反之,則需要由矩陣分解算出的相似度值來近似表達。
本實驗所用數(shù)據(jù)為Movielens 100K數(shù)據(jù)集,MovieLens是由明尼蘇達州大學的GroupLens項目組開發(fā)的,其中包含943名用戶對1 682部電影的評分,評分記錄多達100 000條。另外,每位用戶對超過20部電影有評分,數(shù)據(jù)集有動作、冒險、兒童,紀錄片等18種標簽[14]。實驗中,將數(shù)據(jù)集按照8∶2分為訓練集與測試集。并采用平均絕對誤差(Mean Absolute Error,MAE)作為評價指標,衡量算法的優(yōu)劣。設(shè)預測的用戶評分集合為{p1,p2,p3,…,pn},對應的實際用戶評分集合為{q1,q2,q3,…,qn}[10],則平均絕對偏差MAE為:
(12)
式中:pi為用戶對物品i的預測評分;qi為用戶對物品i的實際評分。式(12)的值越小,說明預測值與實際值越接近,算法的準確性也就越高。
本文提出了基于FunkSVD矩陣分解和相似度矩陣的推薦算法,該算法在考慮到用戶偏好的同時有效地緩解了用戶數(shù)據(jù)的稀疏性問題。在采用Movielens 100K數(shù)據(jù)集的前提下,算法步驟如下:
步驟1根據(jù)用戶評分數(shù)據(jù)計算用戶之間的用戶物品評分相似度;
步驟2根據(jù)用戶的評分數(shù)據(jù)及物品標簽數(shù)據(jù)計算用戶的標簽評分相似度;
步驟3利用式(10)對步驟1和步驟2中的相似度值進行加權(quán)組合,所得即為用戶的物品標簽相似度,同時,得到一個最初的用戶相似度矩陣;
步驟4將步驟3相似度矩陣中兩個用戶最小評分物品數(shù)小于參數(shù)?的相似度值設(shè)為0,并對修改后的相似度矩陣進行矩陣分解生成新的用戶相似度矩陣;
步驟5對于步驟3和步驟4中的用戶相似度矩陣,對其中任意兩個相對應的相似度值利用式(11)進行加權(quán)計算,最終生成用戶的綜合相似度矩陣;
步驟6根據(jù)用戶的綜合相似度矩陣對目標用戶采用式(2)進行評分預測;
步驟7對預測的結(jié)果進行平均絕對誤差分析,衡量算法優(yōu)劣。
經(jīng)過上述步驟可以測算出此算法的評分預測準確性高低,同時,將與其他算法進行比較來驗證該算法相對優(yōu)劣。
本文的算法在求解參數(shù)時經(jīng)過了大量的實驗。對于式(11),由于參數(shù)較多,可以分為前后兩部分進行調(diào)試,對于用戶物品標簽相似度中的參數(shù),只要存在參數(shù)φ使得用戶物品標簽相似度作為用戶的最終相似度時結(jié)果最優(yōu),則該參數(shù)為最優(yōu)參數(shù)。同理,可得公式后半部分的最優(yōu)參數(shù),將求解后的參數(shù)代入式(11)后可再由實驗算出參數(shù)?。
在用戶物品標簽相似度的計算中,參數(shù)φ可以平衡用戶物品評分相似度與用戶標簽相似度對物品標簽相似度值計算的影響程度。其值越小,則物品評分相似度可以近似刻畫用戶的物品標簽相似度;反之,用標簽相似度來描述較為合適。經(jīng)過多次實驗發(fā)現(xiàn)當參數(shù)φ變化跨度為10時MAE的值變化較為直觀,同時,最優(yōu)的幾組數(shù)據(jù)在10到40之間,因此,不同參數(shù)φ與相似用戶數(shù)下MAE值的變化情況如圖1所示。
圖1 不同參數(shù)φ及相似用戶數(shù)對應MAE統(tǒng)計圖
根據(jù)圖1中數(shù)據(jù)可以發(fā)現(xiàn),當參數(shù)為10或20時,MAE值的變化較為接近,且20較好;當參數(shù)為30時,MAE的值整體較大;當參數(shù)為40時,整體值最大。圖中數(shù)據(jù)也說明參數(shù)取值小于20時,參數(shù)值越小,用戶物品評分相似度作為用戶的物品標簽相似度會導致評分預測越不準確;參數(shù)取值大于20時,參數(shù)值越大,用戶標簽相似度來補充計算用戶的物品標簽相似度會使相似度不準確,而預測結(jié)果也會隨之變差。最終,最合適的參數(shù)φ值應為20。
在FunkSVD矩陣分解的計算中,經(jīng)過多次實驗表明參數(shù)α為0.1、λ為0.02時結(jié)果較好。同時,分解的矩陣存在維度K,通常而言,維度K取值很小時矩陣分解的效果就已經(jīng)很好,且由多次實驗發(fā)現(xiàn)最優(yōu)解在10以內(nèi),因此可得圖2所示數(shù)據(jù)。
圖2 不同參數(shù)K及相似用戶數(shù)對應MAE統(tǒng)計圖
由圖2可知,當參數(shù)K值大于6時,參數(shù)值越大,不同相似用戶數(shù)下的MAE值整體越大,即結(jié)果越差。同時參數(shù)值小于6時,MAE值雖然整體較為接近取為6的值,但依然較差,固最優(yōu)參數(shù)K取值應為6。
式(11)中,存在參數(shù)?,當兩個用戶的最小評分物品數(shù)一定時,參數(shù)值越小,則物品標簽相似度作為用戶的綜合相似度結(jié)果較好;反之,需要矩陣分解后的相似度作為補充,即加權(quán)組合才可以。多次實驗發(fā)現(xiàn)最優(yōu)的幾組數(shù)據(jù)在參數(shù)值取為10到40的時候產(chǎn)生,可得圖3所示數(shù)據(jù)。
圖3 不同參數(shù)?及相似用戶數(shù)對應的MAE統(tǒng)計圖
由圖3可以得出:當參數(shù)值從10到30時,MAE的值整體逐漸變小;當值為40時,MAE整體變?yōu)樽畲?。這說明了當參數(shù)值為30時,用戶的物品標簽相似度作為用戶綜合相似度會使用戶評分預測結(jié)果較好,參數(shù)值過小,則用戶物品標簽相似度的計算不夠準確;參數(shù)值過大,矩陣分解后的相似度值作為補充會使最終的評分預測準確性降低。所以,最合適的參數(shù)?應取值為30。
本文的推薦算法通過準確計算用戶之間的相似度值從而達到提高用戶評分預測準確性的目的,為了驗證該算法的有效性,將基于FunkSVD和相似度矩陣的推薦算法(recommendation algorithm based on FunkSVD matrix decomposition and similarity matrix,F(xiàn)SM-RA)與其他幾種經(jīng)典的推薦算法進行比較,進行比較的推薦算法有:Tag-CF(基于標簽的協(xié)同過濾推薦算法)、Item-CF(基于物品的協(xié)同過濾推薦算法)和IT-CF(基于物品與標簽的混合協(xié)同過濾推薦算法)。實驗結(jié)果如圖4所示。
由圖4可知:基于物品的協(xié)同過濾推薦算法準確性最差,而且隨著相似用戶數(shù)的增加沒有顯著變化;基于標簽的協(xié)同過濾推薦算法的準確性比基于物品的協(xié)同過濾推薦算法的較高。同時,隨著相似用戶數(shù)的增加,評分預測的準確性會有所提升,可能在該數(shù)據(jù)集下,利用用戶偏好來計算用戶之間的相似度比基于物品評分效果較好;而基于物品和標簽的混合協(xié)同過濾推薦算法與基于標簽的相比,準確性稍微高一點,隨著相似用戶數(shù)的增加準確性有所增加,也說明了利用用戶評分與用戶偏好綜合計算相似度效果更好;最后,對于本文中的算法,即基于FunkSVD矩陣分解和相似度矩陣的推薦算法,評分預測的準確性整體最高(MAE值最小),表明了即使用戶數(shù)據(jù)稀疏也可以通過對相似度矩陣進行矩陣分解,再與原先相似度矩陣加權(quán)的方式來更準確地計算相似度值,同時也說明了本文算法是較優(yōu)的。
傳統(tǒng)基于用戶的協(xié)同過濾推薦算法在計算用戶相似性時經(jīng)常面臨數(shù)據(jù)稀疏的缺點,而利用標簽或者物品標簽混合的方法來計算用戶相似度可以較好地改進這個缺點。但是,當有新用戶或者物品數(shù)目過大時仍然面臨稀疏性的問題。因此,本文提出了一種基于FunkSVD矩陣分解和相似度矩陣的推薦算法。該算法在考慮用戶偏好的同時利用FunkSVD對相似度矩陣進行矩陣分解,并采用新的模型,將矩陣分解前后的對應相似度值進行加權(quán)組合。經(jīng)過Movielens數(shù)據(jù)集的實驗表明,該算法有效克服了數(shù)據(jù)稀疏的缺點,在評分預測的準確性上相較于傳統(tǒng)算法有所提升。另一方面,該算法也驗證了矩陣分解技術(shù)在相似度矩陣中的應用會有奇效。
但是,在計算綜合相似度的過程中,多個參數(shù)的求解方式?jīng)]有嚴格的科學依據(jù),有可能陷入局部最優(yōu)解,而非全局最優(yōu)解,因此,接下來會尋找關(guān)于參數(shù)求解的相關(guān)科學依據(jù)。同時,對于最近幾年比較火熱的技術(shù),例如深度學習也可以用于推薦算法[15],應當與這種方法也做一次比較,所以,也會繼續(xù)研究深度學習在推薦算法中的應用[16]。