黃幸穎,梁 路,滕少華
(廣東工業大學 計算機學院,廣州 510006)
在推薦系統中,用戶對項目的評分通常用二維矩陣來表示,但用戶已評分的項目數量有限,且隨著用戶數和項目數的增加,評分矩陣的規模將變大,這就是稀疏性[1]的問題.在推薦系統中被廣泛采用的協同過濾算法是根據用戶的歷史評分數據進行推薦的,易受到稀疏性的影響,如何降低其影響成為實現協同過濾要考慮的關鍵問題之一[2].
有鑒于此,國內外學者從降低矩陣稀疏度這一思路出發,采用了多種方法來對空缺值進行預測,例如基于內容的方法,基于聚類的方法等.這些方法有的利用項目或用戶的評分信息[3],有的利用用戶或項目的文本特征信息[4],對空缺的評分進行預測.優點是簡單、直觀和易于解釋,但存在特征的提取問題.填充時若使用項目的特征,大多情況下都只能選擇文本類信息,而對于音頻、視頻等非文本類的項目,可供使用的文本類特征有限,限制了預測準確度的提升;若使用的是用戶特征,用戶出于對自身隱私的保護,普遍對顯式特征收集表現出抗拒的情緒,而隱式特征收集又會涉及復雜的用戶行為分析與建模,所得特征既不易于解釋,也難以保證準確性.
本文采用一種基于自編碼網絡的模型,僅利用現有的評分信息,通過調整網絡節點之間的連接狀態來緩解稀疏性的影響,實現對評分矩陣空缺值的預測.實驗結果表明此方法的預測準確度超過了部分常用的推薦算法.本文第二部分為協同過濾領域的評分預測方法及其特點介紹;第三部分描述自編碼網絡在電影評分預測中的應用;第四部分展示實驗結果及分析;第五部分總結并提出下一步工作.
稀疏性問題使得推薦算法產生推薦序列時要分兩步:第一,按照一定的標準預測評分矩陣當中的空缺值;第二,在第一步的基礎上進行Top-N推薦[5].解決稀疏性問題的常用方法有固定值、基于人口統計屬性、基于內容、基于社交網絡等.以上方法能在一定程度上緩解稀疏性對推薦所帶來的影響,但有的沒有考慮用戶之間或項目之間的評分差異,難以保證預測結果的個性化;有的需要用戶或項目的額外信息,需要另外獲取[6-9].
Salakhutdinov和Hinton將深度學習和協同過濾進行結合,通過在Netflix數據集上使用受限波爾茲曼機(Restricted Boltzmann Machine,簡稱RBM)為用戶建模,對未知的電影評分進行預測,取得了不錯的效果[10].該方法嘗試為每一個用戶建立一個模型,但用于模型訓練的樣本只有一個,即用戶自身的歷史評分記錄,而其他用戶的評分信息卻未能得到充分利用.
作為深度學習的基礎模塊之一,自編碼網絡是一個三層的神經網絡,輸入層到隱含層為編碼層,隱含層到輸出層為解碼層,整體來說,自編碼網絡是在學習輸入數據的某種表示[11].由若干個自編碼網絡組成的堆棧式自編碼網絡(Stacked Auto-encoder,簡稱SAE)已被用于分類問題的求解[12].
自編碼網絡及其變型也常被用于輸入數據的特征提取.Xie[13]將這一結構應用到圖像的識別與去噪中,結果表明自編碼網絡提取出來的特征能提高識別準確率.Vincent[14]用去噪自編碼網絡來提取音樂特征,取得了很好的效果.胡振[15]用去噪自編碼網絡組成混合模型解決作曲家分類問題,實驗結果表明自編碼網絡在特征提取上存在優勢.江國薦[16]將堆疊自編碼網絡用于網頁分類,由于文本特征表示的特征向量維度高,而網頁文本屬于短文本,顯然用于文本特征表示的特征向量是一個稀疏向量,這與電影評分數據中各個用戶的評分向量是稀疏的一致.此外,該文實驗采用堆疊自編碼網絡進行特征選取,結果證明自編碼網絡可以更貼切地表達文本特征.綜上所述,故本文采用自編碼網絡來提取用戶評分中的隱含特征.
假設現有一個用戶-項目評分矩陣如表1所示,共有4名用戶和5部電影.評分值為1到5之間的整數,分值越大,表示用戶的喜好程度越高.現在要預測表中的空缺值,即用戶張三對電影《黃金時代》,用戶李四對電影《十七歲》等的評分.
表1 用戶-項目評分矩陣
Table 1 Users-items rating matrix

