陳源鵬,古天龍,賓辰忠+,梁 聰,王文凱,李云輝
(1.桂林電子科技大學 計算機與信息安全學院,廣西 桂林 541004;2.桂林電子科技大學 廣西可信軟件重點實驗室,廣西 桂林541004)
隨著互聯網技術的迅速發展,給人們的工作和生活帶來了很多便利,但也帶來了信息過載的問題。在旅游出行方面,旅游景點推薦系統能幫助游客緩解信息過載問題,是當前智慧旅游的研究熱點。當前個性化旅游景點推薦的研究主要是使用游客的個人信息和游客與景點的交互信息,預測出游客對景點的偏好程度。然而,在許多向游客提供服務的系統中,游客的個人信息是未知的,只有游客與景點的歷史游玩行為信息。因此,對有限的游客與景點的交互行為進行建模并生成相應的推薦是非常重要的,基于序列挖掘的推薦方法應運而生。在基于馬爾科夫鏈的方法中,Yu等[1]根據用戶的歷史行為來預測用戶的下一次行為。由于很強的獨立性假設,歷史行為的獨立組合限制了預測準確度;在深度學習的推薦方法中,Hidasi等[2]利用循環神經網絡(recurrent neural networks, RNNs)挖掘用戶與項目的交互序列中用戶的特征,但每條序列中沒有足夠的用戶行為,難以獲得精確的用戶表示。針對這些問題,提出了一種融合圖表示學習和序列挖掘的景點推薦方法,考慮同一游客游玩的景點和景點之間的關系,以及不同游客游玩的景點序列之間的關系,挖掘出精確的游客向量表示,從而生成更加準確的推薦結果。
近年來,隨著旅游推薦系統不斷取得新的進展,衍生了許多基于序列挖掘的推薦方法,包括傳統的推薦方法、基于馬爾科夫鏈的序列建模方法和基于RNNs的方法。圖上的神經網絡的方法是使用圖神經網絡模型,不僅考慮了同一序列項目之間的關系,而且進一步考慮不同序列之間的相互影響,從而引起了學術界的關注和研究。
傳統的推薦方法中,矩陣分解方法[3,4]是推薦系統的一般方法,主要目標是從用戶項目評分交互矩陣中分解出兩個矩陣,分別表示為用戶特征矩陣和項目特征矩陣。它不適合序列挖掘的推薦,因為用戶的偏好僅僅依賴一些積極的評分用戶。基于項目的協同過濾方法[5]能夠解決矩陣分解中的不足,它計算用戶訪問的項目序列中共現項目之間的相似度,通過項目間的相似度進行推薦。這些方法沒有考慮項目的序列語義信息,僅僅根據最后一次交互的項目生成的推薦。
然后出現了基于馬爾科夫鏈的方法,根據用戶的歷史行為預測用戶的下一個行為。Yu等[1]從用戶與項目的個性化交互行為中顯露出的項目之間潛在的產品捆綁關系,挖掘出項目潛在的關聯語義,對每兩個相鄰項目之間的序列行為建模,并為每條序列的用戶提供更準確的預測。然而基于馬爾科夫鏈的模型主要缺點是過于獨立性假設,獨立地組合了歷史交互行為,從而限制了推薦的準確度。
深度學習的方法中,對于基于序列挖掘的推薦,產生了許多融合RNN的方法。Hidasi等[2]首先提出了在基于序列挖掘的推薦系統上利用循環神經網絡,并將其擴展具有并行RNN[6]的體系結構,根據項目特征對序列進行建模;Tan等[7]運用適當的數據增強技術且考慮了用戶行為的時間變化,提高了循環模型的性能;NARM[8]在RNN上使用具有“編碼-解碼”結構的神經注意推薦機制學習用戶的序列行為和主要偏好;ZHANG等[9]在基于軌跡挖掘模型中提出多條旅游序列同時訓練,把同批次訓練的其它景點作為負樣本訓練,主要目的是提高模型訓練速度和提供高質量的負樣本。
圖神經網絡方法中,神經網絡已經被用于生成圖結構的數據的表示,比如社交網絡和知識庫。Perozzi等[10]提出了DeepWalk來學習基于隨機游走的圖中節點表示,用Skip-gram和Hierarchical Softmax模型對隨機游走序列中每個局部窗口內的節點對進行概率建模,最大化隨機游走序列的似然概率。Node2Vec[11]進一步擴展了Deepwalk算法,是最具有代表性的無監督網絡嵌入算法,它使用廣度優先搜索(BFS)和深度優先搜索(DFS),分別探究圖中結構性質和圖中節點內容的關系。另外,經典的神經網絡CNN和RNN也應用于圖結構的數據。Duvenaud等[12]介紹了一種直接作用于圖上的卷積神經網絡,網絡模型的輸入可以是任意大小的和形狀的圖。Kipf等[13]提出了一種基于卷積神經網絡的高效的半監督學習方法,通過譜卷積的局部一階近似選擇卷積結構,該模型線性地擴展圖形邊的數量,并學習了編碼局部圖形結構和節點特征的隱表示。然而這些方法只能在無向圖上實現,因此,Gori等[14]和Scarselli等[15]提出了將圖神經網絡(graph neural networks,GNNs)以循環神經網絡的形式對有向圖進行操作。門控圖神經網絡[16]是在GNNs上進一步改進,使用門控循環單元和隨時間反向傳播的優化算法計算梯度。最近,GNNs被廣泛用于許多不同任務,例如,腳本預測[17]、情景識別[18]等。與上述工作相比,本文提出了一種融合了圖神經網絡和序列挖掘的推薦方法,將序列數據構建為圖的結構,計算出圖中節點之間相互影響的權重值,進一步準確地學習得到景點的向量表示,還采用注意力機制將景點向量組合為用戶偏好的向量表示,從而產生更為準確的推薦結果。
本節主要介紹提出的GRL-SM,將圖表示學習方法應用于基于序列挖掘的推薦方法。首先簡單地介紹了所提方法的模型框架,然后對序列挖掘的方法進行了公式化的描述,接著對景點序列圖的構造進行了說明,最后對GRL-SM進行了詳細的描述。
GRL-SM方法通過把序列數據構建為有向圖的圖結構的數據,用圖神經網絡來捕捉節點之間豐富的序列語義信息。模型框架如圖1所示,將每名游客游玩的景點序列符號化,形成序列si(i為游客序列下標)。首先,將旅游數據集中所有游客游玩的景點序列構建為一個有向圖,其中每一名游客游玩的景點序列設計為圖中的一個子圖,如-------- 框所示;然后,通過圖神經網絡依次地處理每名游客的景點序列,以此獲得序列中景點的隱向量表示;其次,利用游客子圖中節點表示的景點的隱向量經過注意力網絡挖掘出游客的長期偏好的嵌入向量Sl,并把序列中最后一個景點的隱向量視為短期興趣的嵌入向量Sh,之后將它們經過線性轉換得到游客的景點序列向量Su;最后,對于每名游客游玩的景點序列,經過softmax計算出游玩的每個景點的概率。

