于嘉瑋, 薛 濤
(西安工程大學 計算機科學學院, 西安 710048)
隨著互聯網技術和相關產業的迅速發展, 接入互聯網中的設備和應用呈現指數上升的趨勢. 推薦系統(recommendation system)作為一種有效過濾信息的手段, 從被提出到現在, 誕生了大量的理論、技術和應用.協同過濾(collaborative filtering)作為推薦系統的經典算法, 基于用戶-項目交互矩陣建模用戶偏好, 為相似的用戶推薦相似的物品. 因為其易于使用并且能有效捕捉用戶偏好被廣泛應用在實際項目中, 然而, 基于協同過濾的推薦存在數據稀疏和冷啟動問題[1], 并且在用戶量越來越大的情況下, 其計算的復雜度也急劇增加.
近年來, 將知識圖譜(knowledge graph)中的實體及關系信息引入推薦系統中是有效緩解冷啟動問題的方法[2]. 目前, 融合知識圖譜語義信息的方法大致可分為兩類: 基于嵌入的方法和基于路徑的方法. 其中, 基于嵌入的方法主要是以TransE[3], TransR[4]為代表的距離翻譯模型, 其核心思想是將實體和關系映射到連續的向量空間中, 同時可以保留知識圖譜原有的結構. 基于路徑的方法以構造元路徑[5]為核心, 有很好的推薦效果以及可解釋性, 缺點是當關系信息很多時需要手動構建元路徑, 工作量較大. 以上方法從語義關聯的角度出發, 得到的節點嵌入表示更適合知識圖譜的一些內部任務使用, 如: 知識圖譜補全、三元組分類等, 而不是用于推薦任務. 為了使得到的語義信息更適合于推薦任務, 一種可行的方法是結合用戶-項目二部圖與知識圖譜, 構建協同知識圖譜(CKG)[6]. 從協同知識圖譜中挖掘語義信息, 并將獲取到的信息傳遞給推薦模型.
從知識圖譜中提取信息可以從圖結構的角度出發. 近年來, 圖卷積神經網絡被認為能夠很好地建模圖的結構屬性和節點特征信息[7], 空域圖卷積直接在圖結構上使用卷積操作獲取潛在的關系信息. 文獻[8]提出的GAT模型將圖卷積操作定義為利用注意力機制(attention)對鄰居節點進行有區別地聚合. 但是GAT 模型沒有充分利用邊上的信息, 且只能用于同構圖(homogeneous graph), 在后續的研究中仍有較大的改進空間. 文獻[9]改進了GAT 只能用于同構圖的問題, 首次將基于注意力機制的圖神經網絡用于異構圖, 但是沒有很好地聚合高階鄰居信息. 文獻[10]基于共同鄰居數目對知識圖譜中的每個實體鄰域進行排序采樣, 再沿著關系路徑逐層融合鄰居信息. 文獻[11]提出一種基于知識圖譜驅動的端到端的圖神經網絡推薦模型, 利用一個評分函數計算影響因子改變不同鄰居實體的聚合權重.
本文在HAN 模型的基礎上, 提出了一種融合協同知識圖譜高階鄰居特征的推薦模型CKG-HAN (collaborative knowledge graph hierarchical attention network).該模型首先將二部圖和外部知識圖譜融合成一個協同知識圖譜, 在協同知識圖譜中根據手動構建的元路徑將其分成多個同構子圖, 在每個子圖中使用注意力機制聚合節點鄰居信息, 針對原HAN 模型不能獲取高階信息的問題, 加入了一個信息聚合層, 該層能夠聚合多跳鄰居信息. 最后融合不同子圖的特征得到充分融合知識圖譜語義信息的節點嵌入表示. 在MovieLens-1M數據集上與原模型以及一些主流模型進行了實驗對比,CKG-HAN 在Top-K 推薦任務中, 準確率提升了1.1%,召回率提升了1.2%.
協同知識圖譜G由用戶-項目二部圖GI和外部知識圖譜G2融合而成. 二部圖表示為GI={(u,interact,i)|u∈U,i∈I},U代表用戶集合,I代表項目集合,interact代表用戶u與項目i有交互. 知識圖譜表示為G2={(h,r,t)|h,t∈E,r∈R},E代表實體集合,R代表實體間關系的集合.協同知識圖譜的一個示例如圖1 所示.