黃金時代親愛的十七歲大話西游歲月神偷張三132李四154王五233趙六513
基于用戶的協同過濾方法首先會計算用戶之間的相似度,然后用相似用戶對目標項的評分來填充相應的空缺值.例如,用戶張三和趙六的相似度最高,因此用戶張三對電影《黃金時代》的評分就用趙六對《黃金時代》的評分5分來填充.此方法優點是簡單直觀,但在預測空缺值時僅考慮目標項的評分,忽略了各個項目評分之間可能存在的聯系.而自編碼網絡能從用戶的評分中提取特征,有利于發現項目評分之間的相關性,提高準確度.
在電影評分的預測中,假設有N個用戶,M部電影,相關的定義如下:
定義1.用戶ui對電影mj的評分
定義2.用戶ui對所有電影的評分
定義3.輸入層第j個節點激活標志flagj

當自編碼網絡的輸入數據中隱含著一些特定結構,比如某些輸入特征是彼此相關的,那么自編碼網絡可以發現輸入數據中的這些相關性,進而對輸入數據進行有效的表示.

圖1 電影評分預測的自編碼網絡結構Fig.1 Auto-encoder structure in film rating predicts
本文所構建的自編碼網絡是一個三層神經網絡,其網絡結構如圖1所示.其中輸入層節點個數等于電影數M,與隱層節點的連接狀態用虛線表示,當該節點的激活標志為1時建立與隱層節點的連接,否則不建立連接.輸出層為一個softmax分類器,對應5個輸出節點,分別代表1到5分.

圖2 電影評分預測流程Fig.2 Film rating predicts process
然而在實際應用場景當中,用戶ui已給出評分的電影數目占總電影數目的比例很小,因此r(i)中有很多空缺值.將用戶的評分輸入到模型的時候,不能簡單地將空缺的評分值用0來代替,此舉會嚴重降低預測的準確度.因為自編碼網絡能夠學習輸入數據的特征表示,大量地輸入0會讓網絡學習到用戶評分的負偏好,錯誤地認為這個用戶的評分十分嚴謹,甚至是苛刻,致使預測階段得到的評分偏低,這顯然不符合實際情況.有鑒于此,在本文所構建的模型中增設輸入節點的激活標志,當該節點的激活標志為1時才將其值作為網絡的輸入.因為輸入的都是確實存在的評分,這些評分組成了概念上稠密評分記錄,每次激活值的計算及權重的調整都只發生在實際建立連接的節點上,使得模型能在一定程度上緩解稀疏性帶來的影響.與此同時,由于自編碼網絡在訓練階段學習的是一個輸出等于輸入的函數,即hW,b(r(i))≈r(i)此舉保證了自編碼網絡提取出來的隱層特征能夠很好地還原出輸入數據,從魯棒性角度而言,這些特征較一般的神經網絡提取出來的特征更優,故自編碼網絡能夠發現用戶評分中的隱含特征.
現在要預測用戶張三對電影《黃金時代》的評分,整個預測流程參照圖2.
首先求出張三的近鄰.以表1的數據為例,各用戶之間的皮爾遜相似度(Pearson Correlation Coefficient)如表2所示.根據用戶之間的相似度選取出近鄰,則張三的近鄰為王五和趙六.
表2 用戶的皮爾遜相似度
Table 2 Pearson similarity of users

