当知识图谱遇上推荐系统之PippleNet模型(论文笔记二)
RippleNet | Propagating User Preferences on the Knowledge
類別:聯合學習
將知識圖譜特征學習和推薦算法的目標函數結合,使用端到端(end-to-end)的方法進行聯合學習。
[論文下載鏈接]https://arxiv.org/abs/1803.03467
1、背景
上一篇介紹了依次學習中的DKN,需要先學習到entity的向量和relation的向量,然后講這些向量引入推薦系統來學習user的向量和item的向量。但是學習entity向量和relation向量的目的是為了還原知識圖譜中的三元組關系,而并非是為了我們的推薦任務。
為了解決現有的embedding-based方法和path-based方法的限制,作者提出了一種可以將知識圖譜自然地融入到推薦系統的端到端的框架RippleNet。
RippleNet原理:
對于每個用戶,RippleNet將其歷史興趣視為KG中的種子集,然后沿著KG鏈接迭代地擴展用戶的興趣,以發現他對候選項目的等級潛在興趣。我們將偏好傳播與由在水上傳播的雨滴產生的實際波紋進行類比,其中多個“波紋”疊加以形成用戶在知識圖上的最終偏好分布。
2、問題制定
用戶集 U = { u1, u2, …}
項目集 V = { v1, v2, …}
用戶-項 交互矩陣 Y = { yuv | u ∈ U, v ∈ V}
知識圖譜 G = { (h,r,t) | h, t ∈ E, r ∈ R }
在許多推薦場景中,item v ∈ V 可能與知識圖譜中的一個或多個 entity相關
目標:學習預測函數y?uv =F( u, v ; Θ ), y?uv表示用戶 u 點擊項目 v 的可能性
3、RippleNet
3.1 水波紋集 Ripple Set
定義1(相關實體) 給定交互矩陣Y和知識圖G,用戶u 的k-hop相關實體集被定義為:
當k=0時,表示用戶歷史點擊項目,被視為KG中用戶u的種子集:
定義2(紋波集) 用戶u 的k-hop紋波集被定義為從Ek-1u 開始的知識三元組:
3.2 框架 Framework
輸入:用戶u 和 預測項v
輸出:用戶u 點擊 項v 的可能性分數
對于每一個輸入用戶u,他的歷史興趣集Vu被視為KG中的種子,然后沿著KG鏈接迭代地擴展用戶的興趣,形成多個水波紋集Sku( k = 1,2,…,H)。一個水波紋集Sku是距離種子集Vu有k-hop(s)距離的一組知識三元組。這些水波紋集迭代的與項 v (黃色豎條塊)進行交互來獲取用戶關于項 v 的響應(綠色豎條塊),然后將這些響應結合形成user embedding(灰色豎條塊),最后使用 user embedding 和 item embedding 計算可能性分數y?uv。
3.3 偏好傳播 Preference Propagation
每個項目v 與項目嵌入v∈Rd 相關聯,其中d是嵌入的維度。項目嵌入可以基于應用場景包含 one-hot ID,屬性,bag-of-words 或上下文信息。 給定項目嵌入v 和用戶u的1-hop紋波集合S1u,通過將項目v與頭部hi和關系ri進行比較(hi和ri為S1u中的每個三元組(hi, ri, ti))分配一個關聯概率(藍色塊):
Note:Pi可以看作在關系空間Ri∈ Rd×d中,item v 和 entity hi 的相似度。注意,在計算項目v和實體h的相關性時,有必要考慮嵌入矩陣R ,因為項目 - 實體對在通過不同關系測量時可能具有不同的相似性。 例如,“Forrest Gump”和“Cast Away”在考慮他們的導演或明星時非常相似,但如果按流派或作家來衡量,則沒有共同之處。
然后將尾部ti和相關權重Pi相乘再求和得到向量o1u:
用戶的興趣從他的歷史集合Vu沿著Su1中的鏈路轉移到他的1-hop相關實體Eu1的集合,這在RippleNet中稱為偏好傳播。
將v用o1u取代可計算出o2u,同理可以計算出o3u, … ,oHu
然后user embedding 可以用用各階響應之和表示:
Note:盡管在理論上最后一步oHu 包含了之前每一步的信息,但還是有必要把之前的oku加入計算,因為之前的oku的信息傳到最后被稀釋了。
最后user embedding 和 item embedding一起來預測u點擊v的可能性:
3.4 學習算法 Learning Algorithm
在給定知識圖譜G,用戶的隱式反饋Y時,我們希望最大化后驗概率:
其中Θ包括所有實體,關系和項目的嵌入,后驗概率展開后相當于最大化
第一項p(Θ)是測量模型參數Θ的先驗概率,我們認為參數的先驗概率服從零均值和對角協方差矩陣的高斯分布:
第二項是給定Θ的觀察知識圖G的似然函數,在RippleNet中,我們使用three-way張量分解方法來定義KGE的似然函數:
Note:其中如果(h,r,t)∈G指標 Ih,t,r 等于1,否則為0。因此可以在相同的計算模型下統一KGE中的實體-實體對和偏好傳播中的項目 - 實體對的評分函數。
第三項是給定Θ和KG的觀察隱式反饋的似然函數,KG被定義為伯努利分布的乘積:
因此,我們可以得到RippleNet的損失函數形式如下:
Note:第一項可以看作是推薦系統的交叉熵損失,第二項可以看作是知識圖譜的平方誤差,第三個項是防止過度擬合的正則化項。
直接解決上述問題是難以處理的,因此,我們采用隨機梯度下降(SGD)算法來迭代地優化損失函數。 RippleNet的學習算法在算法1中給出。在每次訓練迭代中,為了使計算更有效,我們采用負采樣策略隨機采樣來自Y的正/負相互作用的小批量和來自G的真/假三元組。 。然后,我們計算損失L相對于模型參數Θ的梯度,并基于采樣minibatch通過反向傳播更新所有參數。
4、相關問題:
紋波集的大小可能隨著hop數k的增加而變得太大問題
關于學習算法中的數學公式理解
協方差矩陣的計算:https://blog.csdn.net/u013555719/article/details/82628835
5、RippleNet的Tensorflow實現
參考的代碼地址為:https://github.com/hwwang55/RippleNet
cd desktop/RippleNet/src python3 preprocess.py reading item index to entity id file: ../data/movie/item_index2entity_id_rehashed.txt ... reading rating file ... converting rating file ... number of users: 6036 number of items: 2445 converting kg file ... number of entities (containing items): 182011 number of relations: 12 donepython3 main.py --dataset movie reading rating file ... splitting dataset ... reading KG file ... constructing knowledge graph ... constructing ripple set ...epoch 0 train auc: 0.9151 acc: 0.8353 eval auc: 0.9042 acc: 0.8267 test auc: 0.9037 acc: 0.8256 epoch 1 train auc: 0.9312 acc: 0.8546 eval auc: 0.9146 acc: 0.8374 test auc: 0.9134 acc: 0.8365 epoch 2 train auc: 0.9398 acc: 0.8659 eval auc: 0.9173 acc: 0.8411 test auc: 0.9169 acc: 0.8414 epoch 3 train auc: 0.9480 acc: 0.8770 eval auc: 0.9203 acc: 0.8459 test auc: 0.9198 acc: 0.8443 epoch 4 train auc: 0.9544 acc: 0.8862 eval auc: 0.9215 acc: 0.8474 test auc: 0.9209 acc: 0.8472 epoch 5 train auc: 0.9586 acc: 0.8923 eval auc: 0.9217 acc: 0.8465 test auc: 0.9215 acc: 0.8468 epoch 6 train auc: 0.9625 acc: 0.8978 eval auc: 0.9209 acc: 0.8475 test auc: 0.9203 acc: 0.8460 epoch 7 train auc: 0.9627 acc: 0.8995 eval auc: 0.9189 acc: 0.8445 test auc: 0.9190 acc: 0.8447 epoch 8 train auc: 0.9674 acc: 0.9067 eval auc: 0.9167 acc: 0.8413 test auc: 0.9166 acc: 0.8427 epoch 9 train auc: 0.9701 acc: 0.9109 eval auc: 0.9182 acc: 0.8440 test auc: 0.9178 acc: 0.8437總結
以上是生活随笔為你收集整理的当知识图谱遇上推荐系统之PippleNet模型(论文笔记二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode--动态规划(Easy)
- 下一篇: Tensorflow2.0模型构建与训练