徐彬源,高茂庭
(上海海事大學(xué)信息工程學(xué)院,上海 201306)
推薦算法;門控循環(huán)單元;數(shù)據(jù)降維;長期狀態(tài);短期狀態(tài)
隨著互聯(lián)網(wǎng)技術(shù)的快速發(fā)展以及智能移動終端產(chǎn)品的普及,人人皆是網(wǎng)民的時代即將來臨,手機(jī)網(wǎng)民指數(shù)不斷攀升,互聯(lián)網(wǎng)中的數(shù)據(jù)爆發(fā)式增長,而信息處理能力遠(yuǎn)遠(yuǎn)跟不上信息增長的速度,導(dǎo)致出現(xiàn)了信息過載問題。為有效解決該問題,推薦系統(tǒng)[1]誕生了,而推薦系統(tǒng)中最關(guān)鍵的部分是推薦算法,推薦算法的好壞直接決定了推薦系統(tǒng)的優(yōu)劣。目前主流的推薦算法[2]包括基于內(nèi)容的推薦、基于協(xié)同過濾的推薦以及混合推薦。
其中,最成功的算法是協(xié)同過濾推薦算法[3],被廣泛應(yīng)用在各大推薦系統(tǒng)中。其基本原理非常簡單,就是根據(jù)用戶的行為歷史數(shù)據(jù)分析用戶對項目的興趣偏好,發(fā)現(xiàn)用戶或項目之間的相似度,然后基于這些相似度對用戶進(jìn)行推薦。協(xié)同過濾推薦又分為基于用戶的推薦、基于項目的推薦以及基于模型的推薦[4]。但隨著用戶數(shù)和項目數(shù)的劇增,前兩個算法的計算復(fù)雜度太大,并且受到數(shù)據(jù)稀疏性的影響較大?;谀P偷耐扑]能有效緩解上述問題,并做出更好的推薦。因此,基于模型的推薦算法逐漸成為推薦領(lǐng)域中的研究熱點?;谀P偷耐扑]算法中最關(guān)鍵的一步就是用戶模型的建立,因此很多流行的建模技術(shù)都可以應(yīng)用在推薦算法上,如聚類[5]、分類、關(guān)聯(lián)規(guī)則、矩陣分解[6]等。后續(xù)學(xué)者利用這些建模技術(shù)提出了很多基于模型的改進(jìn)推薦算法。
文獻(xiàn)[5]針對傳統(tǒng)協(xié)同過濾中沒有考慮用戶偏好的問題,利用聯(lián)合聚類技術(shù)結(jié)合用戶屬性相似性和用戶評分相似性來分析用戶偏好,采用了用戶屬性信息有效緩解了數(shù)據(jù)稀疏性,提高了評分預(yù)測準(zhǔn)確度。文獻(xiàn)[6]在基于矩陣分解的推薦算法中引入標(biāo)簽構(gòu)建向量,作為對用戶興趣建模和項目特征表示的補(bǔ)充,提升了推薦精度。文獻(xiàn)[7]在矩陣分解模型中引入用戶屬性構(gòu)建用戶屬性特征向量,計算新用戶與舊用戶之間的相似度,以解決新用戶冷啟動問題。雖然上述算法在一定程度上提高了算法預(yù)測準(zhǔn)確度,考慮了用戶屬性和標(biāo)簽等數(shù)據(jù)源,但是缺乏對用戶和電影的長短期狀態(tài)的考慮。
本文針對電影領(lǐng)域傳統(tǒng)推薦算法中的上述問題,提出基于GRU網(wǎng)絡(luò)和矩陣分解的混合推薦算法。首先,嚴(yán)格按照評分時間順序劃分?jǐn)?shù)據(jù)集,得到用戶序列和電影序列,針對序列中高維稀疏的向量,使用自編碼器對其進(jìn)行降維處理,然后使用兩個GRU(Gated Re?current Unit)[8]網(wǎng)絡(luò)處理時間序列數(shù)據(jù)以得到用戶和電影短期內(nèi)隨時間變化的狀態(tài)特征,使用矩陣分解算法捕獲用戶和電影長期內(nèi)固定狀態(tài)特征,最后用線性回歸模型結(jié)合長期狀態(tài)的內(nèi)積和短期狀態(tài)的內(nèi)積的線性加權(quán)結(jié)果作為該混合算法的最終預(yù)測評分,并在多個公開數(shù)據(jù)集上通過與傳統(tǒng)推薦算法的對比實驗,驗證本文提出的算法在預(yù)測評分的有效性和準(zhǔn)確度。
選擇GRU網(wǎng)絡(luò)來處理時間序列數(shù)據(jù),是因為GRU網(wǎng)絡(luò)是一種改進(jìn)的循環(huán)神經(jīng)網(wǎng)絡(luò)[9],并且解決了循環(huán)神經(jīng)網(wǎng)絡(luò)中的梯度消失問題,實現(xiàn)了更長距離的傳播。因此,GRU網(wǎng)絡(luò)能夠從時間序列數(shù)據(jù)中記憶歷史時刻的信息,并基于歷史信息和當(dāng)前時刻的輸入來預(yù)測下一時刻即將發(fā)生的行為。
GRU控制信息流動原理是,利用門控機(jī)制控制當(dāng)前輸入、歷史記憶等狀態(tài)信息在當(dāng)前時間步做出預(yù)測。圖1給出了GRU模型的結(jié)構(gòu)。從圖中可以看出,GRU的結(jié)構(gòu)比較見到那,只有兩個門:重置門(reset gate)和更新門(update gate),即rt和zt。從信息流動的角度來說,重置門控制如何將新的輸入信息與前一時刻的狀態(tài)信息相結(jié)合;更新門控制前一時刻的狀態(tài)信息保存到當(dāng)前狀態(tài)中的量。
圖1 GRU結(jié)構(gòu)圖
上圖1中,xt表示時刻t處GRU單元的輸入,ht表示t時刻的狀態(tài)信息,表示當(dāng)前記憶內(nèi)容。
(1)更新門
在時間步長t處,更新門的計算公式如下所示,其中Wz表示更新門的權(quán)重:
對輸入向量xt和前一時刻t-1隱藏狀態(tài)ht-1分別做線性變換,通過Sigmoid激活函數(shù)將兩部分的信息相加的結(jié)果壓縮到0到1之間。更新門決定前一時刻的狀態(tài)信息和當(dāng)前時刻的狀態(tài)信息繼續(xù)傳遞到未來的量。
(2)重置門
在時間步長t處,重置門的計算公式如下所示,其中Wr表示重置門的權(quán)重:
與更新門類似,先對xt與ht-1分別做線性變換,然后通過Sigmoid激活函數(shù)輸出0到1之間的激活值。重置門決定了前一時刻的狀態(tài)信息要被遺忘的量。
(3)當(dāng)前記憶內(nèi)容
在當(dāng)前記憶內(nèi)容的計算中,將重置門直接應(yīng)用于前一時刻的狀態(tài)信息上,以存儲前一時刻隱藏層的信息,計算公式如下,其中Wh?表示當(dāng)前時刻輸入數(shù)據(jù)生成當(dāng)前狀態(tài)信息的權(quán)重:
將前一時刻的狀態(tài)信息ht-1與重置門rt做對應(yīng)元素的乘積,這一步驟確定了前一時刻所要保留的信息,然后對該乘積結(jié)果rt?ht-1和當(dāng)前時刻的輸入xt做線性變換,通過tanh激活函數(shù)將兩部分相加的結(jié)果映射到-1到1之間,以得到當(dāng)前記憶內(nèi)容h?t。
(4)當(dāng)前時間步的最終記憶
當(dāng)前時間步的最終記憶ht將保留當(dāng)前隱藏層的狀態(tài)信息并繼續(xù)傳遞到下一時刻。在這一步,使用更新門來決定當(dāng)前記憶內(nèi)容和前一時刻的狀態(tài)信息ht-1要保留的量,計算公式如下所示:
(1-zt)?ht-1表示前一時刻的信息保留到當(dāng)前時刻最終記憶的量,zt?表示當(dāng)前記憶內(nèi)容保留到當(dāng)前時刻最終記憶的量,兩個部分的相加結(jié)果作為GRU最終的輸出內(nèi)容。本文使用ht=GRU(ht-1,zt)來表示GRU的前向計算過程
GRU網(wǎng)絡(luò)的參數(shù)更新方式采用BPTT算法[10]進(jìn)行更新。
本文使用兩個GRU網(wǎng)絡(luò)模型分別解決用戶和電影狀態(tài)的時間演變,獲取短期內(nèi)用戶和電影的時間狀態(tài),并將用戶和電影時間狀態(tài)的內(nèi)積作為最終預(yù)測評分。其中用戶的狀態(tài)變化取決于用戶先前對哪些電影進(jìn)行評分,同樣的,電影的狀態(tài)變化依賴于前一段時間內(nèi)對其進(jìn)行評分的用戶。
首先,將評分?jǐn)?shù)據(jù)嚴(yán)格按照時間戳進(jìn)行劃分,以得到用戶序列和電影序列。但序列中的向量都是高維稀疏的,不利于模型的訓(xùn)練。然后,利用自編碼器的編碼過程對數(shù)據(jù)進(jìn)行降維,將降維后的低維稠密向量作為GRU網(wǎng)絡(luò)的直接輸入,并將預(yù)訓(xùn)練期間自編碼器[11]隱藏層節(jié)點數(shù)和權(quán)重作為輸入嵌入層(即Embedding層)的節(jié)點數(shù)和權(quán)重。最后,通過GRU網(wǎng)絡(luò)能夠記憶歷史信息,并基于最新輸入對下一步的評分行為做出預(yù)測。
圖2給出了基于GRU網(wǎng)絡(luò)的推薦模型完整結(jié)構(gòu)。
圖2 基于GRU網(wǎng)絡(luò)的推薦模型
其中,{xi,0,...,xi,t-1,xi,t}和{xj,0,...,xj,t-1,xj,t}分別表示原始用戶序列和電影序列,包含了0到t時刻的原始用戶i的向量和電影j的向量,Embedding層表示由自編碼器預(yù)訓(xùn)練得到的模型的隱藏層,以實現(xiàn)數(shù)據(jù)降維,{yi,0,...,yi,t-1,yi,t}和{yj,0,...,yj,t-1,yj,t}分別表示由Embedding
層降維后直接用于GRU網(wǎng)絡(luò)輸入的用戶序列和電影序列,{ui,0,...,ui,t-1,ui,t}和{uj,0,...,uj,t-1,uj,t}分別表示由GRU網(wǎng)絡(luò)對輸入序列的處理得到的用戶和電影的時間狀態(tài),{ri,0,...,ri,t-1,ri,t}表示0到t時刻對下一時刻用戶i對電影j的評分。
給定M個電影,N個用戶的數(shù)據(jù)集,則xi,t∈RM(xj,t∈RN)表示給定用戶i(或電影j)在時間t的評分向量,=k表示給定用戶i在時間步長t對電影j的評分為k,=k表示給定電影j在時間步長t處被用戶i的評分為k,否則對應(yīng)元素值為0。由上述內(nèi)容可知,用戶和電影時間狀態(tài)的計算公式如下所示:
將三種單礦物用瑪瑙研缽研至-5 μm,采用D8Advance/Bruker型X射線衍射儀進(jìn)行定量分析,分析結(jié)果及XRD衍射圖分別見表1和圖1。
將用戶狀態(tài)和電影狀態(tài)的內(nèi)積作為評分的估計值,計算公式如下:
<·>表示兩個向量之間的內(nèi)積。對GRU網(wǎng)絡(luò)的輸出層做了適當(dāng)改進(jìn),我們不使用激活函數(shù)[12],只做簡單的線性加權(quán),其中,和分別是ui,t和mj,t的線性函數(shù)。即有:
其中,Wuser、Wmovie和buser、bmovie分別表示 GRU 的輸出到輸出層用戶和電影的權(quán)重和偏置。用θ表示模型中所有需要學(xué)習(xí)的參數(shù),即Wrx、Wrh、Wzx、Wzh、Wh?x、Wh?h、Wuser、buser、Wmovie、bmovie。因此,基于 GRU 網(wǎng)絡(luò)的推薦模型的目標(biāo)函數(shù)如下所示:
其中,Itrain表示訓(xùn)練集中觀察到的(用戶、電影、時間戳)的元組的集合,R是關(guān)于參數(shù)的L2正則化項。訓(xùn)練過程中,使用Adam優(yōu)化器來優(yōu)化訓(xùn)練模型,以便模型的目標(biāo)函數(shù)以最快速度達(dá)到最小,得到最優(yōu)參數(shù)。
使用矩陣分解算法對用戶和電影的長期狀態(tài)進(jìn)行建模?;诰仃嚪纸獾耐扑]算法的原理很簡單,就是將用戶-項目評分矩陣分解為用戶因子矩陣和項目因子矩陣,通過兩個矩陣相乘,得到原始評分矩陣中的缺失值,進(jìn)而對用戶進(jìn)行推薦。對于給定M個電影,N個用戶的評分矩陣RN×M,對R做矩陣分解的結(jié)果如下所示:
其中,K表示潛在因子的個數(shù),P和Q分別表示用戶和電影與潛在因子之間的關(guān)系,R?N×M表示由兩個矩陣P和Q生成的預(yù)測評分矩陣。矩陣分解的目標(biāo)是使預(yù)測評分矩陣和原始評分矩陣中的觀察值之間的誤差最小,即如下公式:
使用梯度下降法求得上述損失函數(shù)的參數(shù)變量的最優(yōu)值。
綜合前兩節(jié)的內(nèi)容,綜合考慮長期和短期狀態(tài)對評分行為的影響,并針對數(shù)據(jù)維度高的問題,提出一種基于GRU網(wǎng)絡(luò)和矩陣分解的混合推薦算法。圖3給出了混合模型的結(jié)構(gòu)。
圖3 GRU網(wǎng)絡(luò)和矩陣分解的混合推薦模型
由上述內(nèi)容,使用混合加權(quán)的方式將兩個訓(xùn)練好的模型的預(yù)測評分結(jié)合起來以作為混合模型的預(yù)測評分,兩個基礎(chǔ)預(yù)測評分的權(quán)重通過線性回歸模型求解得出。最終預(yù)測評分的計算公式如式(17),其中表示基于矩陣分解的預(yù)測評分,表示基于GRU的預(yù)測評分,WMF和WGRU分別表示和在最終預(yù)測評分中所占的權(quán)重。
用L上述線性回歸模型的損失函數(shù),則L的計算公式如下所示:
使用梯度下降法[13]確定式(17)中的權(quán)重WMF和WGRU,進(jìn)而生成最終的預(yù)測評分?;旌霞訖?quán)推薦算法綜合循環(huán)神經(jīng)網(wǎng)絡(luò)和矩陣分解各自的優(yōu)勢,綜合考慮長期和短期狀態(tài),提高評分預(yù)測準(zhǔn)確度。
為了研究時間動態(tài)的有效性建模,在Netflix比賽和IMDB數(shù)據(jù)集上評估本文模型。IMDB數(shù)據(jù)集包含1998年7月至2013年9月期間收集的1429600個評分,完整Netflix數(shù)據(jù)集包含1988年11月至2005年12月期間收集的100400000個評分,其中6個月Netf?lix數(shù)據(jù)包含2005年6月至2005年12月期間收集的15800000個評分。每個數(shù)據(jù)點是一個時間戳粒度為1天的(用戶id,項目id,時間戳,評分)元組。根據(jù)時間分割數(shù)據(jù)以模擬需要預(yù)測未來評分的實際情況。整個數(shù)據(jù)集都被分割成訓(xùn)練集和測試集。詳細(xì)數(shù)據(jù)如表1所示。
表1 實驗數(shù)據(jù)集的詳細(xì)數(shù)據(jù)
實驗中使用具有20個隱藏神經(jīng)元,40維輸入嵌入和20維動態(tài)狀態(tài)的單層GRU。本文模型在Tensor?Flow[14]上實現(xiàn),這是一個開源的深度學(xué)習(xí)框架。
均方根誤差(RMSE)和平均絕對誤差(MAE)均是度量預(yù)測誤差的指標(biāo),其中,RMSE對大誤差比較敏感,MAE對小誤差的積累比較敏感。由于RMSE加大了對預(yù)測不準(zhǔn)的用戶物品評分的懲罰,對系統(tǒng)的測評更加苛刻,實驗中選擇RMSE評估算法精度。對于完整的Netflix和IMDB數(shù)據(jù)集,采用2個月的時間步長粒度,對于六個月的Netflix數(shù)據(jù)集,采用7天的時間步長粒度。每個時期之后,計算RMSE。在驗證集上給出最佳結(jié)果的模型上,計算在測試集上的RMSE。
為了評估本文提出模型(R-GRUMF)的性能,將其與PMF、TimeSVD、AutoRec進(jìn)行對比實驗。實驗結(jié)果如表2所示。
表2 各模型在數(shù)據(jù)集上的RMSE
從表2可以看出,R-GRUMF模型的RMSE比所有對比模型的RMSE都要低,表示該模型能有效降低預(yù)測誤差,并且在越稀疏的數(shù)據(jù)集上,其RMSE的差距越大,說明該模型可以在一定程度上緩解數(shù)據(jù)稀疏性對模型預(yù)測評分的影響。雖然對比方法在不同數(shù)據(jù)集之間排名忽前忽后,但是本文提出的模型在所有數(shù)據(jù)集中的預(yù)測誤差都是最低的,說明該模型有很好的健壯性,適應(yīng)不同的數(shù)據(jù)集。
本文針對電影領(lǐng)域中傳統(tǒng)推薦算法中數(shù)據(jù)維度高,缺乏考慮用戶和電影長短期狀態(tài)的問題,利用GRU網(wǎng)絡(luò)在處理時間序列數(shù)據(jù)上的優(yōu)勢,捕獲短期狀態(tài),利用矩陣分解對長期用戶和電影之間的交互評分行為的建模分析,得到長期狀態(tài),綜合考慮兩種狀態(tài)對預(yù)測評分的影響,提出一種基于GRU網(wǎng)絡(luò)和矩陣分解的混合推薦算法,緩解了數(shù)據(jù)稀疏性問題,提高了評分預(yù)測準(zhǔn)確度。
本文嘗試將GRU網(wǎng)絡(luò)用于推薦,并取得不錯的效果。但是整個推薦過程中,也僅僅使用了評分及時間戳信息,目前推薦系統(tǒng)中還有很多更加復(fù)雜的數(shù)據(jù)源可供研究,如用戶評論、電影的音頻及圖像等信息都可以被深度學(xué)習(xí)等技術(shù)利用起來,以建立更完善的用戶個人畫像,提高推薦精度。