張玉瑤,程學林,尹天鶴
(浙江大學 軟件學院,浙江 杭州 310058)
隨著大數據時代的到來,每時每刻都有海量數據被制造和發布到網絡上。為了應對數據量的激增導致的“信息過載”問題,推薦系統應運而生。在電影推薦領域,用戶可以方便地通過移動終端接觸各式各樣的電影,對電影的選擇越來越依賴于電影評分和智能化電影推薦[1]。推薦系統的核心在于推薦算法,推薦算法的準確度直接決定著推薦系統的效果。
協同過濾推薦算法能夠充分利用用戶行為數據,不受物品內容的限制,成為應用最普遍的推薦算法之一[2]。矩陣分解(matrix factorization,MF)是一種基于模型的協同過濾算法,模型簡單且擅長評分預測,在電影推薦等領域得到了廣泛的應用。文獻[3]提出的隱語義模型(latent factor model,LFM)是一種典型的矩陣分解,引入用戶和物品評分隱因子,之后該算法又被進一步優化。文獻[4]將用戶隱式反饋信息及用戶和項目偏好隨時間的變化納入考慮,提出TimeSVD++算法,使得推薦準確性進一步提升。然而,矩陣分解過度依賴于用戶對物品的行為數據,導致了數據稀疏性、冷啟動以及特征提取不充分等問題[5],對推薦準確度造成了嚴重影響。
隨著人工智能浪潮的興起,一些學者開始將深度學習方法運用到推薦算法研究中,文獻[6]對深度學習在推薦算法中的應用進行了綜述。文獻[7]提出了深廣學習模型(wide & deep learning),能夠對包括項目特征、情景特征在內的多源異構數據加以綜合利用,使得訓練得到的模型同時獲得記憶和泛化能力。文獻[8]提出一種基于長短期記憶網絡LSTM的上下文感知模型,該模型能夠捕捉用戶的長短期興趣偏好,使得個性化上下文感知引用推薦成為可能。也有一些研究將深度學習算法和協同過濾融合起來,構建混合推薦模型。將深度學習算法提取到的特征作為輔助信息,有利于緩解數據稀疏問題,提高推薦準確度。文獻[9]提出CNN-LFM模型,利用隱語義模型LFM挖掘評分數據,獲得用戶和項目的潛在特征,其中項目的潛在特征會在卷積神經網絡(convolutional neural networks,CNN)提取的圖像特征的約束下不斷完善,很好地提高了推薦的性能。文獻[10]提出了ConvMF卷積矩陣分解模型,將CNN集成到概率矩陣分解(probabilistic matrix factorization,PMF)中,通過融入項目文本特征提升推薦準確度。然而,現有的混合算法在特征提取上比較單一,往往忽視了用戶特征,對項目特征的挖掘則集中于文本、圖像等某一方面,并不能充分體現項目特征。
該文將電影推薦作為研究對象,提出融合深度學習和矩陣分解的LM-SVD推薦算法。利用深度學習長于特征提取和矩陣分解善于預測評分的優點,提高電影評分預測準確度。首先以多層感知機(multilayer perceptron,MLP)和長短期記憶網絡(long short-term memory,LSTM)的組合模型學習用戶、電影屬性數據及文本數據,以獲取用戶和電影的深層特征表示。接著以BiasSVD矩陣分解模型學習用戶電影評分數據,獲取用戶、電影的潛在隱向量,并與深度學習階段獲得的深層向量相融合。最后結合評分偏置信息進行電影評分預測,改進SVD的預測評分和損失函數計算方式,緩解評分矩陣的數據稀疏性,使得特征提取更加充分。
該算法的特點在于:(1)改進了矩陣分解推薦算法的評分預測方式與損失函數。通過深度學習挖掘用戶和電影的深層次特征,融入矩陣分解模型中,提升電影評分預測準確度。(2)通過MLP學習用戶、電影屬性特征,LSTM學習電影文本特征,BiasSVD矩陣分解學習用戶電影潛在特征,對用戶特征和電影特征進行了深入挖掘,充分利用了輔助信息。即使當用戶電影評分數據較為稀疏時,LM-SVD依然可以準確地進行預測。
多層感知機包含輸入層、隱藏層和輸出層,又稱人工神經網絡。除了輸入輸出層,中間隱藏層的數量可以根據需求任意添加。MLP不同層之間是全連接的,即上一層的任意一個神經元與下一層的所有神經元之間都存在連接。
長短期記憶網絡[11]是循環神經網絡(recurrent neural network,RNN)[12]的一個重要變種。RNN很擅長進行序列化建模,而LSTM對RNN單元的結構進行了修改,通過設計門結構和記憶單元來解決梯度爆炸或梯度消失問題,能夠對輸入長度較長的時間序列問題進行建模。每一個時刻t的LSTM單元由輸入門it、遺忘門ft、輸出門ot、細胞記憶單元ct和隱層狀態ht組成。
遺忘門ft用來控制從細胞記憶單元中丟棄信息,決定上一時刻歷史信息的流入量,見式(1)。
ft=sigmoid(WifXt+bif+Whfht-1+bhf)
(1)
其中,ht-1表示上一個時刻的輸出,Xt表示當前時刻的輸入。
輸入門it用于控制當前時刻信息的流入。首先,以一個sigmoid層決定哪些信息需要更新,見式(2)。接著,以一個tanh層生成當前時刻信息的備選更新值gt,由當前時刻的輸入值Xt和上一時刻的輸出值ht-1所決定,見式(3)。最后,將這兩部分結合起來,實現對細胞記憶單元的更新,將ct-1更新為ct,見式(4)。
it=sigmoid(WiiXt+bii+Whiht-1+bi)
(2)
gt=tanh(WigXt+big+Whght-1+bhg)
(3)
ct=ft×ct-1+it×gt
(4)
輸出門ot主要用于控制當前時刻信息的流出,以決定最終輸出的值。如式(5)所示,先通過sigmoid層來決定輸出細胞記憶單元的哪些部分。
ot=sigmoid(WioXt+bio+Whoht-1+bho)
(5)
接著,把細胞記憶單元ct通過tanh進行處理,并將它和ot相乘篩選出最終的輸出結果,見式(6)。
ht=ot×tanh(ct)
(6)
以上公式解釋了信息在LSTM隱藏層的處理過程。LSTM通過設置三道控制門實現了信息選擇,可以很好地對長期時間序列進行建模。
矩陣分解是一種基于模型的協同過濾算法[13],在推薦領域應用廣泛。該文采用的矩陣分解算法是求解用戶、物品潛在特征隱向量,考慮評分偏置的BiasSVD算法[3]。
設R代表評分矩陣,現有m個用戶,n個物品。在矩陣分解階段,尋找用戶特征矩陣P和物品特征矩陣Q,使得兩矩陣的乘積近似等于R。k表示用戶隱向量和物品隱向量的維度:
(7)

