鄔錦琛,楊興耀,于 炯,李梓楊,黃擅杭,孫鑫杰
新疆大學 軟件學院,烏魯木齊830008
在大數(shù)據(jù)時代,用戶從大量的產(chǎn)品和服務中想獲取自己需要的信息是極其困難的。推薦系統(tǒng)可以根據(jù)用戶的歷史數(shù)據(jù)了解用戶的偏好,幫助用戶做出合理的決策和選擇。隨著推薦系統(tǒng)的開發(fā)和對用戶數(shù)據(jù)的分析,用戶的偏好可以區(qū)分為長期偏好和短期偏好[1]。傳統(tǒng)的推薦系統(tǒng)只考慮用戶的長期偏好,而忽略了用戶偏好的轉(zhuǎn)移。例如,在電子商務平臺中,用戶購買的物品構(gòu)成了用戶的行為序列,傳統(tǒng)的推薦系統(tǒng)的目的是通過物品的轉(zhuǎn)移來了解用戶的長期偏好。用戶購買物品的行為序列如圖1所示。
圖1 用戶購買物品的行為序列Fig. 1 Behavior sequence of user purchases
圖1 中描述了六件物品之間的轉(zhuǎn)換關(guān)系。傳統(tǒng)的推薦系統(tǒng)考慮項目所有用戶行為的轉(zhuǎn)換關(guān)系,以便推薦系統(tǒng)花費很長時間關(guān)注用戶注重的物品,但這會減弱推薦系統(tǒng)對用戶偏好變化的敏感度。因此,推薦系統(tǒng)無法快速學習用戶偏好的轉(zhuǎn)移。如,一個用戶買了很長時間的魚肉,突然喜歡上了牛肉。但是,由于用戶購買魚肉的次數(shù)比購買牛肉的次數(shù)多,傳統(tǒng)的推薦系統(tǒng)認為用戶的偏好仍然是魚肉。因此,傳統(tǒng)的推薦系統(tǒng)由于沒有考慮用戶行為的交易結(jié)構(gòu)而忽略了用戶偏好的轉(zhuǎn)移。為了解決這個問題,有必要將用戶行為序列分解成更小段的序列,即會話。例如,按照時間做分割,用戶一次購買的商品、一天內(nèi)瀏覽的網(wǎng)頁等?;跁挼耐扑]模型以會話作為推薦的基本單元,可以減少用戶的信息損失,并且已經(jīng)得到了廣泛的研究。將用戶行為序列分割為會話的結(jié)果如圖2所示。
圖2 用戶行為序列分解Fig. 2 Decomposition of user behavior sequences
圖2描述了在電商平臺中,將圖1中的用戶的購買行為劃分為了粒度更小的會話序列集合{s1,s2,s3}?;谟脩粜袨樾蛄械耐扑]系統(tǒng)將用戶行為分解為一組會話,從而賦予用戶行為事務屬性,使推薦系統(tǒng)能夠?qū)W⒂谟脩羝玫膫鬟f。如,用戶長期購買蘋果,但最近更喜歡西瓜,基于用戶行為序列的推薦系統(tǒng)可以及時捕捉用戶偏好的轉(zhuǎn)移。它不再像傳統(tǒng)的推薦系統(tǒng)那樣繼續(xù)推薦不同品種的葡萄及與葡萄相關(guān)的商品,而是推薦與西瓜相關(guān)的商品。因此,基于用戶行為序列的推薦系統(tǒng)忽略了用戶的長期偏好。要使基于用戶行為序列的推薦系統(tǒng)既關(guān)注用戶的短期偏好,又考慮用戶的長期偏好,就必須考慮會話之間的相關(guān)性。會話序列中的相關(guān)關(guān)系主要有三方面:同一會話中不同物品項之間的相關(guān)關(guān)系、不同會話中不同項之間的相關(guān)關(guān)系以及不同會話中不同物品項之間的相關(guān)關(guān)系。這就要求基于用戶行為序列的推薦系統(tǒng)能夠充分考慮會話的上下文,并能夠了解項與項之間的復雜轉(zhuǎn)移。
近年來,圖神經(jīng)網(wǎng)絡(luò)(graph neural networks,GNN)被應用于基于用戶行為序列的推薦系統(tǒng)[2]。在基于GNN 的推薦系統(tǒng)中,首先將用戶行為序列集構(gòu)造為一個有向圖,有向圖中的節(jié)點表示項,而項之間的轉(zhuǎn)移關(guān)系用邊來展現(xiàn)。其次根據(jù)構(gòu)造出來的有向圖,圖神經(jīng)網(wǎng)絡(luò)可以學習項目之間復雜的轉(zhuǎn)移關(guān)系,學習表達能力強的項目嵌入,生成包含項目間復雜轉(zhuǎn)移信息的序列嵌入[3]。如,基于會話的圖神經(jīng)網(wǎng)絡(luò)(session-based recommendation with graph neural network,SR-GNN)[4]不僅可以捕獲短期內(nèi)用戶偏好的遷移,還可以考慮遠距離物品之間的轉(zhuǎn)移關(guān)系。因此,SRGNN 可以學習正確的物品嵌入。同時,SR-GNN 增加了一個注意力網(wǎng)絡(luò),關(guān)注用戶的局部會話嵌入和全局會話嵌入,這使模型可以將用戶的短期偏好和長期偏好同時考慮在內(nèi)。SR-GNN 雖然考慮了用戶的長短期偏好以及項與物品間的復雜轉(zhuǎn)換,但它忽略了會話序列中的其他有效信息,如用戶信息,這會導致不同用戶的特定偏好的丟失。
目前的異構(gòu)圖模型中只關(guān)注了序列內(nèi)部的依賴關(guān)系,而忽略了序列之間的相關(guān)效應,本文將序列作為異構(gòu)圖的節(jié)點,這樣可以通過用戶意圖和用戶行為模式計算序列之間的相似度,完成跨序列級的學習。本文考慮到在真實世界的信息中,每個信息節(jié)點的類型和每條邊的類型都是多種的,并且每一個節(jié)點也具有不同且繁多的屬性,此時同構(gòu)圖就無法完全表示這些信息。同時,異構(gòu)圖可以包含多種類型的節(jié)點,邊不僅可以表示不同的關(guān)系,也可以表示不同類型節(jié)點之間的相關(guān)性。因此,本文引入異構(gòu)圖來構(gòu)造同構(gòu)圖中不能表示的用戶等信息,豐富需要表達的信息。以往的普通圖模型中,只能對成對的關(guān)系進行建模,如用戶與物品交互的關(guān)系,無法捕獲各種節(jié)點信息之間的高階關(guān)系,如相似的用戶組關(guān)系。本文將帶有異構(gòu)信息的行為序列構(gòu)建為異構(gòu)圖的線圖來表達高階數(shù)據(jù)關(guān)系。
異構(gòu)圖神經(jīng)網(wǎng)絡(luò)(heterogeneous graph neural network,HetGNN)[5]在推薦任務中,可以學習圖中不同類型節(jié)點的潛在信息,同時將圖中不同節(jié)點嵌入到統(tǒng)一的向量空間中,但無法捕捉節(jié)點間的高階依賴關(guān)系。為此,本文對HetGNN 模型進行改進,提出雙通道異構(gòu)圖神經(jīng)網(wǎng)絡(luò)的用戶行為序列推薦算法(user behavior sequence recommendation with dual channel heterogeneous graph neural network,DC-HetGNN),通過構(gòu)建異構(gòu)圖的線圖通道,捕捉節(jié)點與節(jié)點之間高階關(guān)系,同時充分考慮了物品項目、用戶和用戶行為序列之間的相關(guān)關(guān)系,可以通過豐富的信息和復雜項目轉(zhuǎn)移學習序列嵌入,在異構(gòu)圖通道中聚合局部序列和全局序列,保證同時考慮用戶的長短期偏好。本文主要貢獻如下:
(1)將異構(gòu)圖神經(jīng)網(wǎng)絡(luò)用于用戶行為序列推薦,將物品、用戶和行為序列構(gòu)造成異構(gòu)圖和異構(gòu)圖的線圖,通過異構(gòu)圖神經(jīng)網(wǎng)絡(luò)來捕捉物品、用戶和行為序列兩兩之間的關(guān)系和跨序列信息。
(2)提出一種基于用戶行為序列的雙通道異構(gòu)圖神經(jīng)網(wǎng)絡(luò)DC-HetGNN。DC-HetGNN 可以從序列中獲取用戶的潛在信息。
(3)在公共電商用戶行為數(shù)據(jù)集上進行了大量實驗。結(jié)果表明,本文提出的模型與其他新近基線模型在相同的指標上有顯著的提升。
協(xié)同過濾(collaborative filtering,CF)[6]是最流行的推薦方法之一。它根據(jù)用戶對項目的評級對用戶進行分類,并為目標用戶找到具有相似興趣的其他用戶。然后CF向目標用戶推薦其他用戶感興趣但目標用戶沒有見過或購買過的商品。矩陣分解(matrix factorization,MF)[7]是一種典型的傳統(tǒng)推薦方法。它可以將用戶和項目嵌入到相同的向量空間中。用戶嵌入和項嵌入的內(nèi)積是用戶對項的興趣度,而MF不能學習項的序列變換。隨后,一個將貝葉斯個性化排序融入到MF中的算法出現(xiàn),通過轉(zhuǎn)換圖來建模排序用戶序列行為,即隱性反饋的貝葉斯個性化排名(Bayesian personalized ranking from implicit feedback,BPR-MF)[8]。
近年來,一些利用循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrent neural network,RNN)優(yōu)勢且應用于用戶行為序列推薦方法出現(xiàn),如基于門控單元的循環(huán)網(wǎng)絡(luò)(recurrent neural network with gate recurrent unit,GRU4Rec)[9]。GRU4Rec考慮了上一個節(jié)點與當前節(jié)點之間的相關(guān)關(guān)系,該方法對用戶行為序列非常敏感,能夠及時捕捉到用戶偏好的轉(zhuǎn)移,但是無法了解用戶的長期偏好。圖神經(jīng)網(wǎng)絡(luò)最近受到越來越多的關(guān)注,與基于RNN 的方法不同,基于GNN 的方法在序列構(gòu)造的圖中學習項目間的轉(zhuǎn)換。SR-GNN 是使用門控圖神經(jīng)網(wǎng)絡(luò)將用戶行為序列建模為圖結(jié)構(gòu)數(shù)據(jù)的開創(chuàng)性方法。圖上下文的自注意力網(wǎng)絡(luò)(graph contextualized selfattention network,GC-SAN)[10]利用自我注意力機制通過圖信息聚合來捕獲物品間依賴。全圖神經(jīng)網(wǎng)絡(luò)(full graph neural network,F(xiàn)GNN)[11]通過將節(jié)點分類和圖分類相結(jié)合用于學習序列嵌入。時序圖序列推薦算法(temporal graph sequential recommender,TGSRec)[12]在考慮序列內(nèi)的時間動態(tài)的同時捕捉用戶和物品間的相關(guān)依賴關(guān)系。全局上下文增強的圖神經(jīng)網(wǎng)絡(luò)(global context enhanced graph neural network,GCE-GNN)[13]在單個序列圖和全局序列圖上進行圖卷積,以學習局部序列和全局序列的嵌入?;诨旌夏P偷膱D神經(jīng)網(wǎng)絡(luò)(graph neural network based hybrid model,GNNH)[14]融合順序模式和非順序模式,以捕獲序列內(nèi)的動態(tài)興趣。雖然這些方法表明基于GNN的方法優(yōu)于其他方法,包括基于RNN的模型,但是它們都沒能捕獲到復雜的高階物品間依賴關(guān)系。
異構(gòu)圖(heterogeneous graph,HetG)包含了豐富的多類型節(jié)點之間的結(jié)構(gòu)關(guān)系信息,以及與每個節(jié)點相關(guān)聯(lián)的非結(jié)構(gòu)化內(nèi)容。異構(gòu)信息網(wǎng)絡(luò)(heterogeneous information network,HIN)[15]可以將多種類型的節(jié)點構(gòu)建到一個圖中,并將這些節(jié)點用不同類型的邊連接起來,因此HIN 可以對復雜的上下文信息進行建模。由于HIN 具有不同類型的節(jié)點或邊,很難將這些節(jié)點或邊嵌入到同一個向量空間中。近年來,一些圖嵌入方法,如DeepWalk[16]、metapath2vec[17]、node2vec[18]、LINE(large-scale information network embedding)[19]、ASNE(attributed social network embedding)[20]、Pathsim[21]、Pathselclus[22]等被提出,DeepWalk算法通過隨機游走生成節(jié)點序列,將其視為一個句子,利用語言建模生成嵌入的節(jié)點表示。本文使用DeepWalk 算法將異構(gòu)圖嵌入到相同的向量空間中,獲得各類節(jié)點的預嵌入表示。Ren 等人提出了一種基于信息網(wǎng)絡(luò)聚類的有效引文推薦方法ClusCite[23],該方法學習異構(gòu)信息網(wǎng)絡(luò)中的引文之間的關(guān)系,并將其聚類成興趣組。Hu等人開發(fā)了一種新的具有共同注意機制的深度神經(jīng)網(wǎng)絡(luò)——基于元路徑的上下文推薦模型(leveraging metapath based context for recommendation,MCRec)[24]。MCRec 學習了基于元路徑的用戶、對象和上下文的有效表示,實現(xiàn)了較好的交互功能。
本章對描述模型的符號進行定義并描述用戶行為序列的推薦問題。
定義1(異構(gòu)圖)將異構(gòu)圖定義為HetG=(N,E),其中異構(gòu)圖節(jié)點N是一個包含了物品集合I、用戶集合U和用戶行為序列集合S的N個節(jié)點集合,該節(jié)點集合中的節(jié)點唯一。異構(gòu)圖邊E是一個包含了M條邊集合,該集合中的每條邊e∈E包含兩個或多個節(jié)點,并被賦予一個正權(quán)值We,e,所有權(quán)值構(gòu)成了一個對角矩陣W∈RM×M。異構(gòu)圖可以用關(guān)聯(lián)矩陣表示為H∈RN×M,其中Hi,e=1 表示邊e∈E包含一個節(jié)點ni∈N,否則Hi,e=0。每個節(jié)點和邊的度分別定義為Di,i=和,D和B是對角矩陣。上述中物品集合為I={i1,i2,…,in},其中n為物品的個數(shù)。有用戶集合為U={u1,u2,…,um},其中m為用戶個數(shù)。用戶行為序列集合為S={s1,s2,…,sj},其中j為行為序列個數(shù)。用戶行為序列集合S是由用戶集合U中用戶對物品集合I進行點擊行為組成序列。其中,每一個序列s都表示成一個集合,即s={is,1,is,2,…,is,h}。其中is,k∈I(1 ≤k≤h),表示在一個行為序列中用戶的一個行為交互項。將有交互項的節(jié)點嵌入到同一個模型中獲得節(jié)點的嵌入集合Node*={I*,S*,U*},并使有交互項的節(jié)點嵌入到同一個向量空間中。其中I*表示物品嵌入集合,S*表示用戶行為序列嵌入集合,U*表示用戶嵌入集合。異構(gòu)圖轉(zhuǎn)化為矩陣表示如圖3所示。
圖3 異構(gòu)圖的矩陣表示Fig. 3 Matrix representation of heterogeneous graph
在圖3中:(1)部分為異構(gòu)圖的關(guān)聯(lián)矩陣;(2)部分為異構(gòu)圖邊的度矩陣;(3)部分為異構(gòu)圖點的度矩陣。
定義2(異構(gòu)圖的線圖)給定異構(gòu)圖HetG=(N,E),該圖的線圖L(HetG)=(NL,EL)中的每個節(jié)點是異構(gòu)圖HetG 中的一個邊,且L(HetG)的兩個節(jié)點是連通的,即它們對應的HetG 中的邊至少共享一個公共節(jié)點。在L(HetG)中,線圖節(jié)點定義為NL={ne:ne∈E},異構(gòu)圖的線圖中連接節(jié)點的邊定義為EL=E,eq∈E,|ep?eq|≥1},給每條邊賦值為Wp,q=|ep?eq|/|ep?eq|。異構(gòu)圖的線圖表示如圖4所示。
圖4 異構(gòu)圖的線圖表示Fig. 4 Representation of line graph of heterogeneous graph
在圖4中,邊e1與邊e2中共包含6個節(jié)點,含有1個公共節(jié)點s2,故在線圖中連接節(jié)點e1和節(jié)點e2的邊的權(quán)重為W1,2=。其他邊的權(quán)重同理。
基于用戶行為序列的推薦系統(tǒng)的主要任務是通過給定一個用戶行為序列s,本文模型Fθ將用戶行為序列集合S分別構(gòu)造成異構(gòu)圖HetG 和異構(gòu)圖的線圖L(HetG),通過異構(gòu)圖通道和線圖通道學習包含了豐富信息和物品間轉(zhuǎn)換關(guān)系的物品項嵌入I*={i1,i2,…,in}。然后模型將生成最終混合序列嵌入。最后通過softmax 層獲得項目的得分,將排名前n的物品項is,h+1作為下一個項目推薦給用戶。
(1)異構(gòu)圖的構(gòu)建
本文將異構(gòu)圖節(jié)點定義為N=(I,S,U),其中I表示物品集合,S表示用戶行為序列集合,U表示用戶集合,將以上節(jié)點的集合構(gòu)造為一個異構(gòu)圖HetG=(N,E)。HetG 包含三種類型的節(jié)點以及兩種類型的邊,三種類型的節(jié)點分別是物品節(jié)點、用戶行為序列和用戶節(jié)點。兩種類型的邊分別為連接兩個物品之間有向邊集合Ei和無向邊集合E。其中有向邊Ei=(is,h,is,h+1)表示用戶在購買了物品is,h之后又購買了is,h+1。無向邊E={(is,h,s),(is,h,u),(s,u)}分別表示物品與用戶行為序列、物品與用戶之間和用戶行為序列與用戶之間的關(guān)系。
(2)異構(gòu)圖通道學習項目嵌入
在構(gòu)建異構(gòu)圖HetG 之后,本文利用異構(gòu)圖神經(jīng)網(wǎng)絡(luò)學習物品的嵌入表示,將用戶節(jié)點和行為序列節(jié)點的信息聚合成物品嵌入I*={i1,i2,…,in},其中物品嵌入項ik是節(jié)點ik的向量表示。
(3)線圖通道學習項目嵌入
在構(gòu)建異構(gòu)圖的線圖L(HetG)之后,本文設(shè)計了異構(gòu)圖的線圖卷積模型。線圖可以看成一個簡單的圖,它包含跨序列信息并描述項與項的連通性。
本章將介紹提出的DC-HetGNN 模型,并介紹完整的DC-HetGNN 學習算法。DC-HetGNN 模型架構(gòu)圖如圖5所示。
圖5 DC-HetGNN模型框架Fig. 5 Model framework of DC-HetGNN
在圖5中可以看到,DC-HetGNN展示對用戶、物品以及用戶行為序列進行異構(gòu)圖建模和異構(gòu)圖線圖建模,分別將建模后的嵌入集輸入異構(gòu)圖通道和線圖通道進行物品學習。通過異構(gòu)圖通道和線圖通道最終會分別得到序列嵌入,最后將兩個序列嵌入聚合,用于物品推薦。異構(gòu)圖通道使用異構(gòu)圖神經(jīng)網(wǎng)絡(luò)進行學習節(jié)點嵌入,異構(gòu)圖神經(jīng)網(wǎng)絡(luò)學習物品嵌入的過程如圖6所示。
圖6 中異構(gòu)圖神經(jīng)網(wǎng)絡(luò)主要分為三部分進行描述:(1)部分首先對異構(gòu)圖中所有節(jié)點進行采樣,采樣完成之后,對節(jié)點中不同的數(shù)據(jù)類型使用不同的技術(shù)進行編碼,接著將編碼后的信息通過全連接層和BiLSTM 層進行特征能力累積表達,最終獲得節(jié)點的內(nèi)容嵌入。(2)部分將相同類型的鄰居節(jié)點進行聚合。(3)部分采用注意力機制將不同類型的鄰居節(jié)點與當前節(jié)點進行聚合,最終獲得當前節(jié)點的內(nèi)容嵌入。
首先,需要將用戶行為序列集合S構(gòu)造成異構(gòu)圖HetG=(I,S,U,E),接著構(gòu)造異構(gòu)圖的線圖L(HetG)=(IL,SL,UL,EL)。HetG 創(chuàng)建后,利用DeepWalk 算法,收集物品、用戶和行為序列節(jié)點。然后使用Word2Vec對這些節(jié)點向量進行訓練,生成所有節(jié)點的預嵌入向量。
3.2.1 異構(gòu)圖通道學習項目嵌入及序列生成
經(jīng)過預訓練之后生成的節(jié)點嵌入向量,每個向量在相同維度空間中。但此時預嵌入的節(jié)點向量缺乏表達能力,無法表達復雜關(guān)系之間的物品間轉(zhuǎn)換。使用傳統(tǒng)圖神經(jīng)網(wǎng)絡(luò)進行異構(gòu)圖學習不能直接從不同類型的鄰居中獲取其特征信息,節(jié)點的嵌入可能受到弱相關(guān)鄰居的影響,冷啟動節(jié)點的嵌入不充分。異構(gòu)鄰居需要不同的特征轉(zhuǎn)換來處理不同的特征類型和維度。采用異構(gòu)圖神經(jīng)網(wǎng)絡(luò)HetGNN 學習包含豐富信息和復雜轉(zhuǎn)換關(guān)系的項嵌入。采用聚合異構(gòu)鄰居的思想,HetGNN主要分為以下四部分:
(1)對異構(gòu)鄰居進行采樣
由于異構(gòu)圖中的鄰居節(jié)點的類型和數(shù)量不同,聚合這些節(jié)點需要不同的特征轉(zhuǎn)換。例如,用戶1的3條行為序列中出現(xiàn)了4次商品購買行為,用戶2的4條行為序列中出現(xiàn)了5次商品購買行為。此時,兩位用戶的鄰居節(jié)點大小不同,為了方便使用相同的模型聚合這些異構(gòu)鄰居節(jié)點,采用基于重啟的隨機游走(random walk with restart,RWR)方法對異構(gòu)鄰居進行采樣。RWR的主要步驟如下:
步驟1在物品集I={i1,i2,…,in}、用戶集U={u1,u2,…,um}和行為序列集S={s1,s2,…,sj}中,對每個節(jié)點vi∈{I,U,S}開始隨機遍歷。遍歷過程中,以概率P迭代地移動到當前節(jié)點的鄰居或返回起始節(jié)點。直到固定數(shù)量的節(jié)點都被收集,RWR 運行就會停止。收集到的節(jié)點集中不同類型節(jié)點數(shù)量會有上限,確保所有節(jié)點類型都可以被采樣。
步驟2分組不同類型的鄰居。對于每個節(jié)點類型t,從步驟1中的節(jié)點集中根據(jù)出現(xiàn)次數(shù)進行降序排列,選取前k個節(jié)點作為節(jié)點v的t類型相關(guān)鄰居節(jié)點集合。
(2)聚合異構(gòu)鄰居的節(jié)點內(nèi)容
不同類型的異構(gòu)鄰居具有不同的節(jié)點內(nèi)容。例如,用戶節(jié)點可能包含性別、地域、角色等靜態(tài)屬性,也可能包含社交習慣、娛樂偏好、消費水平等動態(tài)屬性。而物品節(jié)點包含名稱、類型、價格等靜態(tài)屬性。HetGNN設(shè)計了一種基于雙向長短期記憶網(wǎng)絡(luò)(bidirectional long short-term memory,BiLSTM)的體系結(jié)構(gòu),獲取節(jié)點特征之間的交互,將節(jié)點的所有屬性聚合為節(jié)點的嵌入表示,使其具有更強的表達能力。節(jié)點v是節(jié)點vi的異構(gòu)鄰居,其屬性集為Attr={attr1,attr2,…,attrn},使用不同的模型將屬性attri轉(zhuǎn)換成同維度的特征嵌入向量Att*={att1,att2,…,attn}。例如,使用One-Hot對預訓練文本進行編碼,使用卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural networks,CNN)來預訓練圖像內(nèi)容等。在得到節(jié)點各屬性嵌入之后,節(jié)點嵌入f1(v)公式如下:
其中,f1(v)∈Rd×l,d表示嵌入維數(shù);表示具有參數(shù)θx的全連接神經(jīng)網(wǎng)絡(luò)并且無需變換的特征轉(zhuǎn)換器;⊕表示連接運算。LSTM公式如下:
其中,hi∈R(d/2)×l表示第i個隱藏層輸出狀態(tài),°是哈達瑪積,,Wi∈R(d/2)×(d/2)和bi∈R(d/2)×l(i∈(z,f,o,c))為可學習的參數(shù),zi、fi和oi分別為遺忘門第i層特征輸出、輸入門第i層特征輸出和輸出門第i層特征輸出。上文中f1(v)首先使用不同的帶參數(shù)的全連接層FCθx對不同內(nèi)容特征進行轉(zhuǎn)換,然后利用BiLSTM捕獲深層次的特征交互,累積所有內(nèi)容特征的表達能力,最后利用均值池化層處理所有隱藏狀態(tài),最終得到節(jié)點v的一般內(nèi)容嵌入。
(3)聚合相同類型的異構(gòu)鄰居
聚合異構(gòu)鄰居的節(jié)點內(nèi)容后,每個節(jié)點有多種類型的異構(gòu)鄰居且每種類型t有多個異構(gòu)鄰居。使用BiLSTM將相同類型的節(jié)點聚合成一個向量嵌入,HetGNN會學習它們之間的復雜關(guān)系,從而使學習到類型嵌入f2(t)具有更強的表達能力。類型嵌入f2(t)公式如下:
(4)聚合不同的類型
在得到類型嵌入后,由于不同類型的鄰居會對節(jié)點v的最終表示產(chǎn)生不同的影響,在結(jié)合基于類型的鄰居嵌入與節(jié)點v的內(nèi)容嵌入的過程中,采用注意力機制。此時,節(jié)點vi的最終嵌入計算表示為:
其中,T是包含異構(gòu)節(jié)點的類型集合。avi j表示每種類型對節(jié)點v產(chǎn)生的影響值,計算表示如下:
其中,LeakyReLU為激活函數(shù),U∈R2d×l表示注意力參數(shù),F(xiàn)2(T)表示類型嵌入f2(t)的集合,t∈T表示一個異構(gòu)節(jié)點的類型。
在使用HetGNN學習項目嵌入之后,進行序列嵌入的生成。對于序列s={is,1,is,2,…,is,h},預嵌入向量的過程如下:
其中,is,h是節(jié)點is,h的節(jié)點嵌入,i0是沒有固定維數(shù)的零向量,⊕表示連接操作。由于序列中的項數(shù)可能不同,需要連接i0,以便所有預嵌入的會話向量具有相同的維數(shù)。同時,考慮到用戶長短期偏好分別對結(jié)果的影響,加入注意力機制,獲得了能夠表達長短期偏好混合的序列嵌入。首先考慮到序列的局部嵌入slocal,其表達公式如下:
其中,is,n是當前序列中最后一項的嵌入向量。對于用戶長期偏好,需要重點考慮項與項之間的變換關(guān)系,同樣采用注意力機制來學習序列全局嵌入sglobal,其表達公式如下:
其中,WT∈Rd,W1,W2∈Rd×2d是用于生成物品嵌入的權(quán)重矩陣。在得到序列的全局嵌入和局部嵌入后,生成混合序列嵌入,過程如下:
其中,利用W3∈Rd×2d將slocal和sglobal融合到混合序列嵌入中。異構(gòu)圖通道學習項目嵌入及序列生成算法如算法1所示。算法時間復雜度為O(nd2)。
算法1異構(gòu)圖通道學習項目嵌入及序列生成算法HLearn
3.2.2 線圖通道學習項目嵌入及序列生成
線圖通道對異構(gòu)圖的線圖進行編碼。線圖可以看作一個包含跨行為序列信息并描述邊連通性的簡單圖,在進行卷積操作之前,將基礎(chǔ)物品嵌入I(0)輸入SGU(self-gating unit)并獲得線圖通道的物品嵌入。其中獲得的過程如下:
其中,Wg∈Rd×d,bg∈Rd都是需要學習的參數(shù)。σ為激活函數(shù)。
線圖通道學習項目嵌入及序列生成算法如算法2所示。算法復雜度為O(n2d)。
算法2線圖通道學習項目嵌入及序列生成算法LLearn
給定一個用戶行為序列s,通過分別計算I(0)和sline的點積以及I(0)和shybrid的點積為所有物品項i∈I計算一個得分,然后將兩個預測分數(shù)相加得到最終預測分數(shù):
然后,使用softmax 函數(shù)計算每一個項目成為序列中的下一個項目的概率:
本文將學習目標定義為推薦系統(tǒng)中得到廣泛應用的交叉熵損失函數(shù),并且使用Adam優(yōu)化器最小化交叉熵以獲得高質(zhì)量的推薦結(jié)果。記交叉熵函數(shù)的定義為:
其中,y是真實數(shù)據(jù)的One-Hot編碼向量。DC-HetGNN核心算法如算法3所示。
算法3DC-HetGNN算法
本文采用兩個電商數(shù)據(jù)集Tmall 和Diginetica 來評估本文提出的模型,兩個數(shù)據(jù)集中均包含了用戶的個人信息及行為信息。為了避免冗余數(shù)據(jù)對本文模型產(chǎn)生的影響,本文對兩個數(shù)據(jù)集均進行了預處理。其中,對數(shù)據(jù)集Diginetica 進行預處理的內(nèi)容如下:刪除數(shù)據(jù)集中只包含一個物品的所有行為序列,并刪除了出現(xiàn)次數(shù)少于5 次的物品。由于構(gòu)建異構(gòu)圖需要用戶節(jié)點,需要刪除匿名用戶的行為數(shù)據(jù)。本文將數(shù)據(jù)集Diginetica 拆分為訓練集和測試集,使用最近幾周的數(shù)據(jù)作為測試集,其他數(shù)據(jù)作為訓練集。最終經(jīng)過清洗的數(shù)據(jù)集如表1所示。
表1 Diginetica數(shù)據(jù)集Table 1 Diginetica dataset
本文選取的Tmall 數(shù)據(jù)集為用戶行為數(shù)據(jù)集。對此數(shù)據(jù)集預處理的內(nèi)容如下:刪除產(chǎn)生序列行為次數(shù)少于20次的用戶項,刪除了出現(xiàn)次數(shù)少于10次的物品項。選取該數(shù)據(jù)集最近15天的行為數(shù)據(jù)作為測試集,其他作為訓練集。最終經(jīng)過處理的數(shù)據(jù)集如表2所示。
表2 Tmall數(shù)據(jù)集Table 2 Tmall dataset
本文將提出的DC-HetGNN 與以下新近的序列化推薦模型進行比較,并給出不同模型的時間復雜度。
SR-GNN[4]:將會話序列構(gòu)造為同構(gòu)圖,并利用GNN學習項嵌入。
HetGNN[5]:將會話序列構(gòu)造成異構(gòu)圖,通過神經(jīng)網(wǎng)絡(luò)模塊編碼聚合采樣同構(gòu)和異構(gòu)圖節(jié)點,以端到端的方式訓練模型,在聚類、分類和歸納任務中有出色表現(xiàn)。
BPR-MF[8]:該算法利用矩陣分解學習用戶偏好,提出了一種通用的個性化排序優(yōu)化準則BRP-opt,并將其應用到MF中。
GRU4Rec[9]:利用會話并行小批量訓練過程,采用基于排序的損失函數(shù)對用戶序列進行建模。
FGNN[11]:利用節(jié)點分類和圖分類學習序列最終嵌入。
TGSRec[12]:同時考慮序列中時間動態(tài)并捕捉物品與用戶之間的依賴關(guān)系。
為了方便復雜度描述,記n表示節(jié)點數(shù),d表示隱藏層特征維度。各模型時間復雜度如表3所示。
表3 模型時間復雜度Table 3 Time complexity of model
從表3 中可以看出,本文模型DC-HetGNN 時間復雜度相較于其他基線模型沒有指數(shù)級的增長。
在本文模型中,嵌入維度為128,最小批大小為200,線圖通道中卷積層數(shù)為2 層,學習率設(shè)置為0.000 1。節(jié)點的異構(gòu)鄰居數(shù)是一個非常重要的參數(shù),這組參數(shù)包括用戶鄰居數(shù)、物品鄰居數(shù)和行為序列鄰居數(shù)。經(jīng)過在兩個數(shù)據(jù)集中的大量實驗,在Diginetica數(shù)據(jù)集中,用戶鄰居數(shù)設(shè)置為12,物品鄰居數(shù)設(shè)置為8,行為序列鄰居數(shù)設(shè)置為1時,模型的性能最好。在Tmall數(shù)據(jù)中,用戶鄰居數(shù)設(shè)置為1,物品鄰居數(shù)為1,行為序列鄰居數(shù)設(shè)置為15,模型性能最好。在實驗過程中,通過自動更新學習率,最終在學習率lr=0.000 1 時,模型性能在數(shù)據(jù)集Diginetica 和Tmall 中都是最好的。對比模型的超參數(shù)設(shè)置除特別指出的外,其他的與原文中的設(shè)置相同。
本文在Top-n推薦場景中,采用兩個推薦系統(tǒng)中常用指標來評估模型,分別為Recall@n和MRR@n,其中n=10,20,50。
本節(jié)將給出不同對比模型和本文的模型DCHetGNN 的比較結(jié)果。表4 為本文模型在Tmall 和Diginetica 數(shù)據(jù)集中不同n值下與其他基線模型的性能對比。
表4 在兩個數(shù)據(jù)集中模型推薦性能Table 4 Recommended performance of all models on two datasets 單位:%
從表4可以看出,模型DC-HetGNN在Top-n推薦場景中較其他模型取得了較好的性能。因為DCHetGNN將用戶行為序列構(gòu)造成包含項目節(jié)點、用戶節(jié)點和序列節(jié)點的異構(gòu)圖。異構(gòu)圖包含復雜的依賴關(guān)系,可以顯示項之間的轉(zhuǎn)換、物品間的轉(zhuǎn)換、項與用戶之間的連接關(guān)系。與HetGNN相比,大部分情況下,在相同指標下有所提升。HetGNN關(guān)注復雜物品間的轉(zhuǎn)換,但忽略了用戶行為序列之間的關(guān)系,本文在異構(gòu)圖學習通道的基礎(chǔ)上加入異構(gòu)圖的線圖學習通道,線圖通道描述了用戶行為序列級的關(guān)系,這樣可以使生成的序列嵌入更加具有表現(xiàn)力。在n=50時,與基準模型SR-GNN對比,在數(shù)據(jù)集Diginetica中Recall提升了8.52個百分點,MRR提升了18.49%;在數(shù)據(jù)集Tmall 中Recall 和MRR 分別提升了4.19 個百分點和16.06%。與原模型HetGNN相比,在兩個數(shù)據(jù)集中,Recall分別平均提升0.82%和2.09%,與GRU4Rec在各項指標上均有提升。SR-GNN和GRU4Rec兩個都是基于圖神經(jīng)網(wǎng)絡(luò)的模型,其中,GRU4Rec的核心是一種RNN 的變體,RNN 對序列化數(shù)據(jù)比較敏感,但是RNN 只能模擬連續(xù)項之間的單向傳遞,不能考慮遠距離物品之間的依賴關(guān)系,從而會忽略行為序列中的一些信息。SR-GNN 將用戶行為序列構(gòu)造為同構(gòu)圖,這種同構(gòu)圖只具有項目之間的轉(zhuǎn)換,忽略了行為序列中的其他信息,特別是用戶信息。BRP-MF使用矩陣分解MF 來學習用戶偏好,但MF 不能很好地處理序列化數(shù)據(jù),因此最終的結(jié)果并不理想。DCHetGNN 與新近模型FGNN 相比,在指標MRR@n和Recall@n中平均分別提升2.08%和0.78%,F(xiàn)GNN 雖然將圖分類和節(jié)點分類相結(jié)合,但并未考慮用戶行為序列之間的關(guān)系。與TGSRec 相比,在指標MRR@n和Recall@n中平均分別提升2.70%和0.49%,TGSRec考慮了序列內(nèi)部時間節(jié)點因素對于用戶偏好的影響,但缺乏用戶長期偏好的參考。
學習率lr是模型訓練中一個重要的超參數(shù),它決定了目標函數(shù)是否收斂到局部最小值以及何時收斂到最小值。本文設(shè)置了不同的學習率對模型進行訓練,實驗結(jié)果如圖7所示。
圖7 不同n 值下的模型學習率Fig. 7 Learning rate of model under different n values
從圖7 可以看出,模型在不同n值下,當學習率lr=0.000 1時,在Tmall和Diginetica數(shù)據(jù)集上性能都是最好。因此,選擇lr=0.000 1作為本文模型的最佳參數(shù)。
在圖網(wǎng)絡(luò)學習過程中,特征嵌入維度的選擇對推薦結(jié)果好壞起到了重要的作用,過多特征維度嵌入設(shè)置并不一定會使推薦效果最優(yōu),甚至導致過擬合。過低的特征維度會使圖網(wǎng)絡(luò)學習效果變差,為了得到本模型最佳嵌入維度,本文對嵌入維度的選擇在兩個數(shù)據(jù)集中進行了大量實驗,并繪制了實驗結(jié)果圖,效果圖如圖8所示。
圖8 不同嵌入維度下各指標的值Fig. 8 Value of each indicator under different embedded dimensions
在圖8中,當嵌入維度從8到128之間變化時,在兩個指標和數(shù)據(jù)集中結(jié)果都會增加,應為隨著維度的增加,圖網(wǎng)絡(luò)可以更好地學習特征。但當嵌入維度進一步增加時,結(jié)果變得穩(wěn)定或者下降,這可能是過擬合的原因。
在模型的訓練過程中,目標函數(shù)會在某一時刻得到最優(yōu)值。此時繼續(xù)訓練模型就沒有意義,因為模型的性能很難得到明顯的提升。因此,何時停止訓練模型,節(jié)省時間很重要。本文選取常用優(yōu)化器Adam和優(yōu)化器SGD(stochastic gradient descent)并使用相同的環(huán)境與參數(shù)分別進行實驗,并通過繪制模型的損失曲線來判斷模型何時收斂。訓練過程中的損失曲線如圖9所示。
圖9 模型訓練的收斂過程Fig. 9 Convergence process of model
從圖9可以看出,使用Adam優(yōu)化器比使用SGD優(yōu)化器收斂速度更快,但是精度并沒有SGD高,為了降低大量的訓練時間,本文選取Adam作為本文模型的優(yōu)化器。本文模型使用Adam優(yōu)化器在Tmall數(shù)據(jù)集和Diginetica 數(shù)據(jù)集中分別在epoch 為14 和13 時達到收斂。因此可以在訓練模型時,將epoch分別設(shè)置為14 和13。使用SGD 優(yōu)化器需要更多輪的訓練次數(shù)才能使模型達到收斂。
節(jié)點的鄰居數(shù)是本文模型一個重要的超參數(shù),本文在進行大量實驗后,得到節(jié)點的鄰居數(shù)在兩個數(shù)據(jù)集中的最佳值,結(jié)果如圖10所示。
圖10 不同類型節(jié)點鄰居數(shù)下Recall@50的值Fig. 10 Recall@50 under different types of node neighbour number
從圖10 可以看出,在Tmall 數(shù)據(jù)集中,用戶鄰居數(shù)設(shè)置為1,物品鄰居數(shù)為1,行為序列鄰居數(shù)設(shè)置為15,模型性能較好。與Tmall 數(shù)據(jù)集不同的是,Diginetica數(shù)據(jù)集中,用戶鄰居數(shù)設(shè)置為12,物品鄰居數(shù)設(shè)置為8,行為序列鄰居數(shù)設(shè)置為1時,模型的性能更好。這是因為本文模型需要不同數(shù)量的鄰居來提取不同長度用戶行為序列中的信息。如,在Diginetica數(shù)據(jù)集中,用戶鄰居數(shù)的最優(yōu)值為12,而在Tmall數(shù)據(jù)集中,用戶鄰居數(shù)的最優(yōu)值為1,可以看出,在不同場景中,使用過多的異構(gòu)鄰居來提取信息,可能會受到噪聲節(jié)點的干擾,從而降低模型的性能。
本文考慮到在現(xiàn)實世界中,用戶行為序列通常有不同的長度,會對本文模型產(chǎn)生影響,故將Tmall和Diginetica 中的序列分成兩個不同長度的組,并分別命名為短序列組和長序列組。其中,短序列組包含長度小于等于5的序列,長序列組包含長度大于5的序列。DC-HetGNN 與SR-GNN、GRU4Rec、HetGNN在Recall@20 上的短序列組和長序列組的推薦結(jié)果對比如圖11所示。
圖11 長序列和短序列的Recall@20的值Fig. 11 Recall@20 of long sequences and short sequences
從圖11可以看出,在大多數(shù)情況下,DC-HetGNN在不同序列長度下優(yōu)于在Tmall 和Diginetica 上的所有基準模型。對于DC-HetGNN來說,同時關(guān)注了長序列和短序列建模,短序列更能及時地反映用戶的偏好轉(zhuǎn)移,長序列中含有用戶歷史行為序列,包含噪聲,因此本文模型在短序列上的性能表現(xiàn)優(yōu)于長序列。
為了研究DC-HetGNN 層數(shù)對性能的影響,本文對模型設(shè)置不同層數(shù)并進行實驗對比。本文將模型的層數(shù)范圍設(shè)為layer=1,2,3,4。實驗結(jié)果如圖12所示。
圖12 模型層數(shù)性能對比Fig. 12 Performance comparison of the number of layer
從圖12可以看出,DC-HetGNN在兩個數(shù)據(jù)集上對層數(shù)的取值不是很敏感。層數(shù)設(shè)置為2 時是最好的,當層數(shù)大于2時,性能略有下降。
本文將異構(gòu)圖神經(jīng)網(wǎng)絡(luò)HetGNN 和轉(zhuǎn)換后的異構(gòu)圖的線圖L(HetG)結(jié)合并應用于用戶行為序列的推薦。首先,將行為序列構(gòu)造成包含多種類型節(jié)點的異構(gòu)圖。然后,使用HetGNN和L(HetG)學習包含復雜的項目轉(zhuǎn)換和用戶信息的項目嵌入。最后,利用注意力網(wǎng)絡(luò)生成具有強大表達能力的序列嵌入,從而使學習到的序列嵌入能夠表達用戶的特定偏好。實驗結(jié)果表明,本文方法優(yōu)于其他常用方法。
文中使用了兩個電子商務數(shù)據(jù)集,由于數(shù)據(jù)集中字段的限制,在構(gòu)建異構(gòu)圖時只考慮三種類型的節(jié)點。在接下來的研究中,將繼續(xù)研究具有多種類型節(jié)點的真實數(shù)據(jù)集,這樣學習到的序列嵌入將具有更強大的表達能力。