圖1 模型框架
序列挖掘的景點推薦方法根據當前游客游玩的景點序列預測下一個游客游玩的景點,因此可以將相關問題表述如下:
定義1 游玩的景點記錄:旅游數據中的游客u在時間t游玩了景點v,則游玩的景點記錄可概括為由3個屬性組成:。
例如:,表示游客Alice在2019年2月3號去到了漓江景點游玩。
定義2 游玩的景點序列:游客u游玩了一系列的景點,把這些景點按照時間t的順序組成一條關于游客u的旅游景點序列s。
例如:s:,…,,…,,其中s表示游客u游玩的一系列景點,也將其定義為游客u的游玩景點序列,N是景點序列的長度,景點是按照時間的順序排序。

每名游客游玩的景點序列s可以構建為一個有向圖Gs=(Vs,Es),序列圖中每個節點vs,i表示一個景點,邊(vs,i-1,vs,i)表示序列s的游客游玩了景點vs,i-1之后,接著去游玩了景點vs,i。因為序列中的景點可能會重復多次出現,所以為每條邊都設置一個權重值,表示該邊的起點到終點間信息傳播的權重值。我們將每一個景點v嵌入到相同的向量空間,通過圖神經網絡學習出景點v的隱向量V∈Rd,維度為d。然后利用圖中景點隱向量表示出景點序列s的游客的向量表示。
描述如何通過圖神經網絡獲得節點的隱向量。圖神經網絡能夠考慮到豐富的節點連接關系并且能自動地提取圖中節點特征,適合用于基于序列挖掘的推薦。因此通過融合圖神經網絡來學習游客游玩的景點序列中景點的向量表示。以下介紹序列圖中景點向量表示的學習過程,對于序列圖Gs中的景點vs,i,其更新過程如下
(1)
(2)
(3)
(4)
(5)