(8)
在實際應用中,用戶對物品的評分可能存在偏見,因此在預測評分中加入評分偏置項,其中μ為整體評分偏差,是所有評分的全局平均值;bu為用戶評分偏置,bi為物品評分偏置。

‖qi‖2+‖bu‖2+‖bi‖2)
(9)
矩陣分解具有易于建模、擅長評分預測的特點,是目前應用最為廣泛的電影推薦算法之一。然而,矩陣分解電影推薦算法存在著以下問題:
(1)數據稀疏性問題是指用戶電影評分矩陣是極為稀疏的。用戶只對極少部分的電影做出過評分等行為,稀疏的評分矩陣使得矩陣分解的效果不佳。
(2)冷啟動問題是一種極端情況下的數據稀疏性問題。當一個新用戶或者一部新電影剛剛進入系統時,由于還沒有產生用戶行為數據,也就無法做出推薦。
(3)特征提取不充分問題是指矩陣分解只利用了用戶行為數據,而沒有將用戶屬性數據和電影屬性數據考慮在內。這些輔助信息中很可能蘊含著用戶和電影的重要特征。
為應對上述問題,該文將深度學習和矩陣分解算法融合設計混合推薦算法LM-SVD,使得電影評分預測準確度提高,從而提升推薦質量。首先利用多層感知機(MLP)學習用戶、電影屬性特征,利用長短期記憶網絡(LSTM)學習電影文本特征,獲取用戶和電影的深層次特征向量。之后將習得的深層特征向量融入BiasSVD矩陣分解模型中,改進BiasSVD的評分預測方式和損失函數,分解用戶電影評分矩陣從而預測評分。將深度學習提取到的特征作為輔助信息,可以有效地緩解用戶電影評分矩陣的數據稀疏性和冷啟動問題。
該文提出融合深度學習算法和BiasSVD矩陣分解模型的LM-SVD推薦算法。算法整體架構如圖1所示。