圖1 協同知識圖譜示例
從圖1 中可以看出, 用戶和項目之間的關系是單一的, 項目和實體之間包含多種不同的關系. 例如, 項目節點代表電影, 實體節點代表演員, 圖1 中的演員e1可以同時主演兩部電影i1和i3, 此時i1和i3就可以通過元路徑電影-演員-電影建立連接, 所有通過電影-演員-電影這條元路徑建立連接的項目構成一個子圖. 通過其他類型的元路徑建立連接的項目構成另外的子圖, 我們需要綜合同一項目在不同的元路徑下的特征得到其最終特征.
為了使推薦結果有更好的準確性和可解釋性, 我們不僅要對用戶和項目的交互進行建模, 還要考慮項目之間的關系信息. 知識圖譜在提供額外屬性信息的同時也蘊含大量的關系信息, CKG-HAN 模型首先要將知識圖譜與用戶點擊記錄充分融合成協同知識圖譜,作為輸入推薦模型的數據, 之后利用改進的分層圖注意力機制充分挖掘語義信息和高階鄰居信息, 得到最終的特征表示后, 計算特征間的相似度得到交互概率.CKG-HAN 模型的整體架構如圖2 所示.

圖2 CKG-HAN 模型架構
從圖中可以看出, 模型的處理過程分為兩個階段:
在構建協同知識圖譜階段, 需要預處理知識圖譜, 使知識圖譜中包含全部的項目以及與之相關的實體作為補充. 之后擴展二部圖, 加入一個代表關系的維度, 和知識圖譜中的三元組按行拼接在一起形成協同知識圖譜.
在推薦階段, 推薦模塊的處理分為節點注意力層和關系注意力層. 對于節點注意力層, 計算中心節點及其鄰居節點之間的注意力系數, 得到節點級注意力機制的特征表達. 對于關系注意力層, 聚合來自不同子圖的特征. 最后通過一個全連接層得到交互概率.
節點注意力層要解決的問題是如何學習節點鄰居的重要性并進行融合. 由于知識圖譜中的節點具有異構性, 不同類型的節點具有不同的特征空間, 所以需要一個變換矩陣MΦi, 將不同類型節點的特征投影到同一特征空間中. 變換過程如下所示:

其中,hi表示原始特征;h′i表示投影特征. 通過變換操作,節點注意力機制可以處理不同類型的節點.
在考慮鄰居節點對目標節點的重要性時, 注意力機制[12]不僅能夠加速模型訓練的過程, 而且能夠很好地捕捉局部信息, 很適合學習鄰居節點對于目標節點的重要程度. 對于節點對(i,j)和其對應的元路徑 Φ可以構造如下表示:

此外, 由于異構圖具有無標度性, 節點之間的連接分布不均, 少數節點有很多與之相連的節點, 多數節點則連接較少. 為解決上述問題, 可以重復若干次求注意力系數的操作, 即多頭注意力機制. 使用多頭注意力機制的好處是可以穩定模型學習的過程, 獲取更多關于鄰居節點的信息, 具體計算公式如下:

其中, ||表示拼接操作, 是一種集成多個注意力頭輸出結果的方式. 通過重復K次式(3)中的操作并拼接每次的結果, 得到多頭注意力機制的嵌入表示.

(2) GraphSage 聚合函數[15]將兩種特征進行拼接,并經過一個非線性變換:

(3) Bi-Interaction 聚合函數[6]考慮兩種特征之間的相互作用:

其中,W1和W2是線性變換矩陣; °表示兩個矩陣對應位置相乘的操作. 從后續的實驗中可以得出結論, Bi-Interaction 聚合函數效果最好, 因為其豐富了特征交互. 最后我們經過多個聚合層, 每次聚合相當于向外擴展了一跳, 因為從第二層開始, 每個聚合層的輸入是上一層計算后的輸出, 具體的層數作為超參數.
元路徑集合{Φ1,···,Φp}經過節點注意{力層, 可以得}到同一節點在不同元路徑下的特征表達, 用nΦ1,···,nΦp表示, 將其輸入關系注意力層進行進一步的處理. 節點注意力層的處理流程如圖3 所示.

圖3 節點注意力層處理流程
在經過節點注意力層的處理后, 我們得到了同一節點在不同元路徑下的特征表達, 每條元路徑代表一種關系信息, 每個節點都可能包含在多種不同的元路徑中. 關系注意力層主要解決的問題是如何聚合不同元路徑下的關系信息.
與節點注意力層中的操作類似, 定義一個可學習的向量q與一個全連接層, 計算得到注意力分數, 計算方法如下:

對注意力分數進行標準化處理, 得到不同元路徑下鄰居節點對目標節點 的相關性權重值, 最后利用學習到的權重作為系數, 我們可以融合這些不同元路徑下的節點信息, 以獲得最終的節點嵌入表示.
模型選用的損失函數為BPR 損失函數[16], 使用BPR 損失函數的目的是讓正樣本和負樣本之間得分之差盡可能大, 為觀測到的用戶與項目間的交互分配更高的分數, 損失函數定義如下:


圖4 關系注意力層處理流程
本文使用的實驗環境為Intel i7-9750H 處理器,NVIDIA GTX1660Ti 顯卡, 16 GB 運行內存. 軟件環境為Python 3.6, PyTorch 1.6.0.
本文模型在超參數的設置上經多次試驗得出一組較好的取值, 迭代次數200, 學習率0.005, 多頭注意力機制的頭數H為4, 聚合層的層數為3, 使用Adam 優化器進行學習率的自適應調節.
本文使用的數據集是電影推薦場景MovieLens-1M數據集, 該數據集包含6000 個用戶與近4000 部電影的100 萬條交互記錄. 根據數據集中出現的電影, 搜集電影相關的屬性信息來構建知識圖譜, 數據集中已有關于電影的類型信息, 所以本文在IMDB 上使用爬蟲獲取了與電影相關的導演和演員信息, 數據集的情況統計如表1 所示.

表1 數據集概況
其中, 知識圖譜中的3 種關系可以對應3 種不同的元路徑, 分別為電影-演員-電影MAM, 電影-導演-電影MDM, 電影-類型-電影MTM. 對于每一位用戶, 選取其有交互記錄的電影的80%作為訓練集, 20%作為測試集, 并且在訓練時加入一個隨機的無交互記錄的負例, 在測試時去除每個用戶有交互記錄的正樣本, 對其余項目給出預測. 本文采用的評價指標包括準確率Precision@K和召回率Recall@K,K表示推薦列表的長度, 表示為用戶推薦預測評分最高的K部電影,K的取值為[1, 5, 10, 20].
為了驗證模型的有效性, 本文選取了幾類主流的模型進行對比:
(1) FM[17]: FM 是一個結合支持向量機(SVM)和因式分解的模型, 使用因式分解的參數對變量之間的關系進行建模, 適用于數據稀疏的場景.
(2) NFM[18]: 由于FM 模型對于特征的組合僅限于二階, 缺少對特征之間深層次關系的抽取. 因此, NFM提出來就是在FM 的基礎上引入神經網絡, 實現對特征的深層次抽取.
(3) CKE[19]: 采用包括異構網絡嵌入和深度學習嵌入的兩種嵌入方法自動從知識圖譜中提取語義表示,通過執行知識圖譜嵌入和協作聯合過濾, CKE 可以同時從知識圖譜中提取特征并且從中獲取隱式的用戶和項目之間的關系.
(4) HAN[9]: 改進了GAT 只能用于同構圖的問題,首次將基于注意力機制的圖神經網絡用于異構圖.
在MovieLens-1M 數據集上, 將CKG-HAN 模型與上述幾種推薦算法進行了對比實驗. 現將對比結果繪制成表格, 統計各模型在K=20 的情況下的準確率與召回率, 結果如表2 所示.