As定義為兩個鄰接矩陣A(out)和A(in)的拼接矩陣,這兩個鄰接矩陣分別表示序列圖中節點的出度信息和入度信息的權重矩陣。例如圖2所示,上面部分表示為序列s=[v1,v2,v3,v2,v4]的節點的圖結構,下面部分表示其相應的連接權重矩陣As。顯然,當每個序列圖的節點連接結構發生改變的時候,連接矩陣As也會發生相應的變化,進一步體現了圖結構能夠處理多樣化連接結構的序列圖的能力。

圖2 序列圖的例子和矩陣As
對于每一個景點序列圖Gs,圖神經網絡同時對圖中的所有景點進行計算。式(1)在連接權重矩陣As的約束下,用于計算不同景點之間的信息傳播。具體來說,它提取當前景點鄰域景點的聚合隱向量,作為圖神經網絡的輸入;然后更新門和重置門分別決定信息的保留和丟棄。式(4)利用前一時刻狀態值和當前時刻的輸入狀態求得候選狀態;最后,前一時刻隱藏狀態和候選狀態經過更新門的控制計算出輸出狀態。通過不斷更新序列圖中所有的景點向量直至收斂,得到最終的景點向量表示。
許多基于序列挖掘的推薦方法都假設每條序列都存在一個用戶的隱向量表示。在提出的方法中,游客的隱向量表示直接由游客游玩的景點序列向量表示,而序列向量表示則由序列中景點向量組合表示。為了向游客推薦更準確的景點,提出的方法中采用注意力機制學習出景點序列中蘊含的游客的長期偏好和短期興趣,將長期偏好和短期興趣組合表示出游客的隱向量表示。
將所有游客游玩的景點序列經過圖神經網絡學習之后,可以獲得所有景點的向量。為了獲得游客的隱向量表示Su∈Rd,我們首先考慮景點序列s游客的短期興趣Sh,對于景點序列s=[vs,1,vs,2,…,vs,n],將景點序列最后一個景點vs,n的向量Vn視為短期興趣Sh,即Sh=Vs,n。
考慮景點序列s的游客的長期偏好Sl,將通過聚集游客游玩的所有景點向量組合表示。然而每個景點特征信息對于組成長期偏好的重要程度是不一致的,所以不能直接將所有景點特征向量作求和運算,我們在每個景點向量上采用注意力機制,獲取每個景點向量的注意力權重,利用注意力權重與景點向量的加權求和求出游客的長期偏好Sl
(6)
參數q∈Rd和W1,W2∈Rd×d控制景點嵌入向量的權重。
最后,將景點序列長期偏好和短期興趣進行線性組合,求出游客的向量表示Su
Su=W3[Sh;Sl]
(7)
矩陣W3∈Rd×2d將兩個組合的向量壓縮到Rd向量空間。

(8)
(9)