圖1 LM-SVD算法模型
算法整體分為數據處理層、算法模型層和評分預測層。數據處理層進行數據預處理和特征工程。其中用戶屬性、電影屬性及電影文本數據作為輔助信息,用于深度學習模型訓練;用戶電影評分行為數據用于矩陣分解模型訓練。
算法模型層包含深度學習模塊和矩陣分解模塊。深度學習模塊包含兩個并行的網絡Netu和Neti。Netu負責通過MLP學習用戶屬性數據,輸出用戶深層特征向量Pu;Neti首先以MLP學習電影屬性數據,并通過LSTM從電影標題數據中學習電影文本特征,之后輸出電影深層特征向量Qi。BiasSVD矩陣分解模塊負責從用戶電影評分矩陣中分解出用戶潛在隱向量pu和電影潛在隱向量qi,這屬于潛在特征向量。將深度學習得到的深層特征向量Pu和Qi與矩陣分解得到的潛在特征向量pu和qi進行融合,并結合用戶評分偏置,對SVD算法的損失函數進行改進。
評分預測層通過最小化損失函數訓練模型??衫糜柧毢玫哪P瓦M行評分預測,從而為每個用戶形成其電影推薦列表。
(1)學習用戶深層特征向量。

(10)
(11)
式(10)、(11)中,w1和w2表示全連接層權重,b1和b2表示偏置。
(2)學習電影深層特征向量
將電影屬性和電影文本數據輸入到模型中以獲取電影深層特征向量。首先將電影屬性輸入到嵌入層,從而將各特征轉化為稠密向量。經過嵌入層后,電影ID、電影類別、上映年份、電影演員特征向量的維度均為8。由于每部電影有多名演員,需要對每部電影對應的多個演員向量做加和,以代表該部電影的演員向量,類別特征同理。
將電影標題文本數據輸入到LSTM模型中。這部分模型包括嵌入層、LSTM層和dropout層。嵌入層將電影標題文檔轉換為詞向量矩陣。在數據預處理階段,所有電影標題句都被映射為長度為15的等長數字列表,對應15個單詞,標題長度不足15的用填充符所對應的數字補齊。則每個電影標題通過嵌入層后,都會被編碼為形如D={a1,a2,…,a15}的詞向量矩陣,ai是第i個單詞的詞向量,維數為8。之后通過一層LSTM層處理詞向量矩陣。隱藏層神經元的個數為8,激活函數采用tanh。dropout層以預先設置的概率停止神經元的輸出,意味著每次的網絡訓練只有一部分數據特征在參與,從而達到防止神經網絡過擬合的目的。這里dropout設置為0.5。
經過上述處理,LSTM將電影標題的行文檔作為輸入,輸出每一行標題文本的特征向量Qi1:
Qi1=LSTM(W,yi)
(12)
其中,W代表所有的權重和偏置,對于每個初始電影標題行文檔yi,得到一個維數為8的文本特征向量Qi1。
將嵌入層輸出的各電影屬性特征向量輸入到MLP,包含一層全連接層,共32個神經元,激活函數為relu。設第一個MLP輸出的電影屬性特征向量為Qi2,將Qi2和LSTM輸出的電影文本特征向量Qi1輸入到第二個MLP中。如式(13)所示,最終輸出電影深層特征向量Qi。Qi的維度為k,是待確定的參數。concatenate(·)函數用于將Qi1,Qi2兩個特征向量進行串聯,w為全連接層權重,b為偏置。該MLP包含一層全連接層,共k個神經元,激活函數為tanh。
Qi=tanh(w·concatenate(Qi1,Qi2)+b)
(13)
在1.3節中,闡述了加入評分偏置項的BiasSVD矩陣分解算法原理和主要計算公式。如圖1所示,LM-SVD算法將深度學習模型訓練得出的用戶深層特征向量Pu和電影深層特征向量Qi融合到矩陣分解模型中,與矩陣分解獲得的用戶潛在隱特征向量pu和電影潛在隱特征向量qi進行合并,對BiasSVD的損失函數進行修改。

