王藝平 馮旭鵬 劉利軍 黃青松,3
1(昆明理工大學(xué)信息工程與自動化學(xué)院 云南 昆明 650500)2(昆明理工大學(xué)教育技術(shù)與網(wǎng)絡(luò)中心 云南 昆明 650500)3(云南省計算機技術(shù)應(yīng)用重點實驗室 云南 昆明 650500)
隨著在線社交網(wǎng)絡(luò)系統(tǒng)的盛行,微博為人們提供了一個十分開放的溝通渠道來閱讀、評論、引用、社交,其包含了基于文本的微博條目和配置文件、圖片、數(shù)據(jù)及多媒體等大量有價值的資源[1]。面對海量級別的信息,如何快速定位用戶特征,如何有效地向用戶推薦他們感興趣的資源和如何基于歷史數(shù)據(jù)探索過去從未或很少發(fā)現(xiàn)的特征,利用深度學(xué)習(xí)技術(shù)來改進博文的個性推薦是一個很好的解決方案。
本文通過對現(xiàn)有推薦模型的局限性進行分析研究,結(jié)合傳統(tǒng)機器學(xué)習(xí)淺層模型與深度模型各自的優(yōu)點,提出了一種傳統(tǒng)淺層線性模型與深度網(wǎng)絡(luò)模型相結(jié)合的推薦排序方法。首先利用基于稀疏自編碼器的主題提取方法對博文語料進行主題提取,在百萬級的博文數(shù)據(jù)中取得數(shù)百個候選集。接著,在數(shù)百個候選集的基礎(chǔ)上,一方面獲取用戶特征等信息,采用交叉特征法處理特征,輸入到淺層模型當(dāng)中。另一方面,只需少量的特征工程,通過映射的方法,處理低維稠密特征得到密集矢量后,輸入到以門循環(huán)單元為核心的深度模型。最后,處理輸出結(jié)果并得到博文項的推薦排序。實驗表明,本文的方法分別單一邏輯回歸模型、單一深度神經(jīng)網(wǎng)絡(luò)模型和寬深度模型等進行對比,不僅在短文本數(shù)據(jù)特征稀疏的情況下使博文推薦的準(zhǔn)確率得到了提升,還在一定程度上提高了模型的訓(xùn)練和預(yù)測速度,具有更高的推薦效率。
近年來,微博社交網(wǎng)絡(luò)的個性化推薦服務(wù)發(fā)展迅速的與其他產(chǎn)品領(lǐng)域相結(jié)合,已經(jīng)經(jīng)歷了一個基本的范式轉(zhuǎn)變,使用深度學(xué)習(xí)已經(jīng)幾乎成為所有學(xué)習(xí)問題的通用解決方案[2]。本文博文推薦系統(tǒng)的縱覽如圖1所示,主要的研究工作是圖中推薦系統(tǒng)的排序部分。
圖1 推薦系統(tǒng)總覽
與現(xiàn)有工程中大量使用的矩陣分解方法相比[3],較少有研究是使用深度學(xué)習(xí)方法來做推薦服務(wù)的。針對傳統(tǒng)基于內(nèi)容的推薦系統(tǒng)中,用戶特征稀疏且難以獲取等問題,文獻[4]通過分析用戶的瀏覽記錄和搜索記錄,來豐富用戶特征等數(shù)據(jù)[5]。文獻[6]利用加入評論信息來緩解數(shù)據(jù)稀疏的問題。文獻[7]通過利用用戶特征、情境特征和項目特征等多源異構(gòu)數(shù)據(jù),提出了一種同時具有較高的記憶能力和泛化能力的模型,探索過去從未出現(xiàn)或很少發(fā)生的新特征組合,從而提升推薦項目的多樣性。針對微博博文的短文本特征和容易產(chǎn)生單詞稀疏、單詞同意等問題,文獻[8]提出了一個基于注意力機制的記憶網(wǎng)絡(luò)來進行博文的推薦。針對文本推薦中的上下文語義理解不明確等問題,文獻[9]采用GRU抓住會話中行為之間的依賴關(guān)系,對時間序列上的變化進行建模,輸入是具有1-N編碼的實際狀態(tài),輸出為每個項目的下一個會話的可能性。文獻[10]為了學(xué)習(xí)用戶的偏好以及更好地理解語義信息,采用利用循環(huán)神經(jīng)網(wǎng)絡(luò)RNN(Recurrent neural network)來學(xué)習(xí)用戶的隱表示?;谝陨涎芯抗ぷ鳎疚难芯堪l(fā)現(xiàn)現(xiàn)有推薦模型的限制和挑戰(zhàn)有:
1) 現(xiàn)有傳統(tǒng)的推薦方法嚴(yán)重依賴于有效的數(shù)據(jù)特征提取,通常面臨可擴展性不足的問題,使用深度學(xué)習(xí)方法能夠提高特征提取的質(zhì)量,且適合于大規(guī)模數(shù)據(jù)處理,將大大增強模型的推薦性能。
2) 由于深度模型過強的學(xué)習(xí)能力,博文中某類出現(xiàn)頻率較低的特征難以學(xué)習(xí)到有效的特征向量表示,存在過于泛化的問題。引入淺層模型如線性模型等可以對出現(xiàn)次數(shù)較少的特征進行較好地學(xué)習(xí)。
3) 現(xiàn)有的深度推薦模型未充分考慮到文本項上下文語義關(guān)系與隱表示。優(yōu)化模型的網(wǎng)絡(luò)結(jié)構(gòu),如利用RNN,推薦質(zhì)量會有較大提升。
4) 博文語料集數(shù)據(jù)量大,數(shù)據(jù)維度高,導(dǎo)致用戶端的博文推薦效率較低。因而,提升模型的推薦效率十分重要。
本文構(gòu)建的寬深度門循環(huán)聯(lián)合模型,主要結(jié)構(gòu)組成如圖2所示。
圖2 Wide & Deep-GRU層次結(jié)構(gòu)圖
非線性特征變換的廣義線性模型被廣泛用于稀疏輸入的大規(guī)模回歸、分類問題[11]。本文模型的淺層部分采用邏輯回歸方法,來預(yù)測用戶的相關(guān)特征與候選博文間能否建立關(guān)系,并能對出現(xiàn)次數(shù)較少的特征進行較好地學(xué)習(xí)。通過廣義的交叉特征轉(zhuǎn)換,來記憶特征是十分有效且可行的[7]。
邏輯回歸模型如下:
(1)
式中:將用戶特征集作為邏輯回歸分類作為輸入,x=[x1,x2,…,xd]是特征d的一組向量,特征集合包括原始輸入特征和組合特征。w=[w1,w2,…,wd]是模型的參數(shù)。
本文這樣定義交叉特征:
(2)
這里cki∈{0,1}是一個布爾值,如果第i個特征是第k個轉(zhuǎn)換φk的一部分,那么cki即為1,否則就是0。對于二進制特征,例如,有且僅當(dāng)組合特征全部成立才是1,否則就是0。本文利用交叉特征,不僅獲取到了二進制特征之間的交互,并且將非線性添加到了線性模型當(dāng)中[7]。
由于現(xiàn)有的深度網(wǎng)絡(luò)模型的相鄰層之間為全連接,但其單層的各個節(jié)點則為無連接,樣本的處理在每個時刻獨立,因而不能對其時間序列上的變化建模[12]。門限循環(huán)單元GRU(Gated Recurrent Unit)是一種更精細的RNN單位模型[12],它將門控制單元從3個減少到2個,模型更加簡單,既克服了梯度消失的缺點,又可以結(jié)合上下文語義學(xué)習(xí)博文的長期依賴信息,具有更高的效率。
本文的深度門循環(huán)部分,見圖2右邊部分。其核心是GRU層,并且在輸出結(jié)果層和最后一層之間添加額外的前饋層。將模型隱藏層的節(jié)點之間使用門循環(huán)單元連接起來,并控制其隱藏節(jié)點的輸出,這樣可以有效地建模特征在文本上下文時序的變化[12]。門循環(huán)單元如圖3所示。
圖3 GRU內(nèi)部結(jié)構(gòu)圖
(3)
更新門由以下提供:
zt=σ(Wzxt+Uzht-1)
(4)
(5)
最終的重置門由下式給出:
rt=σ(Wrxt+Urht-1)
(6)
每一個高維稀疏的分類特征首先轉(zhuǎn)換成低維實值向量,本文將其看作是一個映射向量,映射向量的維度通常是O(10)到O(100)。初始化映射向量,這些低維映射向量將送到正向通路的GRU的隱層中,權(quán)重參數(shù)在模型訓(xùn)練的過程中更新,使得最終的損失函數(shù)達到最小[7]。實驗表明,單層GRU網(wǎng)絡(luò)性能最優(yōu)。本文使用tanh函數(shù)作為輸出層的激活函數(shù),效果明顯優(yōu)于其他函數(shù)[9]。
聯(lián)合模型如圖2中間部分所示。本文組合淺層部分和深度門循環(huán)部分,使用聯(lián)合輸出結(jié)果并取對數(shù)的加權(quán)和作為預(yù)測值,然后將該加權(quán)和饋送到一個共同的損失函數(shù)進行聯(lián)合訓(xùn)練。小批量隨機優(yōu)化寬深度門循環(huán)聯(lián)合模型參數(shù),同時再反向傳播到模型的淺層和深度門循環(huán)部分。
聯(lián)合模型的預(yù)測函數(shù)是:
(7)
式中:Y是一個二分類標(biāo)簽,σ(·)是sigmoid功能函數(shù)。φ(x)是原始特征x的交叉特征轉(zhuǎn)換的結(jié)果,b是偏置項。Wwide是淺層部分的權(quán)重向量,Wgru是應(yīng)用在最終激活值a(lf)上的權(quán)重向量。最終,將單一候選項得到的概率值處理后,進行排序得到推薦排序項。
在模型訓(xùn)練期間,輸入層接收預(yù)處理好的訓(xùn)練數(shù)據(jù)集。淺層部分的輸入特征包括由用戶離散特征以及搜索關(guān)鍵詞構(gòu)成的交叉特征。模型的深度門循環(huán)部分,為每個特征學(xué)習(xí)一個32維的嵌入向量,再將所有特征的嵌入向量與連續(xù)特征連接起來,產(chǎn)生大約為1 200維的密集矢量[7]。隨后,將連接密集矢量饋送到門循環(huán)單元層中,最終輸出為邏輯單元。模型框架如圖4所示。
圖4 推薦模型框架
本文的聯(lián)合訓(xùn)練不同于組合。在一個組合中,單獨的模型是分開訓(xùn)練而不知道淺層和深度部分的關(guān)聯(lián),他們的預(yù)測僅在推斷的時候組合而不是在訓(xùn)練的時候。然而,本文的聯(lián)合訓(xùn)練在訓(xùn)練時考慮淺層、深度門循環(huán)部分以及其總和的權(quán)重,同時優(yōu)化所有的參數(shù)[7]。且對于聯(lián)合訓(xùn)練,淺層部分只需要通過較少的交叉特征來補充深度門循環(huán)部分的不足即可。
為了對整個Wide & Deep-GRU模型訓(xùn)練,本文定義一個合理的誤差損失函數(shù),使用FTRL(Follow-the-regularized-leader)算法[13]和L1正則化作為模型線性部分的優(yōu)化器,最終利用AdaGrad算法[14]來優(yōu)化模型的深度門循環(huán)部分。對于分類問題,一般采用交叉熵(cross-entropy)作為其損失函數(shù)。其公式如下:
(8)
本文設(shè)計實驗來驗證Wide & Deep-GRU模型推薦性能的高效性和準(zhǔn)確性。在數(shù)據(jù)準(zhǔn)備階段,使用新浪微博官方API和Pyquery爬蟲框架,獲取2017年6月部分真實用戶的完整日志數(shù)據(jù),進而生成數(shù)據(jù)集。數(shù)據(jù)集由用戶的微博ID、屬性特征和搜索關(guān)鍵詞以及其一個月內(nèi)發(fā)布、轉(zhuǎn)發(fā)、評論、贊和收藏的微博等特征信息組成。
本文的實驗數(shù)據(jù)隨機選取52×103個用戶節(jié)點,獲得的數(shù)據(jù)以json格式存儲。再將預(yù)處理過的數(shù)據(jù)集按6∶2∶2的比例,分別用來做訓(xùn)練數(shù)據(jù)集,驗證數(shù)據(jù)集以及測試數(shù)據(jù)集。
本文實驗對博文進行了如下預(yù)處理:
(1) 采用停用詞字典的方法,來去除停用詞等對主題沒有貢獻的內(nèi)容。
(2) 去除微博中的“@用戶名”。
(3) 由于博文長度過短,不能夠表現(xiàn)準(zhǔn)確的主題信息[15]。于是去掉少于20字的微博。經(jīng)處理后的微博共計4 716 452條。
本文的模型使用Google的開源深度學(xué)習(xí)框架TensorFlow實現(xiàn)。為了兼顧訓(xùn)練速度和模型的性能,模型超參數(shù)最終確定為:深度門循環(huán)部分將最小批處理尺寸設(shè)置為20,為每個特征學(xué)習(xí)一個32維的嵌入向量,一個隱藏單元內(nèi)設(shè)置64個神經(jīng)元。將模型訓(xùn)練的迭代次數(shù)設(shè)置為200。為了避免模型訓(xùn)練過擬合,在輸入層中增加dropout操作[15],并將dropout丟棄率設(shè)置為0.2。每次取100個數(shù)據(jù)作為一個批次進行訓(xùn)練。
本文實驗推薦性能的評測標(biāo)準(zhǔn)將使用推薦質(zhì)量和推薦效率來定義。推薦質(zhì)量使用準(zhǔn)確率(Precision)、召回率(Recall)、F值(F-Measure)作為衡量指標(biāo)[17]。推薦效率通過對用戶進行個性化推薦時,模型的訓(xùn)練和預(yù)測速度來衡量[12],即分別在數(shù)據(jù)訓(xùn)練集和數(shù)據(jù)預(yù)測集中,采用單條博文平均訓(xùn)練時間和預(yù)測時間來進行比較,并與其他模型的訓(xùn)練和預(yù)測速度比較。
對于用戶u,Ru為模型推薦結(jié)果的博文集合,Lu作為用戶u喜歡的博文集合,由此將推薦準(zhǔn)確率、召回率和F值為:
(9)
(10)
(11)
本文將用戶有操作交互行為的微博,比如用戶轉(zhuǎn)發(fā)、評論、贊和收藏的微博等都認為是用戶喜歡的微博。在實驗過程中,寬深度門循環(huán)聯(lián)合模型最終通過迭代式的訓(xùn)練得到。在每一次迭代過程中,模型將根據(jù)訓(xùn)練樣本集中的數(shù)據(jù)進行調(diào)整,對于本文模型來說,需要成千上萬次迭代才能最終收斂。
本文的實驗,通過隨機劃分不同的訓(xùn)練集,利用包含本文模型在內(nèi)的4種不同的推薦方法,分別進行模型參數(shù)的訓(xùn)練學(xué)習(xí),在不同的測試集上進行實驗,對比驗證它們的推薦性能。
下面簡要給出其他三種對比方法的介紹:
(1) 單一邏輯回歸(Wide)模型:將推薦預(yù)測問題轉(zhuǎn)為二分類問題,判定一個用戶對這條博文點擊與否概率為多少,邏輯函數(shù)利用sigmoid函數(shù)。
(2) 單一深度神經(jīng)網(wǎng)絡(luò)(Deep)模型:為每個分類特征學(xué)習(xí)為嵌入向量。再將其饋送到普通深度網(wǎng)絡(luò)隱層中,最終輸出為邏輯單元。
(3) 寬深度(Wide & Deep)模型[7]:將上述兩模型融合,淺層部分的輸入特征作為交叉特征,將記憶和泛化聯(lián)合起來。
本文隨機抽取數(shù)據(jù)集中200位用戶,其一天中有交互操作行為的全部博文中,只要兩條博文之間的時間差大于一小時,本文就認為這兩條博文不屬于用戶的同次瀏覽行為,遂進行一次推薦,得到所有用戶的推薦質(zhì)量,即結(jié)果的準(zhǔn)確性、召回率和F值。
圖5和圖6通過改變不同的參數(shù),一同表明了模型算法的推薦質(zhì)量,分別展示了隨用戶人數(shù)和推薦列表長度的變化,推薦質(zhì)量的衡量指標(biāo)即準(zhǔn)確率、召回率和F值的改變。由圖5可以得到,隨著用戶人數(shù)的增多,4種模型的用戶特征更加接近于用戶的真實特征,其結(jié)果的準(zhǔn)確率、召回率和F值均呈增長趨勢。對于不同大小的訓(xùn)練集,Wide、Deep、Wide & Deep、Wide & Deep-GRU這4種模型方法的最高準(zhǔn)確率分別為0.726、0.722、0.728和0.742。隨著數(shù)據(jù)的增多,Wide & Deep-GRU模型的方法能從這些數(shù)據(jù)中學(xué)到的特征越多,進而越能更加準(zhǔn)確的推薦博文[17-18]。由圖6可以得到,隨著推薦列表長度的增長,模型準(zhǔn)確率下降,召回率在升高,而當(dāng)推薦列表長度為10的時候,F(xiàn)值最高。即在推薦列表增加到一定長度后,評分高的微博基本都已包含在推薦列表中,推薦列表長度的增加對推薦質(zhì)量的影響并不會再增加。由圖可見,Wide & Deep-GRU模型綜合效果最好。
圖5 隨用戶人數(shù)變化的模型推薦質(zhì)量對比圖
圖6 隨列表長度變化的模型推薦質(zhì)量對比圖
3.4.2 推薦效率
本文聯(lián)合模型的推薦效率設(shè)計使用推薦過程中的產(chǎn)生單位時間開銷來衡量。即分別在數(shù)據(jù)訓(xùn)練集和數(shù)據(jù)預(yù)測集中,采用單條博文平均訓(xùn)練時間和預(yù)測時間來進行比較,并與其他模型的訓(xùn)練和預(yù)測速度比較。從表1中可以看出,本文提出的Wide & Deep-GRU模型,由于其深度模型部分更加簡單,克服了梯度消失的缺點,又可以學(xué)習(xí)博文的長期依賴信息,具有更高的效率,在各個數(shù)據(jù)集中平均訓(xùn)練時間和預(yù)測時間都明顯小于Wide & Deep模型。具體的,當(dāng)用戶數(shù)為150,推薦長度為10時,Wide & Deep-GRU模型的訓(xùn)練速度平均是Wide & Deep模型的1.917倍,在測試集上的預(yù)測速度平均是Wide & Deep模型的1.686倍。
表1 推薦效率對比評估
本文通過利用深度學(xué)習(xí)方法構(gòu)建了寬深度門循環(huán)聯(lián)合模型(Wide & Deep-GRU)模型并對其訓(xùn)練學(xué)習(xí)、博文推薦,隨后分別與其他三種模型進行對比驗證,其準(zhǔn)確率比傳統(tǒng)機器學(xué)習(xí)方法和現(xiàn)有的深度模型都有較大的提高。利用深度門循環(huán)單元學(xué)習(xí)方法,可以更好地泛化用戶屬性的特征,改善短文本特征稀疏且未考慮上下文語境等現(xiàn)狀。本文僅考慮了離線數(shù)據(jù)集的評估結(jié)果,離線數(shù)據(jù)集中的印象和標(biāo)簽是固定的,而在線系統(tǒng)可以通過將泛化與記憶混合來產(chǎn)生新的探索性推薦,并從新的用戶點擊中學(xué)習(xí)。后期有望進行在線A/B測試,實驗效果和運算速度等,會有大幅度的提高。本文的淺層模型部分使用了基本的多元線性回歸模型,接下來的工作將嘗試其他模型結(jié)構(gòu)來代替獲得更好的性能。