張三李四王五趙六張三1.0-0.930.950.71李四-0.931.0-1.0-0.99王五0.95-1.01.00.90趙六0.71-0.990.901.0
由于網絡的輸出層是一個分類器,故需要獲得訓練樣本的類標簽.現將王五和趙六對《黃金時代》的評分進行抽取,二值化后作為訓練樣本的類標簽.{1,0,0,0,0}表示評分值為1分,{0,1,0,0,0}表示評分值為2分,如此類推.但王五對《黃金時代》的評分空缺,故王五的評分數據被拋棄不用.
利用近鄰的評分信息,通過逐層訓練,全局微調的方式即可獲得一個用于預測的自編碼網絡.其中,全局微調階段的整體損失函數為:
W代表整個網絡的權值,b代表偏置(bias).對應上述例子,n等于1,i等于2,j等于1.上式中,第一項是重構誤差項,第二項是正則項,用來防止網絡出現過擬合.由于自編碼網絡的優化問題是一個非凸優化問題,采用反向傳播求解損失函數最小值的過程中可能會陷入局部極小值.為了避免這一情況的發生,可以在權重調整時采用動量調整的方式來降低陷入局部極小值的概率.
將用戶張三對所有電影的評分r(1)輸入到訓練好的網絡中.經過一次前向傳播即可得到輸出層節點的激活值.選擇激活值最大的節點所對應的評分作為張三對電影《黃金時代》的預測評分.
實驗選用MovieLens1數據集:第一個是MovieLens 100k,該數據集包含了943位用戶在1682部電影上的100,000條評分記錄,稀疏度約為93.7%;第二個是MovieLens 1m,該數據集包含了6040位用戶在3952部電影上的1,000,209條評分記錄,稀疏度約為95.8%.兩個數據集的評分都是1到5之間的整數,分布情況如表3所示,可見在兩個數據集中,3分及以上的評分均占總評分數的80%以上,4分及以上的評分占總評分數的50%以上,評分分布明顯不平衡.
表3 數據集評分分布
Table 3 Distribution of rating datasets

評分分布MovieLens 100kMovieLens 1m1分6110條,約占6.1%56174條,約占5.6%2分11370條,約占11.4%107557條,約占10.8%3分27145條,約占27.1%261197條,約占26.1%4分34174條,約占34.2%348971條,約占34.9%5分21201條,約占21.2%226310條,約占22.6%
數據集中的數據隨機選取80%的評分數據作為訓練樣本,剩下的20%作為測試樣本.
準確度指標采用平均絕對誤差(Mean Absolute Error,簡稱MAE),和均方根誤差(Root Mean Squared Error,簡稱RMSE)來衡量.
平均絕對誤差的計算公式如下:
均方根誤差的計算公式如下:

表4展示了自編碼網絡與基于用戶的協同過濾、基于項目的協同過濾、Slope One、SVD這4種常用的推薦算法和BP神經網絡.在兩個數據集上的對比結果.
在100k這個數據集上,自編碼網絡的MAE值為0.776,優于BP神經網絡的0.802和SVD的0.781,僅次于Slope One的0.747,而在RMSE值上,自編碼網絡的0.983要遜于Slope One的0.947,優于基于用戶的協同過濾的1.275和BP神經網絡的1.051.而在1M數據集上,自編碼網絡獲得的結果與100k上的相似,MAE值優于BP神經網絡和SVD,僅次于Slope One;RMSE值則位居第二,依然次于Slope One.
從實驗結果中不難看出以下幾點:
1)針對電影評分數據稀疏、冗余和不平衡的特點,本方法同時考慮了近鄰之間的評分相似性和項目之間的評分相關性.從預測準確度來看,得益于自編碼網絡的特征提取優勢,自編碼網絡隱層提取的特征要優于BP神經網絡提取的特征.
2)自編碼網絡在大數據集上的準確度要高于小數據集上的準確度.因為較大的數據集能夠提供更多的訓練樣本,強化了近鄰之間的評分相似性和項目之間的評分相關性,有助于提取評分信息的更一般特征,提高網絡的泛化性能.
表4 各種推薦算法的準確度
Table 4 Accuracy of recommendation algorithms

實驗方法MovieLens 100kMovieLens 1mMAERMSEMAERMSE基于用戶的協同過濾0.9811.2750.8351.099基于項目的協同過濾0.8481.1190.7830.995SVD0.7810.9860.7320.921Slope One0.7470.9470.7160.908BP神經網絡0.8021.0510.7480.993自編碼網絡0.7660.9830.7290.916
3)自編碼網絡上的MAE值和RMSE值相差約為0.2,大于基Slope One上的差值.因為訓練自編碼網絡涉及非凸函數的優化求解,存在局部極小值,使得預測結果不夠穩定,波動較大.
本文利用自編碼網絡將評分預測問題轉換為多分類問題來解決,通過設置節點激活標志來調整輸入節點與隱層節點連接狀態,能在一定程度上降低稀疏性對預測準確度的影響.所得隱含特征在實現評分信息近似表示的同時,提高了預測準確度,為處理評分冗余且分布不平衡的稀疏矩陣形成支撐,在協同過濾稀疏性問題的背景下有一定的應用價值.實驗表明,本方法能獲得比部分常用的協同過濾算法更高的預測準確度,具有較好的可擴展性,但在訓練網絡時需要較多的計算資源,對冷啟動問題的解決也有待加強.