(14)
其中,pu、Pu、qi、Qi均為k維向量;μ為整體評分偏差,是所有評分的全局平均值;bu為用戶評分偏置,bi為電影評分偏置。
LM-SVD模型的損失函數在式(9)的基礎上進行改進,最終如式(15)所示:
‖Qi‖2+‖pu‖2+‖qi‖2+
‖bu‖2+‖bi‖2)
(15)
LM-SVD算法訓練和參數優化的過程總結如下,通過最小化損失函數訓練模型。
算法:LM-SVD推薦算法。
輸入:用戶電影評分矩陣R,用戶特征數據M,電影特征數據N,用戶和電影特征向量維度為k。
步驟1:劃分數據集為訓練集、驗證集及測試集。
步驟2:訓練提取用戶深層特征向量Pu。
(1)用戶特征數據預處理,并通過嵌入層轉化為稠密向量。
(2)嵌入層后輸入MLP中,需要確定的參數有激活函數、隱藏層層數、隱藏層神經元數等。訓練得Pu。
步驟3:訓練提取電影深層特征向量Qi。
(1)電影特征數據預處理,并通過嵌入層轉化為稠密向量。
(2)嵌入層后輸入MLP中,需要確定的參數有激活函數、隱藏層層數、隱藏層神經元數等。訓練得電影屬性特征向量。
(3)將電影標題文本數據輸入LSTM中,需要確定的參數有LSTM層數、隱藏層神經元數等。訓練得電影文本特征向量。
(4)拼接屬性特征和文本特征,再通過一層全連接層,得電影深層特征向量Qi。
步驟4:將Pu,Qi融入BiasSVD模型,計算預測評分,最小化損失函數。需要調整的參數有正則化系數λ、學習率α等。
(2)根據式(15)計算損失函數Loss。
(3)根據式(16)計算均方根誤差RMSE。
(4)迭代訓練模型直到達到最大迭代次數或者RMSE值小于閾值。
(1)實驗數據集。
該文采用的實驗數據集是電影推薦研究領域常用的公開數據集MovieLens-1M和MovieLens-100K,來源于(https://grouplens.org/datasets/movielens)。另通過爬蟲從IMDB(https://www.imdb.com/)獲取電影上映年份、電影演員等信息對數據集進行補充。補充之后兩個數據集中都包含了用戶電影評分數據、電影信息數據以及用戶信息數據。兩數據集的基本信息如表1所示。

表1 兩實驗數據集基本信息
需對原始數據集進行數據預處理,從三個數據集中獲取需要的字段,并將各非數值特征字段轉換為數字。具體處理方式如下:
電影信息數據需要用到電影ID、電影類別、上映年份、電影演員、電影標題五個字段。上映年份字段需把各年份區間映射為0到7的數字。電影類別字段需要將全部的電影類別組成一個字符串到數字的映射字典,之后再把每部電影的類別字段轉換成等長的數字列表。電影標題字段首先創建標題中詞匯文本到數字的映射字典,然后將標題句子轉換成詞匯對應的等長數字列表。電影演員字段的處理方式同電影類別。用戶信息數據需要用到用戶ID,性別,年齡,職業四個字段。性別字段需把兩種性別字符映射為0和1,年齡字段則要把各年齡區間映射為0到6的數字。用戶電影評分數據需要用到用戶ID,電影ID,評分三個字段,這三個字段無需特殊的處理。
(2)實驗評價指標。
推薦算法的質量主要體現在其推薦準確性。該文主要度量推薦算法預測評分的準確度,以均方根誤差(root mean squared error,RMSE)為評估指標。RMSE衡量的是預測評分值與實際評分值之間的偏差。其值越小,則評分預測準確度越高,推薦算法質量越好。RMSE的計算公式如式(16)所示:
(16)

3.2.1 參數實驗
將數據集隨機分為3個部分,分別為訓練集(80%)、驗證集(10%)和測試集(10%)。采用五折交叉驗證法進行參數選擇。由于模型涉及的參數較多,這里只展示一些主要參數的調優實驗結果。實驗關注的參數主要有:用戶、電影特征向量維度k;正則化項系數λ。
經過反復實驗,其余參數設置如下:迭代次數epoch=10,學習率α=0.001,訓練迭代的批次樣本數量Batch_Size=256。其他深度學習階段參數設置在2.3節中闡述。
(1)用戶、電影特征向量維度k。
如式(14),深度學習階段獲得的用戶、電影深層特征向量Pu、Qi,以及矩陣分解階段獲得的用戶、電影潛在特征向量pu、qi,維度均為k。當其他參數固定時,調整特征向量維度k,取值范圍為[40,50,60,70,80]。由表2可知,隨著k的增加,LM-SVD算法的RMSE值在兩數據集上均呈現先減小后增大的趨勢。當k增加時,模型學習到了更多用戶和電影的隱藏特征,使得預測準確度提高。但當k超過一定范圍時,模型的泛化能力有所下降,使得RMSE值增加。在MovieLens-1M數據集上,當k為50時,算法的RMSE值最小,為0.847 9。在MovieLens-100K數據集上,當k為60時,取得最小RMSE值,為0.907 2。

表2 特征向量維度k對算法RMSE值的影響
(2)正則化項系數λ。
正則化項系數λ的取值范圍為[0.02,0.04,0.06,0.08,0.10]。由表3可知,隨著正則化項系數λ的增加,LM-SVD算法的RMSE值在兩數據集上呈現先減小后增大的趨勢。當λ為0.04時,算法在兩數據集上的RMSE值均達到最小。MovieLens-1M的RMSE為0.847 8,MovieLens-100K的RMSE為0.907。

表3 正則化項系數λ對算法RMSE值的影響
根據上述參數實驗結果,在MovieLens-1M數據集上,LM-SVD算法的最優參數組合為:k=50,λ=0.04;在MovieLens-100K數據集上,LM-SVD算法的最優參數組合為:k=60,λ=0.04。
3.2.2 對比實驗
為了客觀驗證文中算法的推薦效果,將保持最優參數組合條件下的LM-SVD算法與表4中的3個算法進行對比。

表4 對比算法
接著,在MovieLens-1M,MovieLens-100K數據集上對四種算法的評分預測準確度進行測試。以RMSE作為評測指標,對比結果如表5所示。

表5 對比實驗結果
如表5所示,文中提出的LM-SVD算法在兩個數據集上表現出的電影評分預測準確度均優于三種對比算法。在MovieLens-1M數據集上,LM-SVD算法的RMSE值比DN-CBR、BiasSVD、ConvMF分別下降2.68%,1.73%,0.64%。在MovieLens-100K數據集上,LM-SVD算法的RMSE值比DN-CBR、BiasSVD、ConvMF分別下降3.13%,1.29%,0.70%。由上述實驗結果可得出以下結論:
LM-SVD算法的表現優于BiasSVD矩陣分解、DN-CBR深度神經網絡和ConvMF深度矩陣分解,證明將深度學習和矩陣分解進行融合,可以通過融入用戶、電影屬性特征等輔助信息來緩解原有評分矩陣的數據稀疏性問題,從而提升電影評分預測準確度。且效果好于單純的深度學習評分預測模型。相對于僅僅利用電影描述等文本信息作為輔助信息的ConvMF算法,文中提出的算法在用戶和電影特征提取方面更加充分,優化了評分預測效果。
文中將電影推薦作為研究對象,針對矩陣分解推薦算法存在的數據稀疏性、冷啟動和特征提取不充分等問題,將深度學習和矩陣分解相融合,提出LM-SVD推薦算法。首先利用MLP和LSTM的組合模型學習用戶和電影的深層特征表示。之后將深層特征融入到BiasSVD矩陣分解算法中,改進SVD的損失函數計算方式,緩解了評分矩陣的數據稀疏性,使得特征提取更加充分。在MovieLens的兩個數據集上進行的算法對比實驗表明,該算法在電影評分預測方面的表現優于三種對比算法,表現出較好的推薦性能。模型充分利用了用戶和電影的屬性信息、文本信息以及用戶電影評分信息,有效地緩解了傳統矩陣分解中存在的數據稀疏性和冷啟動問題。但該模型沒有考慮用戶興趣偏好隨時間的變化,下一步的研究可以考慮加入時間因子。