表2 推薦模型性能對比
在推薦長度為20 時, 本文提出的CKG-HAN 模型與以上4 個基準模型相比, 在2 個評價指標上均取得了最佳效果. 與原HAN 模型相比, 在準確率上提高了1.1%, 在召回率上提高了1.2%. CKG-HAN 模型的優勢在于: (1)引入協同知識圖譜, 將交互記錄與知識圖譜兩個相互獨立的內容聯系在一起; (2)新增高階信息聚合層, 將鄰居節點的高階信息有區別地聚合到中心節點的表示中, 挖掘了基于元路徑的語義信息.
圖5 與圖6 是模型之間的詳細對比圖. 從圖中可以看出, 4 個基準模型中, FM 與NFM 由于更多地關注特征交互帶來的影響, 沒有引入額外的信息, 效果并不是很好, 由此可見引入知識圖譜這種結構化數據的必要性. CKE 效果較好, 影響其性能的原因可能是引入外部信息之后噪聲增多, 這也證明了需要對特征進行有區別地聚合的重要性. HAN 效果最佳, 因為其加入了注意力機制, 能夠有區別地進行鄰居聚合, 并且HAN的走勢平緩, 說明多頭注意力機制也能更好地穩定模型訓練過程. 實驗結果證明, CKG-HAN模型在基于協同知識圖譜的情況下, 在公共數據集上的Top-K 推薦任務中取得了更好的效果.

圖5 模型Precision 性能對比

圖6 模型Recall 性能對比
對于模型中的超參數設置, 本文也進行了實驗驗證其取值的影響. 在節點注意力層使用了多頭注意力機制, 圖7 顯示了頭數H在不同取值下對準確率的影響, 可以看出H的取值為4 時效果最好, 當H為6 時準確率反而降低, 這與GAT 模型中作者建議取值為2 或3 的結論相似.

圖7 多頭注意力機制的頭數性能對比
在聚合高階鄰居時, 本文使用了3 種不同的聚合函數, 圖8 中對比了這3 種聚合函數以及不使用聚合函數的情況.

圖8 聚合函數效果對比
從圖中可以看出, 不使用聚合函數的效果最差,fGCN聚合器在兩個指標上都優于fGraphSage, 一個可能的原因是GraphSage 沒有將中心節點特征與其鄰居節點特征進行交互.fBi-Interaction則增強了這一點, 在聚合多跳特征的同時進行多種形式的特征交互, 取得了最好的效果, 因此它證明了在執行信息聚合和傳播時特征交互的重要性.
本文在HAN 模型的基礎上, 主要針對其無法獲取高階信息的問題, 新增了一個聚合層聚合多跳鄰居信息, 從而提出了CKG-HAN 模型, 該模型能有區別地聚合節點周圍高階鄰居的信息, 得到蘊含豐富語義的節點特征表示. 然后結合MovieLens-1M 數據集和外部知識圖譜構建協同知識圖譜作為輸入數據, 在Top-K 推薦任務中CKG-HAN 取得了比原模型和幾類基準模型更好的效果, 準確率與召回率分別提升了1.1%和1.2%,證明我們成功將模型用于推薦領域并且取得了效果上的提升.
在實驗過程中我們發現, 隨著知識圖譜關系類型的增加, 需要手動構建大量元路徑, 生成很多子圖.在下一步的工作中, 將考慮不使用元路徑, 直接在同一張圖中進行計算; 當前用到的知識圖譜僅考慮了一些簡單的屬性信息, 引入更多信息會使計算更加復雜, 如何引入更豐富的語義信息也是一個值得改進的方向.