摘 要: 評分預測是推薦系統的一個組成部分,通過一個實數表達對用戶的偏好進行預測,在學術界被廣泛研究。神經網絡具有很強的特征提取能力,能獲取數據深層次的特征。使用神經網絡中的一種網絡即自編碼器,通過擴展使其具有處理像評分矩陣這種有缺失數據的矩陣的能力,并通過實驗證明其預測結果與當前主流的評分預測算法SVD的性能接近。
關鍵詞: 推薦系統;神經網絡;自編碼器;評分預測
0 引言
協同過濾算法是推薦系統中較為常用的算法,因為使用協同過濾算法進行推薦時,只需收集用戶對某件物品的一個動作表達用戶對物品的偏好程度,如評分、加入購物車、購買等,即可進行推薦,這樣的數據對于電子商務網站或者視頻網站來說是非常容易收集的。基于領域[1]的算法是協同過濾算法中最基本的算法,主要分為基于用戶的協同過濾算法,即給用戶B推薦物品,只需尋找與他相似的用戶并將該用戶喜歡而用戶B沒有看過的物品推薦給B。基于物品的協同過濾算法與基于用戶的思路類似只是主體換成了物品,這兩種算法在業界被廣泛應用。后來又出現了矩陣分解的方法,其中具有代表性的是SIMON F提出的SVD算法[2]。SVD算法是對用戶評分矩陣進行分解,然后再重構,重構的結果就是預測結果,SVD算法在評分預測方面的性能優于傳統的基于鄰域的算法,在Netflix Prize競賽中取得了巨大的成功。
神經網又稱為多層感知器,因其具有強大的函數表達能力,可以表達復雜模型,是機器學習的一個重要研究分支,2006年HINTON G E[3]等人發明訓練深度網絡的方法以后,具有深度結構的神經網絡成為了機器學習領域的一個研究熱點。自編碼器是神經網絡中一種用于無監督學習的網絡,本文提出一種關于自編碼器在評分預測上的擴展,并與當前熱門的評分預測算法SVD進行試驗對比。
1 算法
目前很多的機器學習工作都會使用自編碼器進行無監督學習,得到一組好的特征表示來完成更高級的任務[4-5],使用這樣的方法獲得了顯著的效果。基于自編碼器有很強的發現潛在特征的能力,在評分預測中對于用戶評分矩陣,用已經評分的部分作為輸入,使用自編碼器學習恒等函數y(x)≈x獲得數據更深層次的表達,然后再利用這組表達去重構評分矩陣缺失的部分,即得到預測值。
1.1 網絡結構
假設有N個用戶,M部電影,用戶對某個電影的評分為1~K之間的某個整數,就形成了M×N的矩陣V,這個矩陣是一個有缺失數據的矩陣,如果用戶i沒有對電影j進行評分則元素Vji就是缺失的。矩陣的一列的第i屬性表示用戶i對電影的評分,用矩陣V的一個列向量作為輸入給自編碼器。自編碼器輸入層的每一個節點代表用戶對當前電影的評分,對于輸入向量中缺失評分的那個用戶,網絡中對應的輸入的單元和輸出單元也是缺失的,這樣自編碼器會根據不同的電影輸入而改變網絡結構,但是隱藏層的單元數是固定的,單元之間的參數是共享的,網絡的結構如圖1所示。在圖中展示了兩個電影輸入給自編碼器的情況,第一個電影只被用戶1、2、3、5評過分,則相應的第4個輸入和輸出節點是缺失的;第二個電影被用戶1、3、4評過分,則第2和第5個節點是缺失的。
現在來分析特定電影被用戶評分的向量作為輸入情況下的自編碼器。假設電影被n個用戶評價,h為隱藏層的單元個數,則有如下符號定義:
v:神經網絡的輸入,v∈Rn。
h:隱藏層的單元數。
W:第層的單元j到連接到第l+1層的單元i的參數,其中W(1)∈Rh×n,W(2)∈Rh×n。
b:連接到l+1層的單元i的偏置。
a:第l層的單元i的激活,其中a=vi表示第i個輸入。
自編碼器的向前計算過程為:
1.2 網絡訓練
網絡的訓練采用反向傳播算法,包含向前階段和向后階段兩個過程。向前階段使用式(1)、(2)計算出預測值,在向后階段利用誤差向后傳播的思想計算梯度,即先計算l+1梯度,再計算l層的梯度。每個電影的輸入用向量v表示,則每個參數的梯度為:
使用bath-method訓練時,不同電影的輸入被相同用戶評分為輸出單元和輸入單元,可以把與這些單元相關的參數的梯度進行累加,作為總梯度來進行參數的更新。
2006年Chu Chengtao[6]提出當算法能夠寫成一種稱為summation form的形式時這種算法就能很容易地進行并行化訓練,并給出了神經網絡在Map-Reduce框架下的并行化訓練思路,本文提出的預測評分算法很容易擴展到處理大數據的環境。
1.3 預測
網絡訓練完成后進入到預測階段,如要預測用戶u1對電影的評分,網絡的輸入層到隱藏層不變,只需在輸出層增加一個關于用戶u1的輸出節點,為了能夠預測其訓練集中所有用戶對當前電影的評分,可以把輸出層的節點數增加到N,網絡結構修改如圖2所示。輸入層的節點4是缺失的,但是輸出層的節點4還在,因此輸出層的節點4就是算法對用戶4關于當前電影的評分預測。然后使用式(1)、(2)對網絡進行一次向前計算,即可得到網絡對電影被某個用戶評分的預測。
1.4 利用隱式反饋
在推薦系統領域,會遇到一種叫做冷啟動的問題。網站有很多的電影和用戶,但是用戶對電影的評分卻很少,評分矩陣過于稀疏,導致評分預測精度下降。電影網站很容易獲得一種隱式的反饋,即用戶看過或瀏覽過某部電影,但是因為某種原因沒有給出評分,這種隱式的反饋,也可以在一定程度上解釋用戶的偏好,因此算法就可以利用這組隱式反饋數據。考慮向量d∈{0,1}N是一個長度為N的0~1向量,表示電影是否被某個用戶查看過,這樣就可以通過這組向量去影響隱藏層的表示,這時對式(1)進行修改如下:
本次實驗采用MoiveLens-100k數據集,其中含有943個用戶對1 682部電影的10萬次評分,評分取值是從1~5之間的整數,實驗前需要對數據進行預處理,即對整個數據除以5,最后算法的輸出結果乘以5得到最終的預測結果。在實驗中把數據集劃分為不相交的兩部分,第一部分包含9萬個用戶評分作為訓練集,剩下的作為測試集驗證預測效果,上述過程會重復劃分10次,進行10次訓練和預測。預測結果的評價采用評分預測中常用的均方根誤差(RMSE)作為評分標準。假設用戶u對電影i的真實評分為rui,算法預測評分為ui,T是一個集合存放測試集中用戶u對電影i評分的二元組,則RMSE的計算公式為:
每次訓練,把訓練數據分成10批(batche),每批含有168個電影的訓練用例,最后一批含有170個電影訓練用例,每一批計算完梯度后進行參數更新,神經網絡的隱藏單元個數設置為50。對比實驗選擇當下預測評分算法中比較流行的SVD,SVD的隱式因子設定為50,數據全部經過算法訓練一次記一個周期(epoch),訓練50個周期,在1~50個周期的誤差中選擇最好的訓練結果,如圖3所示。10次測試的平均結果如表1所示。從結果來看,基于自編碼器的評分預測算法性能在當前數據集上好于SVD,帶有隱式反饋的自編碼器性能略好于原始的自編碼器,但是提升效果不明顯,僅有0.06。
3 結論
本文提出了一種基于自編碼器的評分預測算法,在MoiveLens數據集上獲得了不錯的效果,實驗中的參數并沒有被很好地調節,算法還有提高的可能性,用戶的隱式反饋雖然還能提高算法的預測精度,但是在實驗中提高僅僅只有0.06,并不明顯,如何更好地利用這種隱式反饋需要進一步研究。通常在獲取的用戶評分數據中往往帶有時間屬性,而這也是一個非常好收集到的屬性, KOREN Y提出的一個SVD的變種[1]中使用了時間屬性并取得了好的成績,今后的研究中會考慮把時間屬性加入到自編碼器模型中。近年來基于深度結構的神經網絡成為機器學習研究的熱點,已被成功地使用到很多領域,如自然語言處理、信息檢索、分類。未來利用具有構建深度結構的自編碼器來提高預測結果也值得進一步研究。
參考文獻
[1] 項亮.推薦系統實戰[M].北京:人民郵電出版社,2012.
[2] SIMON F. Netfix update: tray this at home[EB/OL]. [2006-12-11](2014-09-01).http://sifter.org/~simon/journal/20061211.html.
[3] HINTON G E, OSINDERO S, TEH Y. A fast learning algorithm for deep belief nets [J]. Neural Computation, 2006,(18):1527-1554.
[4] RAINA R, BATTLE A, LEE H, et al. Self-taught learning: transfer learning from unlabeled data[C]. Proceedings of the 24th International Conference on Machine Learning, ICML 2007,2007:759-766.
[5] HINTON G E, SALAKHUTDINOV R. Reducing the dimensionality of data with neural networks[J]. Science, 2006,31(3):504-507.
[6] Chu Chengtao, KIM S K, Lin Yian, el al. Map-reduce for machine learning on multicore [C]. NIPS 2006.