WWW2020
文章簡介:本文旨在利用用戶-商品交互數據來增強知識庫補全。使用了基于圖神經網絡的學習算法和生成對抗網絡來融合交互信息和知識庫數據。
原文
代碼
文章最后會介紹代碼結構。
目錄:
1 INTRODUCTION
2 RELATED WORK
2.1 Knowledge Graph Completion
2.2 Collaborative Recommendation and KGC Models
2.3 Generative Adversarial Networks
3 PRELIMINARY
3.1 Knowledge Graph Completion(KGC)
3.2 User Interaction
3.3 Interaction-Augmented Knowledge Graph
3.4 Task Description
4 THE PROPOSED APPROACH
4.1 Overview
4.2 Collaborative Representation Learning over Interaction Augmented KG
4.2.1 Learning Entity-oriented User Preference
4.2.2 Learning Preference-enhanced Entity Representation
4.2.3 Discussion
4.3 User Preference Guided Discriminator
4.3.1 Discriminator Formulation
4.3.2 Discriminator Loss
4.4 Query-specific Entity Generator
4.4.1 Generator Formulation
4.4.2 Policy Gradient
4.5 Optimization and Discussion
5 EXPERIMENT
5.1 Dataset Construction
5.2 Experimental Setting
5.2.1 Evaluation Protocol
5.2.2 Methods to Compare
5.2.3 Implementation Details
5.3 Results and Analysis
5.4 Detailed Analysis of Performance Improvement
5.4.1 Performance Comparison w.r.t. Sparsity Levels
5.4.2 Performance Comparison w.r.t. Hop Number
5.4.3 Ablation Study
5.5 Performance Sensitivity Analysis
5.5.1 Varying the amount of KG triples
5.5.2 Varying the amount of user interaction data
5.6 Case Study
6 CONCLUSION
1 INTRODUCTION
大多數的KGC(Knowledge Graph Completion,知識庫補全等同于KBC)方法都是設計一個新的學習算法來從知識圖譜中獲得表征。本文提出的切入點是利用實際應用獲得的數據(本文表現為用戶-商品交互數據)來加強KGC。這個切入帶你的靈感是因為在線應用系統和知識庫的實體有關聯,比如說推薦系統的數據集MOVIE-LENS知識庫Freebase在電影實體上有大面積重疊。用戶交互數據也的確包含了很多有潛在價值的信息,原文中Fig1圖解的很清楚這里就不搬運了。
之前也有結合用戶交互信息來做KGC和推薦系統的工作。包括:
基于路徑的方法(Recurrent knowledge graph embedding for effective recommendation.ACM2018),
基于正則化的方法( Transfer Learning for Item Recommendations and Knowledge Graph Completion in Item Related Domains via a Co-Factorization Model.ESWC2018),
基于圖神經網絡的方法( KGAT:Knowledge Graph Attention Network for Recommendation.KDD2019)。
這些方法的共同點是開發數據融合模型,然后在相同空間學習兩種數據(數據庫數據,用戶交互數據)的表征。作者認為上述這些方法不好(hurt the original representation performance using simple fusion strategy)。所以本文提出了UPGAN((User Preference enhanced GAN)模型,這個方法好(Such an approach is effective to alleviate the issues about data heterogeneity and semantic complexity)。
2 RELATED WORK
2.1 Knowledge Graph Completion
TransE,GNN等技術加持的各種模型,可以學到知識圖譜的圖結構信息,但是沒法融合用戶交互數據。
2.2 Collaborative Recommendation and KGC Models
最近有幾項研究旨在開發推薦系統和知識庫補全的復合模型。比如:
因子分解(Transfer Learning for Item Recommendations and Knowledge Graph Completion in Item Related Domains via a Co-Factorization Model.ESWC2018),
關系遷移(Unifying Knowledge Graph Learning and Recommendation: Towards a Better Understanding of User Preference.WWW2019),
多任務學習( Multi-Task Feature Learning for Knowledge Graph Enhanced Recommendation.WWW2019),
圖神經網絡(KGAT: Knowledge Graph Attention Network for Recommendation.KDD2019)。
這些研究將不同數據表征在一個空間,同時采用了兩套目標函數,來完成推薦系統和知識庫補全兩種任務。本文只考慮KGC這一種任務。
2.3 Generative Adversarial Networks
最近的研究將GAN用于圖數據( GraphGAN: Graph Representation Learning With Generative Adversarial Nets.AAAI2018)和異構信息網絡(Adversarial Learning on Heterogeneous Information Networks.KDD2019)上。這些方法用于節點分類等任務,無法用于我們的場景。也用于知識庫補全(KBGAN: Adversarial Learning for
Knowledge Graph Embeddings.NAACK-HLT2018/ Incorporating GAN for
Negative Sampling in Knowledge Representation Learning.AAAI2018),這類方法旨在生成高質量負樣本。
本文設計的模型,在D中融合用戶交互數據,G中生產負樣本來加強D。
3 PRELIMINARY
3.1 Knowledge Graph Completion(KGC)
KGC模型常見的套路是將實體和關系映射到低維空間,然后設計一個得分函數來計算輸入三元組的可信度。
3.2 User Interaction
將用戶和商品的交互也定義為三元組。一般交互可以包含很多種關系比如購買,點擊。這里方便起見交互為一種關系。
3.3 Interaction-Augmented Knowledge Graph
通過交互信息中商品和知識庫中實體的對齊,將交互信息和知識庫合成一張圖譜,節點有用戶節點u,商品節點i,實體節點e三種。設計一個參數dn代表節點n和用戶節點間的最小跳數(minimum hop number)。對于節點n,dn=0代表為用戶節點u,dn=1代表為商品節點i,dn>1代表實體節點e。
3.4 Task Description
等同于鏈路預測(link prediction)預測三元組中缺失的實體。
4 THE PROPOSED APPROACH
UPGAN介紹。
4.1 Overview
因為兩種數據的異構性,所以使用GAN來完成任務。G負責生成鏈路預測任務中需要預測的實體,D來判別生產實體的質量。G用來幫助D融合兩種數據的能力。本文的任務可以由下列公式表現:
a是G生成實體,模型總體架構見下圖:
4.2 Collaborative Representation Learning over Interaction Augmented KG
對于表征學習,簡單的方法是所有節點一視同仁進行嵌入。然而節點存在異構性,所以本文基于圖神經網絡設計了一個兩階段的學習算法。
4.2.1 Learning Entity-oriented User Preference
這一步是從實體節點e向用戶階段u的傳播(propogation),從圖2中看就是Layer2或者Layer3往Layer0方向進行訓練。公式2里第二項里的三元組(nj,r,nk)中dnj=dnk-1,即j為上一層節點k為下一層節點,從k往j(向圖2中layer0)的方向傳播。作者認為這樣做的好處是減少了交互信息的噪音,同時考慮了路徑的嵌入。作者這里還cue了下PTransE(Modeling Relation Paths for Representation Learning of Knowledge Bases,往期有筆記)。
4.2.2 Learning Preference-enhanced Entity Representation
和4.2.1反方向的訓練,不再贅述了。同時圖2里也解釋的蠻清楚了。這里用到了圖注意力機制。
4.2.3 Discussion
這里作者總結了一下4.2.1和4.2.3。注意本文的公式中,n表示所有節點(包括用戶u,商品i,實體e)。按照我的理解4.2.1中的v表示了從右到左學習得到的嵌入,4.2.2中得p表示了從左到右學習得到的嵌入。所以對于同一個節點h,在這一步會存在兩種不同的嵌入如公式8中。這樣做的另一個目的就是可以保證G中的嵌入沒有包含交互信息。
4.3 User Preference Guided Discriminator
與2.3中討論的GAN相比,UPGAN的特色是將4.2中學習到帶交互信息的嵌入應用到D中。
4.3.1 Discriminator Formulation
對于三元組(h,r,t),D輸入h和r可以得到實體t的概率分布(公式6)。三元組(h,r,t)的可信度/得分函數為公式7。公式7中xq的來歷見公式8。
4.3.2 Discriminator Loss
訓練過程中最小化的損失函數。注意4.2的表征學習也是通過這個損失函數訓練的。
4.4 Query-specific Entity Generator
G中不會用到用戶交互信息因為作者認為其中噪音很大。
4.4.1 Generator Formulation
對于輸入h和r,公式12產生了采樣概率分布。C是所有候選實體集合,a是最后采樣的實體組成負樣例(h,r,a)。
4.4.2 Policy Gradient
文章沿用KBGAN使用policy gradient進行訓練。Reward見公式13,損失函數公式14。
4.5 Optimization and Discussion
UPGAN首先對D進行預訓練,然后按照標準的GAN訓練過程,根據公式12進行采樣,根據公式9和公式14進行訓練。需要注意的是嵌入層的參數是和D一起訓練的。
本模型可能是第一個用GAN進行知識庫補全任務中使用到用戶交互信息的模型。
5 EXPERIMENT
5.1 Dataset Construction
經過對KB4Rec數據集的一系列預處理后,得到的數據集如表1。
構造數據集時用到BFS4跳遍歷實體(我的理解理論上最多layer6,初始實體在layer2)
5.2 Experimental Setting
5.2.1 Evaluation Protocol
采用鏈路預測(link prediction),指標有Mean Rank,top-k hit ratio,Mean Reciprocal Rank。
5.2.2 Methods to Compare
直接上圖吧:
5.2.3 Implementation Details
一些超參數,需要注意的是訓練使用DistMult初始化嵌入。G生成負樣例一次1024個,然后從中采樣200個。
5.3 Results and Analysis
見表3.
5.4 Detailed Analysis of Performance Improvement
5.4.1 Performance Comparison w.r.t. Sparsity Levels
將測試集按照答案實體的出現頻率分成五組,來驗證稀疏數據集上表現。
5.4.2 Performance Comparison w.r.t. Hop Number
測試不同hop數實體的表現(我的理解是layer2算1-hop,layer3算2-hop,以此類推)
5.4.3 Ablation Study
UPGAN以及3個閹割版本。第一行為去掉G普通負采樣,第二個為去掉兩階段學習使用R-GCN,第三個為去掉兩階段學習使用GAT(沒有用到用戶交互信息)。可以看出用戶交互信息還是對結果很有幫助。
5.5 Performance Sensitivity Analysis
5.5.1 Varying the amount of KG triples
采用不同訓練集大小考察模型的表現。
5.5.2 Varying the amount of user interaction data
采用不同用戶交互信息數量考察模型的表現。
5.6 Case Study
演示了如何從用戶交互信息來完成知識庫補全。
6 CONCLUSION
未來工作是推廣到更多的數據集上。
代碼結構(沒有用到的文件和一些輔助文件,這里就不囊括進去了):
checkpoint/
data/
-
Model/
base_model.py
UGAT_mlp.py
layers.py
generator_contact.py
-
pretrain/
trainer.py
base_trainer.py
init.py
-
train/
trainer.py
base_trainer.py
init.py
load_data.py
evaluation.py
util/
main_pretrain.py
main_upgan.py
接下來是詳細介紹:
-
checkpoint/
主要存放訓練中產生的ckpt文件 -
data/
存放訓練數據 -
Model/
存放模型。base_model.py
父類為torch.nn.Module,UGAT_mlp.py中模型的父類。get_user_all方法獲取了DistMult的嵌入,隨后對應公式3(這里有些奇怪,因為沒有調用到gnn_layer_1.forward。get_user_all中使用self.gnn_layer_1的過程很奇怪)。fetch_user_batch方法調用了layers.py進行公式4。UGAT_mlp.py
父類在base_model.py中。query_layer方法調用了layers.py中的GAT。form_query方法對應文章公式7和8。注意這里UGAT類有forward方法但是并沒有被用到過(代碼中沒有self.model.forward,只有self.query_layer.forward_rs這種。另外module_def只是給你看看結構,并沒有按照這個順序執行)layers.py
UGAT_mlp.py調用,包含了GCN和GAT的類。方法forward_rs和forward_kg對應公式4。generator_contact.py
G的模型。從代碼中可以看到是采用DistMult加了一層全連接和激活。值得注意的是全連接層輸入是embedding_size * 2,這是因為引入了噪聲可以在forward_triple方法中看到(對應公式10,11,12)。這個方法被trainer.py中gen_step調用。
-
pretrain/
入口文件main_pretrain.py調用。-
trainer.py
Trainer_new類,包含模型訓練的方法,超參數的初始化。dis_step方法對應公式6和9。負樣本在構造的數據集里已經制作好(無需負采樣)。 -
base_trainer.py
trainer.py中的Trainer_new的父類,包含模型的載入,歸一化,路徑采樣等方法.show_norm方法對應日志中每個epoch后顯示嵌入的范數信息。load_pretrain方法加載ckpt文件。 -
init.py
返回Model文件夾中的模型。trainer.py調用,生成trainer.model。默認使用的是UGAT_mlp.py
-
-
train/
入口文件main_upgan.py調用。-
trainer.py
和pretrain文件夾中trainer.py比,train_epoch_kg方法多了G的部分。dis_step輸入的負樣本來自方法gen_step,這個方法還包括了GAN的訓練。gen_step通過generator_contact.py中獲得的score采用torch.multinomial進行采樣。 -
base_trainer.py
和pretrain文件夾中相比未發現重要區別。 -
init.py
和pretrain文件夾中init.py比,多了調用G模型的部分。默認使用的是generator_contact.py。 -
load_data.py
加載數據集,base_trainer.py(兩個文件夾下的皆)調用。 -
evaluation.py
評估模型的方法,base_trainer.py(兩個文件夾下的皆)調用。eva_rank_list方法計算mrr等,evaluate方法調用Model下文件里各個模型(self.model.evaluate)。
-
-
util/
一些訓練日志,數據集存儲,以及支持訓練的輔助文件,就不詳細介紹了。 -
main_pretrain.py
預訓練入口文件,與main_upgan.py相比不包含G的部分。可以加載預訓練的知識庫嵌入,對應參數--load_ckpt_file,原文使用的是DistMult。這里值得注意的是知識庫的嵌入,對于模型來說其實算是嵌入層的參數(作為模型參數的一部分,而且像DistMult這樣Semantic match模型除了嵌入外沒有額外參數)。訓練完后在--checkpoint_dir下生成名為--experiment_name的ckpt文件(模型參數,見base_trainer.py的save_ckpt方法),log文件(訓練日志),和middle文件(由evaluation.py里的write_res方法寫入,尚不清楚有何作用) -
main_upgan.py
正式訓練入口文件。參數--load_ckpt_file加載運行main_pretrain.py生成的experiment_name.ckpt文件,加載至self.model。參數--load_ckpt_G加載DistMult模型至self.G。另外可以從代碼看到G用的就是DistMult加了一層全連接和激活。這里的self.model應該就是代表D了,self.D只出現在參數中一切D完成的功能都是由self.model來做。訓練完生成文件和main_pretrain.py一致。