(10)
最后,使用隨時間反向傳播算法(BPTT)去訓練提出的GRL-SM模型,Adam優化算法來優化模型的參數。考慮到數據集中游客游玩的景點序列長度相對較短,因此為了防止模型訓練過擬合,選取了相對較小的訓練步數。
本節主要描述實驗中使用的數據集,實驗對比的基線模型和評價指標,通過實驗去驗證提出的方法性能,最后將提出的GRL-SM方法和最近推薦論文中采用的基線模型方法進行性能比較。
我們將提出的方法在兩個真實實驗數據集上進行實驗,桂林旅游數據集和上海旅游數據集。數據集是在攜程網web標簽中的游客評論中爬取。爬取桂林和上海所有景點下的評論中的游客ID和評論時間,經過數據清洗和處理,近似地把游客評論景點的時間作為游玩的時間,故將每名游客游玩的數據按照評論的時間順序進行處理,構建成游客游玩的景點序列。實驗中,分別爬取到19 725條桂林旅游記錄,上海旅游記錄為179 553條。為減少這兩個數據集數據噪聲的影響,過濾掉序列中景點出現次數小于5的景點和游玩的景點序列長度小于2的序列,最后桂林數據集包含了283個旅游景點,3890名游客游玩的景點序列;上海旅游數據集包含了2618個旅游景點,16 501名游客游玩的景點序列。
為比較提出的方法的性能,將本文方法與以下推薦領域具有代表性的基線模型比較。
POP:推薦在訓練集中最受歡迎的前N個游玩的景點給游客。
Item-KNN[5]:該方法是推薦系統中“景點-景點”常用方法,推薦與游玩的景點序列中最后一次游玩的景點相似的景點,其中的相似度是序列之間的余弦相似度。
BPR-MF[3]:常用的矩陣分解方法之一,通過隨機梯度下降算法(SGD)優化pairwise ranking的目標函數。
GRU4REC[2]:使用循環神經網絡的方法,為基于序列的推薦進行游客交互序列建模,向游客推薦景點。
NARM[8]:利用循環神經網絡和注意力機制捕捉游客的主要興趣和序列行為,作為游客最后的特征表示,從而向游客推薦景點。
在旅游景點推薦任務里面,通常需要為游客排列出top-N景點給游客,所以每個任務可以理解成為Learning to Rank任務。因此任務性能使用以下評價指標。
實驗中定義指標Recall@10如式(11)所示,表示在預測得分列表前10名景點中正確推薦的景點所占的比例,用來作為預測精確度的指標
(11)
hitm@10表示對于第m次預測景點時,如果預測推薦列表中包含游客真實去的景點,hitm@10=1,否則hitm@10=0,M表示所有預測總次數。
指標MRR@10的定義如式(12)所示,表示推薦正確景點的排名取倒數作為準確度,之后求平均值
(12)
rankm@10表示在第m次預測得分排名前10名中,正確的景點在預測推薦列表中的具體排名,排名超過10時,排名的倒數設置為0,即1/ranku=0,M表示所有預測總次數。
本實驗中,圖神經網絡中隱藏單元(HiddenSize)的數量和批次處理序列的大小(BatchSize)選擇會對實驗的性能和模型訓練時間產生影響。神經網絡中隱藏單元數量越大,就會導致更長的訓練時間;然而,批次處理序列的大小對訓練時間的影響全然相反,批次處理序列越大,即同時處理景點序列就越多,每個epoch訓練旅游數據所需要的時間就會越少,即模型完成所有epoch訓練所需時間就越少。
性能驗證實驗中參數的設置:隱藏單元數量設置為20-300,由于實驗環境設備條件有限,隱藏單元最大設為300;批次處理序列的大小設置為20-100。桂林數據集實驗的結果見表1、表2,上海數據集實驗結果見表3、表4。

表1 桂林旅游數據集實驗結果(Recall@10/%)

表2 桂林旅游數據集實驗結果(MRR@10/%)

表3 上海旅游數據集實驗結果(Recall@10/%)

