周雕,郝勝男
(華北理工大學人工智能學院,唐山063210)
在數據爆炸式增長的時代,如何從海量數據中獲取關鍵有效的數據是人們所面臨的一個難題,而推薦系統的出現為這個難題提供了有效解決方案。過去,常用的推薦算法主要有基于用戶的協同過濾、基于物品的協同過濾、基于內容的推薦、基于知識的推薦等,其中協同過濾是推薦系統中應用最為廣泛的算法。
但是近年來,許多學者已經不再局限于研究傳統算法,越來越多的推薦系統研究工作基于深度學習展開。例如,He X等人[1]提出了一種神經協同過濾框架,該框架結合協同過濾的思想,并使用神經網絡代替傳統的內積操作,是一種推薦系統通用框架。Cheng H T等人[2]提出了Wide&Deep模型,該模型由Wide部分和Deep部分組成,兼具較好的記憶能力與泛化能力。而在實際應用中,YouTube提出了一種基于DNN的視頻推薦模型[3],該模型能夠從百萬視頻數據中迅速生成候選集,并實現Top-K推薦。阿里巴巴提出了一種深度興趣網絡[4],該網絡能夠高效地利用用戶行為數據并準確地捕捉用戶的偏好特征。上述工作給推薦系統的研究提供了很好的建議。
一個良好的推薦系統往往需要高精度的數據支撐,然而現實中,用于模型訓練的數據往往具有龐大、稀疏、噪聲大等問題,這些問題給推薦模型的準確度、魯棒性帶來了極大的挑戰。因此,提出一種分類訓練方法,通過K-means[5]將訓練集中的用戶按照歷史行為聚類成不同的簇,然后將各簇數據輸入神經網絡進行并行訓練。由于各簇之間的相互獨立性與簇內用戶的相似性,神經網絡模型能夠更快地學習到用戶特征與項目特征從而迅速收斂,另外,并行訓練的方式也能進一步加快訓練速度,且不影響準確性。
所提方法的總架構簡化圖如圖1所示。

圖1 模型基本架構
架構的核心組成部分為K-means聚類模塊以及神經網絡模塊。其中K-means聚類模塊的主要作用是將用戶訓練數據分為k個簇,而神經網絡模塊的作用則是對k個簇中的數據進行并行訓練,最后將訓練模型保存即可直接用于推薦場景。
在龐大的用戶-項目行為稀疏矩陣中,由于用戶數量與項目數量太多,用戶與用戶之間的偏好差異存在太大的不確定性,如果使用同一模型來對這些用戶進行訓練,那么模型很難“照顧”到所有用戶的偏好規律,也就是說,模型難以較好地擬合所有用戶。因此,在進行神經模型的正式訓練之前,對所有用戶進行分類,使得同類別中的用戶在偏好上有著更高的相似度。而同類用戶的聚類是進行用戶分類的前提。
在K-means聚類步驟中,設定簇中心(或稱質心)的個數為k,即訓練數據將被劃分為k個類別,所有訓練數據的集合表示為Dtrain={C1,C2,…,Ck-1,Ck}。初始簇中心為隨機生成,在聚類過程中,簇內用戶緊靠簇中心,而簇與簇之間的距離較大,由此,用戶按所屬不同的簇中心而被區分開來,達到用戶分類的目的。
進行正式聚類前,首先對訓練數據進行預處理。訓練數據中包含了用戶的評分行為數據,但這些評分分值往往并不分布在0到1的區間內,為了減緩奇異樣本帶來的負面影響,因此需對所有評分數據進行歸一化操作,使得所有分值分布于區間[0,1]內,對于評分記錄i,歸一化的變換公式為:

其中,xi為原始評分,xmin為所有評分記錄中的最小分值,xmax為所有評分記錄中的最大分值,為歸一化后的分值。
聚類過程中,為了使用戶找到合適的簇中心,采用歐氏距離來度量用戶與各個簇中心的距離。并通過迭代使簇內用戶之間的歐氏距離盡量小,而簇與簇之間的歐氏距離盡量大。設簇中心的特征向量維度為n,則簇中心u1與u2的歐氏距離通過以下公式計算:

如何達到良好的聚類效果是問題核心所在。在迭代過程中,需要站在全局角度來評估聚類性能,具體做法是通過反復計算所有用戶與簇中心的距離之和來判斷聚類效果的好壞。因此,K-means的最終目的是優化距離,優化過程公式為:

在評分預測過程,使用DNN神經網絡回歸實現。DNN又稱多層感知機,是一種典型的全連接神經網絡,即上層的每一個神經元與下層的每一個神經元一一相連。全連接結構使得模型具有更強的特征表達能力以及泛化能力。圖2為全連接結構示意圖。

圖2 全連接層結構
在本文所提方法中,由于采用并行訓練的方式,因此需要同時構建多個神經網絡模型,這些模型之間相互獨立,且具有完全相同的結構和訓練參數,被用來同時訓練不同類別的用戶簇。其中任意一個神經網絡結構可以概括為圖3所示。

圖3 神經網絡結構
該網絡結構主要由用戶與項目特征學習模塊、全連接模塊以及評分預測模塊組成。
在用戶特征學習中,為了更準確地學習到用戶特征,不僅利用用戶ID、年齡、性別等用戶注冊信息,而且還充分利用用戶的行為序列。用戶的行為序列中包含了許多用戶的歷史交互行為,其顯性行為一般以評分形式呈現,而在實際推薦場景,用戶行為還包括諸如點擊、瀏覽等隱性行為,充分地利用行為數據可以使模型性能更好。而在項目特征學習中,主要使用項目ID、項目名稱、項目類別等項目參數進行特征生成。
然而,用戶與項目的初始特征往往以one-hot向量形式存在,one-hot向量非常稀疏,如果在整個神經網絡中直接用one-hot向量進行訓練,則會消耗巨大的計算成本。因此,用戶與項目信息在進入神經網絡的第一步就是進行Embedding嵌入操作。Embedding的作用是將用戶與項目的高維one-hot向量映射成低維稠密向量,稠密向量經過兩個全連接層即可得到完整的用戶特征向量與項目特征向量。得到特征向量后并不能直接獲得評分,接下來,將用戶與項目特征向量進行特征拼接,再次經過兩個全連接層,即可將高維拼接特征映射成一維預測評分。
在整個神經網絡的訓練過程中,包含向前傳播與向后傳播兩部分。向前傳播過程中,主要實現用戶與項目特征學習以及用戶對項目的評分預測,該過程中,采用ReLu激活函數,該函數具有易求導,能緩解梯度消失等特點,能夠加快模型的收斂速度。對于第t個隱層,設輸入為Xt=(x1,x2,…,xj-1,xj),輸出為Yt=(y1,y2,…,yk-1,yk),則輸入與輸出之間滿足以下公式:

其中,Wt為權重矩陣,Bt為偏置矩陣。在整個網絡中,幾乎所有層都是類似的計算方法,但是在Em?bedding層與最后的預測輸出層并不設置激活函數。
在模型的反向傳播過程中,使用MSE損失函數計算預測值與真實值的誤差,并進行各層矩陣與偏置的更新。另外,使用L2正則化防止模型的過擬合。本文所提方法中使用的損失函數表達式為:

其中,n為單批次訓練的樣本數量,yi、y'i分別為真實值與預測值,T為總的網絡層數。
實驗中,選擇使用公開的電影評分數據集Movie-Lens 1M和MovieLens 100K(https://grouplens.org/datas?ets/movielens/)對算法模型進行評估驗證。其中MovieLens 1M中包含了大約6000用戶對4000部電影的一百萬個評分;MovieLens 100K中包含了大約950個用戶對1600余部電影的十萬個評分。其中,每個用戶至少包含有20個電影評分記錄。在實驗過程中,隨機選取80%的數據作為訓練集,其余為測試集。
由于本文所提方法最終實現評分預測,因此,在本文中,計算預測分與實際分之間的偏差是一種有效的性能評估方法,這類常見的方法有RMSE、MSE、MAE等。這些評估方法沒有太大的本質上的差別,在本文實驗中,選用RMSE和MAE作為評估標準,并且與經典的矩陣分解算法進行比較,驗證模型的性能。
RMSE的計算公式如下式所示:

MAE的計算公式如下式所示:

實驗的訓練與測試均在PyTorch深度學習框架下進行。為了驗證所提方法的有效性,在模型性能測試環節,將所有分類訓練的模型在測試集上進行了15次測試,并取平均值作為最終的測試結果。表1為所提方法與SVD[6]、AutoSVD++[7]、NNMF[8]等矩陣分解算法的RMSE、MAE結果對比,其中本文方法取所有分類訓練的平均值。

表1 實驗結果比較
從實驗結果可以看出,本文方法相比傳統的矩陣分解算法有著較大的性能提升,這是因為本文模型采用了神經網絡進行評分預測,保證了模型的泛化能力的提升,其次,由于K-means聚類算法的引入,使得模型對于不同類型用戶具有更好的適應性。