伍 鑫,黃 勃 ,2,方志軍,劉文竹
1.上海工程技術(shù)大學(xué) 電子電氣工程學(xué)院,上海 201620
2.江西省經(jīng)濟(jì)犯罪偵查與防控技術(shù)協(xié)同創(chuàng)新中心,南昌 330000
如今在信息爆炸的時(shí)代中,充斥著大量的冗余信息,從而導(dǎo)致了信息的過載問題,因此有效信息的獲取變得十分困難。推薦系統(tǒng)作為一種信息過濾方法可有效緩解該問題。推薦系統(tǒng)對(duì)用戶歷史數(shù)據(jù)進(jìn)行分析,挖掘用戶興趣偏好,在項(xiàng)目空間中確定用戶喜歡的項(xiàng)目。傳統(tǒng)的推薦系統(tǒng)通常以矩陣分解模型[1]、協(xié)同過濾模型[2]和基于上下文感知模型[3]為主。傳統(tǒng)的推薦模型多為靜態(tài)的,沒有考慮用戶的興趣變化以及不同項(xiàng)目之間隱含的序列關(guān)系,只能從全局層面實(shí)現(xiàn)推薦。然而這種推薦方式在實(shí)際應(yīng)用中效果較差,難以產(chǎn)生滿足用戶需求的推薦。
此外,傳統(tǒng)推薦系統(tǒng)通常只能處理相對(duì)較小的數(shù)據(jù)集。但如今大規(guī)模數(shù)據(jù)集的出現(xiàn)以及運(yùn)算和硬件存儲(chǔ)的進(jìn)步,促使開發(fā)具有高精度和可擴(kuò)展性的更強(qiáng)大推薦系統(tǒng)成為可能[3-4]。
近些年,基于序列預(yù)測的推薦也得到了較好的發(fā)展,彌補(bǔ)了傳統(tǒng)推薦模型中無法考慮不同項(xiàng)目間時(shí)序關(guān)系的問題。當(dāng)前基于序列預(yù)測的模型多為遞歸神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Networks,RNN)或基于RNN的變體等[5-7]。上述序列預(yù)測模型一定程度上解決了序列預(yù)測問題,但在模擬用戶行為軌跡方面仍然存在欠缺。為了更明確地模擬用戶行為軌跡,本文提出了一種融合序列生成對(duì)抗網(wǎng)絡(luò)(Sequence Generative Adversarial Networks,SeqGAN)[8]的推薦算法,可以使用其生成模型來重現(xiàn)用戶喜歡的項(xiàng)目序列,從而實(shí)現(xiàn)相應(yīng)的推薦。同時(shí)在數(shù)據(jù)預(yù)處理方面引入Item2vec[9]對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,在降低數(shù)據(jù)維度的同時(shí),還能保留數(shù)據(jù)之間良好的結(jié)構(gòu)信息,此外使得相似項(xiàng)目的表示向量相似,解決了傳統(tǒng)詞嵌入方法中相似項(xiàng)目向量之間的關(guān)系不強(qiáng)的問題,同時(shí)也起到了降維、增加數(shù)據(jù)稠密度的作用。
近年來,基于深度學(xué)習(xí)的推薦算法受到了很多關(guān)注。推薦系統(tǒng)可視為一種用戶和項(xiàng)目之間的映射,深度學(xué)習(xí)作為一類常用的學(xué)習(xí)算法[10],能夠?qū)W習(xí)這種映射關(guān)系。常用深度模型如自動(dòng)編碼器[11]、卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)[12]和 RNN[6-7]等均在推薦系統(tǒng)中取得了不錯(cuò)的表現(xiàn)。但以上方法在擬合用戶興趣動(dòng)態(tài)偏好時(shí),仍然存在較大偏差。為了更準(zhǔn)確地模擬用戶的典型行為,可以利用生成模型來生成用戶的興趣項(xiàng)目序列。例如,利用訓(xùn)練好的隱馬爾可夫模型,根據(jù)用戶當(dāng)前喜歡的項(xiàng)目序列預(yù)測下一個(gè)項(xiàng)目,并將其推薦給用戶[13]。
Item2vec 由微軟亞洲研究院提出[9],其主要思想是借鑒了 Word2vec[14],并采用 SGNS(Skip-Gram+Negative Sampling)[14]的方法來生成項(xiàng)目詞向量。Item2vec 在項(xiàng)目向量表示方面有著較強(qiáng)的優(yōu)勢(shì),使得項(xiàng)目詞嵌入后的詞向量表示帶有結(jié)構(gòu)信息,即相似項(xiàng)目之間的距離較近,差異較大的項(xiàng)目之間距離較遠(yuǎn)。因此Item2vec在一定程度上保留了原始數(shù)據(jù)的結(jié)構(gòu)信息,同時(shí)降低了數(shù)據(jù)維度,便于后期的訓(xùn)練學(xué)習(xí)以及推薦。
Goodfellow 等人提出生成對(duì)抗網(wǎng)絡(luò)(Generative Adversarial Networks,GAN)[15],在圖像生成[16]到魯棒控制[17]等許多任務(wù)中的表現(xiàn)優(yōu)于現(xiàn)有算法。這是因?yàn)镚AN 有效地利用深度學(xué)習(xí)的描述性和辨別力,訓(xùn)練具有高精度和可擴(kuò)展性的生成模型。利用GAN在生成數(shù)據(jù)方面的良好特性,在推薦系統(tǒng)中利用GAN 模擬用戶的行為軌跡,從而較精確地預(yù)測每個(gè)用戶的偏好[18-19]。由于SeqGAN在文本生成方面取得了較好的成果,對(duì)序列特征有著較強(qiáng)的學(xué)習(xí)能力,因此本文將融合SeqGAN來挖掘推薦系統(tǒng)中項(xiàng)目之間的序列關(guān)系。
當(dāng)前基于序列預(yù)測的模型中,在數(shù)據(jù)預(yù)處理以及降維階段,常采用較為簡單的one-hot向量表示項(xiàng)目,該表示方式存在向量稀疏且無法體現(xiàn)不同項(xiàng)目之間關(guān)系的問題。因此,本文提出Item2vec和SeqGAN相結(jié)合的推薦算法,選用Item2vec 對(duì)項(xiàng)目進(jìn)行預(yù)處理,從而得到帶有結(jié)構(gòu)信息的項(xiàng)目向量,然后采用SeqGAN來建立基于GAN的模型,學(xué)習(xí)用戶的偏好,并向用戶生成下一個(gè)項(xiàng)目的推薦。SeqGAN能夠?qū)W習(xí)序列關(guān)系,為推薦任務(wù)提供了一個(gè)有效的框架。因此本文對(duì)SeqGAN 做了適當(dāng)?shù)母倪M(jìn),使其適用于推薦任務(wù)。為了驗(yàn)證模型的有效性,在 Netflix Prize Contest 數(shù)據(jù)集和 Movielens 數(shù)據(jù)集上進(jìn)行了實(shí)驗(yàn)。實(shí)驗(yàn)結(jié)果表明,本文提出的模型優(yōu)于基線算法。
模型首先需要將電影項(xiàng)目映射成相應(yīng)的詞向量,再根據(jù)用戶歷史記錄的時(shí)間戳屬性,構(gòu)建不同的序列信息。如圖1中的Embedding部分所示。
圖1 模型總體框架
本文改進(jìn)的SeqGAN,生成器通過噪聲z產(chǎn)生虛假的用戶觀看電影的序列信息Y={y1,y2,…,yt},如圖1中Generator部分所示。將生成器生成的項(xiàng)目序列信息Y和由Item2vec 根據(jù)真實(shí)信息產(chǎn)生的真實(shí)項(xiàng)目詞向量序列信息X={x1,x2,…,xt} 分別傳入鑒別器Discriminator中,輸出傳入項(xiàng)目序列X和Y為真實(shí)序列的概率值,其中p-表示生成器產(chǎn)生的序列Y鑒別為真實(shí)序列的概率值,p+表示真實(shí)序列X鑒別為真實(shí)序列的概率值。然后將p-作為生成器獲得的獎(jiǎng)勵(lì),指導(dǎo)生成器迭代更新,促使生成器盡可能地發(fā)掘用戶序列信息的真實(shí)分布特征。具體的對(duì)抗訓(xùn)練過程如圖1所示。
首先根據(jù)數(shù)據(jù)集的時(shí)間屬性對(duì)無序的用戶數(shù)據(jù)進(jìn)行處理。傳統(tǒng)的詞嵌入方法如one-hot存在向量稀疏且難以表示電影和電影之間的關(guān)系等問題;有研究發(fā)現(xiàn)RNN 以及RNN 的變體在數(shù)據(jù)密度較高時(shí)能發(fā)揮較好的性能[10],本模型的生成器采用LSTM(Long Short-Term Memory)構(gòu)成,鑒別器采用GRU(Gated Recurrent Unit)構(gòu)成,均為RNN 的變體;采用Item2vec 方法,該方法可以學(xué)習(xí)電影項(xiàng)目在低維空間的詞向量表示,增加數(shù)據(jù)的密度,同時(shí)可以學(xué)習(xí)不同電影項(xiàng)目之間的關(guān)系。
假設(shè)所有用戶觀看的電影的歷史記錄被定義為一個(gè)語料庫,同時(shí)將某一個(gè)用戶u觀看的一系列電影記錄視為一個(gè)小的電影集合,用Wu表示。所有的電影項(xiàng)目視為詞匯集合,用S(Wu∈S)表示。通過學(xué)習(xí)所有用戶歷史記錄中電影間的共現(xiàn)關(guān)系,獲得該電影項(xiàng)目的詞向量表示。具體的目標(biāo)函數(shù)如下:
其中,σ(x)=1/(1+exp(-x)),u∈Wi,v∈Wj,N為對(duì)于每個(gè)正樣本負(fù)采樣的個(gè)數(shù)。
假定出現(xiàn)在用戶歷史記錄中的電影項(xiàng)目均為有效項(xiàng)目,因此用戶在選擇某個(gè)電影項(xiàng)目時(shí),該電影項(xiàng)目即代表該用戶此時(shí)的興趣趨向。即可將某一時(shí)刻用戶所選的電影項(xiàng)目的詞向量表示作為該用戶此時(shí)的興趣特征向量。
LSTM比較適用于序列預(yù)測問題,能夠挖掘用戶興趣特性的分布特點(diǎn)。因此,采用LSTM 來構(gòu)建SeqGAN中的生成器Gθ(θ為參數(shù))。此外,為了同時(shí)處理用戶的時(shí)間靜態(tài)偏好和動(dòng)態(tài)偏好,本文在LSTM單元的輸入門(it)使用Leaky RELU激活函數(shù),如式(3)所示。Leaky RELU可以很好地控制輸入門信息的寫入和丟棄,使模型對(duì)于時(shí)間靜態(tài)偏好的用戶關(guān)注其過去的行為,對(duì)于動(dòng)態(tài)偏好的用戶自動(dòng)為其建模并完成預(yù)測。
為促使生成器挖掘用戶興趣的真實(shí)分布,在生成器中輸入噪聲z取代真實(shí)的序列數(shù)據(jù)。此方法可避免生成器過度依賴原始數(shù)據(jù)的問題,防止模型的過擬合。借助鑒別器的監(jiān)督訓(xùn)練,實(shí)現(xiàn)對(duì)抗學(xué)習(xí),從而挖掘用戶的真實(shí)興趣特征模型。
在LSTM 單元通過噪聲z為其產(chǎn)生一個(gè)初始的隱狀態(tài),如式(4)所示。其中yt表示生成的興趣特征,生成過程如式(6)所示。生成器Gθ={y1,y2,…,yT}。
在GAN中,為了更好地訓(xùn)練生成器,促使生成器生成更真實(shí)的數(shù)據(jù),需要鑒別器輔助生成器的訓(xùn)練過程。GRU 在文本分類任務(wù)中顯示出較好的效果,因此選擇GRU 作為鑒別器Dφ(φ是參數(shù))來輔助生成器Gθ的迭代更新過程。Dφ(Y1:T)表示序列Y1:T={y1,y2,…,yT}為真實(shí)序列數(shù)據(jù)可能性的概率。真實(shí)的用戶電影序列數(shù)據(jù)為正例,生成模型Gθ生成的數(shù)據(jù)為負(fù)例,通過正例和負(fù)例對(duì)判別模型Dφ進(jìn)行訓(xùn)練。
鑒別器中最終以sigmoid函數(shù)評(píng)估序列中各個(gè)節(jié)點(diǎn)為真實(shí)數(shù)據(jù)的可能性,如式(8),并累積該估計(jì)值,取其平均值作為該序列為真實(shí)序列的可能性,如式(9)。
為了更好地輔助生成對(duì)抗訓(xùn)練,本文采用強(qiáng)化學(xué)習(xí)算法學(xué)習(xí)動(dòng)作價(jià)值函數(shù),即從狀態(tài)s開始采取動(dòng)作a可獲得的預(yù)期獎(jiǎng)勵(lì)。將鑒別器Dφ的實(shí)際估計(jì)概率視為實(shí)際得到的獎(jiǎng)勵(lì),使用鑒別器Dφ作為獎(jiǎng)勵(lì)函數(shù),并動(dòng)態(tài)迭代更新獎(jiǎng)勵(lì)函數(shù),以進(jìn)一步優(yōu)化生成器。
一旦獲得一組更真實(shí)的生成預(yù)測序列,該模型將重新訓(xùn)練鑒別器,模型描述如下:
生成器模型Gθ的目標(biāo)是根據(jù)起始狀態(tài)s0生成序列,并最大化其預(yù)期的最終獎(jiǎng)勵(lì),其目標(biāo)函數(shù)J(θ)如方程(13)所示:
其中,RT是生成的完整序列的獎(jiǎng)勵(lì)。
在模型訓(xùn)練過程中,每次獲得新的鑒別器模型時(shí),都會(huì)對(duì)生成器進(jìn)行更新。本文基于策略梯度的優(yōu)化方式依賴于最大化長期獎(jiǎng)勵(lì)。對(duì)目標(biāo)函數(shù)J(θ)求梯度:
其中,yt是從Gθ生成的預(yù)測。由于期望E 可以通過采樣方法近似,然后將生成器的參數(shù)更新為:
采用Adam[16]和RMSprop[18]等自適應(yīng)學(xué)習(xí)率的優(yōu)化算法,αh∈R+表示第h步的學(xué)習(xí)率。此外,在真實(shí)的數(shù)據(jù)集上使用最大似然估計(jì)(Maximum Likelihood Estimation,MLE)來預(yù)訓(xùn)練Gθ。實(shí)驗(yàn)發(fā)現(xiàn)通過預(yù)訓(xùn)練的生成器Gθ可以更容易找到最優(yōu)解。
完成用戶興趣建模,即可執(zhí)行具體的推薦任務(wù),如圖2 所示。首先將用戶觀看的歷史電影項(xiàng)目按照時(shí)序特征依次傳入生成器中,如圖2 中的x1,x2,…,xt-1所示,并為該用戶生成下一時(shí)刻的興趣特征向量yt;匹配該興趣特征向量在電影集合S中的前N個(gè)最近鄰項(xiàng)目,完成對(duì)該用戶的top-n推薦。若下一時(shí)刻t實(shí)際的興趣特征向量xt所對(duì)應(yīng)的電影ID在推薦的前n個(gè)電影項(xiàng)目中,即在圖2的movieId中,視本次推薦為一次成功的推薦。
圖2 推薦流程圖
實(shí)驗(yàn)在一臺(tái) CPU 為 i7-9700k,GPU 為 1080Ti,內(nèi)存為32 GB 的電腦上進(jìn)行,操作系統(tǒng)為ubuntu16.04,實(shí)驗(yàn)環(huán)境為Pycharm。
實(shí)驗(yàn)根據(jù)用戶歷史行為,預(yù)測其未來的興趣特征,最終以top-n方式完成推薦任務(wù)。
本文提出的算法為一種序列預(yù)測,在包含時(shí)間戳屬性的Movielens數(shù)據(jù)集和Netflix數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn)。
Movielens-20M:該數(shù)據(jù)集是電影推薦服務(wù)Movielens最大的一個(gè)數(shù)據(jù)集,包含138 493 個(gè)用戶對(duì)27 278 部電影的20 000 263條評(píng)分記錄和465 564個(gè)標(biāo)簽。數(shù)據(jù)集的時(shí)間跨度為1995年1月9日到2015年3月31日,每個(gè)用戶至少有20部觀影記錄。
Netflix:該數(shù)據(jù)集比Movielens-20M 更大,擁有約48 萬用戶對(duì)17 770部電影的1.0×108條評(píng)分記錄。
將數(shù)據(jù)集根據(jù)項(xiàng)目序列劃分為訓(xùn)練集和測試集,訓(xùn)練集用于預(yù)訓(xùn)練生成器Gθ和對(duì)抗訓(xùn)練時(shí)優(yōu)化Dφ,測試集用于觀測訓(xùn)練過程中的實(shí)際損失值。在這些數(shù)據(jù)集中,項(xiàng)目序列的歷史記錄中任何項(xiàng)目至多出現(xiàn)一次,因此可通過強(qiáng)制它們推薦用戶尚未看到的項(xiàng)目來模擬更真實(shí)的推薦過程。
實(shí)驗(yàn)首先將用戶的歷史記錄按照用戶ID劃分成不同的電影子集,然后根據(jù)時(shí)間戳屬性對(duì)這些歷史記錄排序,構(gòu)建對(duì)應(yīng)的序列,然后將其傳入Item2vec中訓(xùn)練,最后得到不同電影對(duì)應(yīng)的向量,完成對(duì)訓(xùn)練數(shù)據(jù)的預(yù)處理工作。
具體訓(xùn)練過程如算法1所示。在對(duì)抗訓(xùn)練開始前,首先將訓(xùn)練集中具有時(shí)間序列關(guān)系的電影向量列表傳入SeqGAN的生成器中完成對(duì)生成器的預(yù)訓(xùn)練;然后進(jìn)行對(duì)抗訓(xùn)練,將生成器的輸入?yún)?shù)改變?yōu)殡S機(jī)噪聲,生成器通過隨機(jī)噪聲產(chǎn)生相應(yīng)的向量序列;將生成器生成的向量序列和真實(shí)數(shù)據(jù)集中的序列混合傳入鑒別器,以優(yōu)化鑒別器的鑒別能力;當(dāng)鑒別器能夠較好地分辨生成器生成的數(shù)據(jù)和真實(shí)數(shù)據(jù)集中的數(shù)據(jù)時(shí),再利用鑒別器輸出的值通過策略梯度的方式進(jìn)一步優(yōu)化生成器。
算法1Item2vec+SeqGAN
輸入:用戶基于時(shí)間順序的電影序列信息
1.采用Item2vec算法,得到電影項(xiàng)目的詞向量表示
2.初始化SeqGAN,并對(duì)生成器Gθ進(jìn)行預(yù)訓(xùn)練
3.得到預(yù)訓(xùn)練的參數(shù)θ
4.repeat:
5.updateDφ
6.通過式(11)實(shí)現(xiàn)迭代更新
7.updateGθ
8.將噪聲z傳入Gθ中生成序列信息
9.通過式(9)完成獎(jiǎng)勵(lì)值的計(jì)算,并采用策略梯度優(yōu)化生成器Gθ
10.until:當(dāng)鑒別器無法很好地區(qū)分生成器生成的數(shù)據(jù)時(shí)結(jié)束循環(huán),并保存模型
具體的推薦算法描述如算法2 所示。將推薦用戶的歷史序列依次傳入到訓(xùn)練好的SeqGAN的生成器中,即可生成下一時(shí)刻該用戶可能感興趣的特征向量。匹配該向量前n個(gè)不重復(fù)的最近鄰項(xiàng)目,完成對(duì)該用戶的top-n推薦。
算法2Sequence Recommendation
輸入:用戶u基于時(shí)間順序的電影序列信息
1.通過式(5)和(6)為其生成相應(yīng)的興趣特征向量
2.根據(jù)該特征向量匹配前n個(gè)不重復(fù)的最近鄰電影向量
3.將這n個(gè)向量轉(zhuǎn)換為所對(duì)應(yīng)的電影ID
輸出:將這n個(gè)電影推薦給用戶u
為了對(duì)該推薦模型進(jìn)行評(píng)估,采用MAP(Mean Average Precision)和MRR(Mean Reciprocal Ranking)指標(biāo)來衡量模型基于top-n推薦的性能。本實(shí)驗(yàn)中將該模型與基于最近鄰(KNN)和基于矩陣分解(BPR-MF)的兩種靜態(tài)top-n推薦算法進(jìn)行比較。同時(shí)也與基于序列預(yù)測的基線方法:馬爾可夫鏈(MC)、RNN 進(jìn)行比較。實(shí)驗(yàn)結(jié)果如表1和表2所示。
通過以上結(jié)果對(duì)比發(fā)現(xiàn),本文所提出的模型,在經(jīng)過Item2vec處理之后的數(shù)據(jù)上,取得了優(yōu)于基線方法的結(jié)果。例如,在Movielens 數(shù)據(jù)集上,對(duì)于基線方法MC和RNN 上推薦精度均提高了4%。這是因?yàn)镵NN 和BPR-MF這類基線模型不具備序列預(yù)測的特性;而本文模型能夠發(fā)掘用戶潛在的興趣偏好變化軌跡,根據(jù)當(dāng)前興趣偏好進(jìn)行預(yù)測。同時(shí)Item2vec 方法在降低稀疏性的同時(shí),讓同類型的電影在向量表示上也具備了一定的相似性,對(duì)后期的序列預(yù)測,以及挖掘用戶潛在的興趣模型提供了有力條件。此外,相較于直接利用RNN 訓(xùn)練的網(wǎng)絡(luò)模型,采用對(duì)抗訓(xùn)練的方式,可以有效降低模型的過擬合,更利于對(duì)用戶的興趣模型進(jìn)行精確建模。
表1 基于Movielens-20M數(shù)據(jù)集對(duì)比分析(n=10)
表2 基于Netflix數(shù)據(jù)集對(duì)比分析(n=10)
本文討論了Item2vec 和SeqGAN 在推薦系統(tǒng)中的具體實(shí)現(xiàn)。將兩者相結(jié)合,改進(jìn)傳入SeqGAN網(wǎng)絡(luò)的項(xiàng)目向量表示,在降低向量表示維度的同時(shí),讓項(xiàng)目的結(jié)構(gòu)信息融入其向量表示中。同時(shí)改進(jìn)SeqGAN 網(wǎng)絡(luò)結(jié)構(gòu),使其更適合推薦系統(tǒng)的應(yīng)用場景。本文模型旨在對(duì)基于時(shí)序關(guān)系的用戶和項(xiàng)目潛在特征精確建模,從而提高推薦系統(tǒng)的準(zhǔn)確性。
實(shí)驗(yàn)結(jié)果表明,SeqGAN在兩個(gè)不同的數(shù)據(jù)集中表現(xiàn)均優(yōu)于基線模型。未來工作集中于進(jìn)一步研究和改進(jìn)SeqGAN的性能,以及對(duì)LSTM進(jìn)行改進(jìn)的可行性和影響進(jìn)行深入研究,以便更精準(zhǔn)地對(duì)用戶興趣建模。