表4 上海旅游數據集實驗結果(MRR@10/%)
隱藏單元數量越多說明神經網絡模型的復雜程度越高。從桂林數據集的結果上看,批次處理序列大小相同的情況下,Recall@10和MRR@10的性能隨著隱藏單元數量的增加過程中先增加后下降,在隱藏單元數量為100時達到最優;從上海數據集的結果上看,批次處理序列大小相同的情況下,Recall@10和MRR@10的性能表現趨勢是隨著隱藏單元數量的增加不斷降低,在隱藏單元數量為20時達到最優。但這兩個數據集的實驗性能在隱藏單元數量逐漸增大的過程中都是逐漸降低的,是由于爬取到的數據集的數據相對稀疏,隱藏單元數量過大,模型的訓練會受到過擬合的影響。在本次實驗中使用多層神經網絡性能沒有得到明顯的提高,反而是降低的,所以實驗中使用單層神經網絡。
在本次實驗中,在桂林旅游數據集上隱藏單元數量設置為100,批次處理序列的大小設置為20,在上海旅游數據集上隱藏單元數量設置為20,批次處理序列的大小設置為20。所有的參數初始化都使用平均值為0,標準差為0.1的高斯分布,隱藏層和輸出層的激活函數使用的是tanh,訓練方法為隨時間反向傳播算法(BPTT),使用Adam優化算法更新參數。實驗結果對比見表5。

表5 實驗結果比較
從表5的實驗結果中看出,對于傳統的方法POP,其性能相對較差,這種簡易的模型僅是基于不斷重復的共現景點或者連續景點進行推薦,這在序列的推薦方法上是存在問題的。Item-KNN與矩陣分解方法BPR-MF相比,具有更好的結果。BPR-MF不適合直接用于基于序列的推薦,因為新的序列沒有可以預先計算的特征向量,表明使用矩陣分解方法在基于序列的推薦上是不切實際的。
Item-KNN只考慮了景點之間的相似度,沒有考慮游玩的景點序列信息,而在長短期記憶模型GRU4REC和NARM中,它們使用基于神經網絡的方法,優于傳統的方法,說明了深度學習在推薦領域的實用性;并且這兩個模型使用了循環神經網絡去捕捉游客的長期偏好,顯式地為游客的全局行為偏好建模,并考慮游客前面已經游玩的景點和下一次游玩的景點之間的信息傳播,從而獲得優于那些傳統方法的結果。然而它們的性能仍低于提出的方法。GRL-SM進一步考慮了序列中景點之間的信息傳播,從而將每個序列建模為一個圖,利用圖神經網絡捕捉該游客游玩過的景點之間的復雜、隱式的連接。而在NARM和GRU4REC中,它們顯式地為每名游客建模,通過分離的序列獲得游客表示,而忽略了景點之間可能的交互關系。因此,提出的方法對序列行為的建模能力更強。
此外,GRL-SM采用注意機制生成游客的隱向量表示,注意力機制可以自動地選擇景點序列中重要的景點特征信息和忽略當前景點序列中的噪聲和無效行為信息。然而其它的RNN模型,如GRU4REC和NARM,它們在景點信息傳播過程中不能選擇重要的信息,都是通過所有游玩過的景點向量表示用戶長期偏好,這樣是不夠充分的。當游客當前的游玩興趣變化大的時候,傳統模型不能有效地處理噪聲的游玩序列。
本文提出了一種融合圖表示學習和序列挖掘的推薦方法,即GRL-SM,將圖表示學習模型應用到基于序列挖掘的旅游景點推薦上。相比只考慮項目單向信息傳播的傳統推薦方法,GRL-SM不僅使用圖神經網絡挖掘序列中各景點之間的傳播關系和各序列之間的交互影響,彌補了序列挖掘中忽略了景點上下文影響的不足;還綜合地考慮了游客的長期偏好和短期興趣的結合,在一定程度上提高了序列挖掘方法的推薦效果。在真實旅游數據集上的實驗結果驗證了所提出的GRL-SM方法在推薦質量評價指標上有明顯提高。未來的工作將進一步研究強化學習在推薦系統中的應用,高效地表征“游客-景點”的交互,以及關注和研究其它輔助信息在推薦系統中的應用。