【說在前面】本人博客新手一枚,象牙塔的老白,職業場的小白。如下內容僅爲我的看法,歡迎批評指正,不喜勿噴![握手][握手]html
【再囉嗦一下】若是你對智能推薦感興趣,歡迎先瀏覽個人另外一篇隨筆:智能推薦算法演變及學習筆記python
【最後再說一下】本文只對智能推薦算法中的基於圖模型的智能推薦進行具體介紹!web
1、基於知識圖譜的智能推薦
以知識圖譜做爲邊信息生成推薦的價值在於:一方面能夠提供更準確的推薦;另外一方面能夠對推薦結果進行解釋。面試
知識圖譜由實體和關係組成(以電影推薦爲例):實體(用戶、電影、演員、導演和類型);關係(交互、歸屬、表演、導演和友誼)。算法
![](http://static.javashuo.com/static/loading.gif)
1. 基於embedding的方法
基本思想:將知識圖譜中的節點和邊在低維向量空間中獲得嵌入表示(Knowledge Graph Embedding,KGE),利用知識圖譜豐富item/user的表示。網絡
1.1 KGE算法分類
- 基於翻譯距離的模型(例如TransE、TransH、TransR、TransD等):追求h + r = t
![](http://static.javashuo.com/static/loading.gif)
- 基於語義匹配的模型(例如RESCAL、DistMult、HolE、SME、NTN、MLP、NAM等):將h/r/t輸入到網絡中進行訓練學習
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
1.2 基於embedding的方法分類(根據知識圖譜中是否包含user)
- 使用item graph(即知識圖譜僅由item和相關feature構成):表明方法有CKE、DKN、KSR等
- 首先利用KGE算法生成item embedding;
- 而後結合item的文本/視覺特徵、user-item交互矩陣等信息構成完整的item表示;
- 最後再單獨計算user表示和得分函數。
![](http://static.javashuo.com/static/loading.gif)
- 使用user-item graph(即知識圖譜由user、item和相關feature構成):表明方法有CFKG、SHINE、DKFM等
- 先用KGE算法將user和item嵌入到同一貫量空間;
- 再經過計算user和item的距離直接獲得得分函數的值。
- 將KGE算法與GAN、貝葉斯框架結合:表明方法有KTGAN、BEM等
- 使用多任務學習策略聯合訓練推薦模塊與其餘任務:表明方法有KTUP、MKR、RCF等
基於embedding的方法忽略了圖中的信息連通模式,一般沒法爲推薦結果提供解釋。併發
2. 基於path的方法
基本思想:將知識圖譜視爲一個異構信息網絡(user-item),考慮到user、item的連通類似性(語義類似性/結構對等性),進而提高推薦效果。其中,連通類似性的定義依賴meta-path結構(meta-path是鏈接兩個實體的一條特定的路徑)。框架
2.1 基於path的方法分類(根據對path的不一樣利用方式)
- 基於path計算連通類似度,並做爲正則項優化user、item的表示。
- path能夠預先指定(表明方法有Hete-MF、Hete-CF、HeteRec、HeteRec-p、FMG、SemRec等)
- path能夠藉助外部知識庫學習獲得(表明方法有RuleRec等)
- 將全部/部分可能的path嵌入到低維空間,與user、item的表示共同訓練,並發現對推薦影響最顯著的path(鏈接模式)。
- 表明性方法有MCRec、RKGE、KPRN、PGPR等
![](http://static.javashuo.com/static/loading.gif)
用戶Alice與部分物品在知識圖譜的關聯圖示dom
![](http://static.javashuo.com/static/loading.gif)
KPRN模型圖示機器學習
基於path的方法有天生的可解釋性,但早期的方法沒有結合embedding的思想,對user/item的表示較爲簡單,準確性仍有提高空間。
3. 聯合方法
基本思想:利用嵌入傳播(常使用GNN)完善user、item在知識圖譜中有多跳鄰居的表示。其中,傳播過程能夠看做是在知識圖譜中發現user的偏好模式,相似於在基於path的方法中發現鏈接模式。
3.1 聯合方法分類(根據知識圖譜中是否包含user)
- 使用item graph
- 基於user波紋集傳播user偏好,模擬用戶興趣在知識圖譜上的傳播過程,提高user表示能力(表明方法有RippleNet、AKUPM等)
- 基於K階鄰居(實體波紋集)傳播item屬性,豐富item表示(表明方法有KGCN等)
- 使用user-item graph
- 考慮user和item的高階交互,同時加強user和item的表示(表明方法有KGAT、KNI、IntentGC等)
聯合方法結合了基於embedding和基於path的方法,兼具準確性和可解釋性,逐漸成爲知識圖譜推薦算法的主流方法。
![](http://static.javashuo.com/static/loading.gif)
*在表格中,Emb表明基於嵌入的方法,Uni表明統一方法,Att’表明注意力機制,‘RL’表明強化學習,‘AE’表明自動編碼器,‘MF’表明矩陣分解。
4. 結合知識圖譜特徵學習的推薦系統分類
前面三節是以核心技術的角度來分類,本節以訓練學習的角度來分類。(分類角度不一樣而已,助於理解)
4.1 依次訓練學習(例如DKN等)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
4.2 聯合訓練學習(例如CKE、Ripple Network等)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
4.3 交替訓練學習(例如MKR等)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
2、基於圖網絡的智能推薦(寫完發現等於介紹了一遍圖網絡!)
1. 知識圖譜表示學習KGE與圖網絡表示學習的異同點
2. 圖網絡表示學習(network representation/embedding)
- 基於矩陣分解的模型,好比SVD分解等
- 基於隨機遊走的模型,好比DeepWalk、Node2vec等
DeepWalk的主要思想是在由物品組成的圖結構上進行隨機遊走,產生大量物品序列,而後將這些物品序列做爲訓練樣本輸入word2vec進行訓練,獲得物品的embedding。
![](http://static.javashuo.com/static/loading.gif)
在DeepWalk的基礎上,經過調整隨機遊走權重的方法,使embedding的結果在網絡的同質性和結構性中進行權衡。
其中,網絡的「同質性」指的是距離相近節點的embedding應該儘可能近似,「結構性」指的是結構上類似的節點的embedding應該儘可能接近。
![](http://static.javashuo.com/static/loading.gif)
- 基於深度學習的模型(與下文的圖神經網絡呼應):CNN、RNN、AE、GNN、GCN、結合注意力、結合強化學習、結合GAN等。
3. 圖神經網絡
3.1 圖神經網絡GNN
GNN的核心觀點:
- 經過節點信息(部分節點是有標籤)的迭代傳播使整張圖達到收斂
- 在網絡收斂的基礎上再進行預測/分類
GNN的侷限性:
- 一是沒有區分不一樣邊的功能
- 二是節點之間的狀態存在較多的信息共享,致使節點的狀態太過平滑,而且屬於節點自身的特徵信息匱乏
GNN的訓練學習思路:
- 有監督:根據節點的標籤信息計算損失便可
- 無監督:使用」相鄰節點的編碼類似「進行訓練
![](http://static.javashuo.com/static/loading.gif)
3.2 門控圖神經網絡GGNN
與GNN核心的不一樣在於再也不以不動點理論爲基礎。
3.3 圖卷積神經網絡GCN
思考如何解決圖中鄰居結點數量不固定的問題:
- 一是提出一種方式把非歐空間轉換成歐式空間
- 二是找到一種能夠處理變長鄰居節點的卷積核在圖上抽取信息
![](http://static.javashuo.com/static/loading.gif)
3.4 GraphSage
解決GCN須要存放整張圖信息的問題,利用採樣部分節點的方式進行學習。
3.5 圖注意力網絡Graph Attention Network
![](http://static.javashuo.com/static/loading.gif)
3.6 異質圖神經網絡:(與前面基於知識圖譜的推薦方法呼應,細品)
![](http://static.javashuo.com/static/loading.gif)
3.7 後續還有圖神經網絡結合聚類、自編碼、注意力、強化學習、GAN等
3.8 圖神經網絡的應用
在nlp、計算機視覺、推薦系統、強化學習、惡意檢測、專業領域等都有很大的應用前景。
3.9 四大圖神經網絡框架
- deep graph library (DGL):支持pytorch、tensorflow
- pytorch geometric (PyG):基於pytorch
- ant graph machine learning system:螞蟻金服團隊推出的大規模圖機器學習系統
- tf_geometric:借鑑pytorch geometric,建立了tensorflow版本
3、知識圖譜與圖神經網絡的相關問題探究
1. 圖神經網絡是如何處理相似知識圖譜的有向異構圖的?
- GCN是譜域的GNN:基於譜圖理論,沒法自然的處理有向圖。
- GAT是空域的GNN:能夠自然的處理有向圖,一般定義入度的節點進行聚合。
- 知識圖譜和異質圖都有專門設計的GNN:
- 知識圖譜上的GNN關注於了對於不一樣關係含義的區別。
- 異質圖上的GNN關注於多種不一樣關係的融合來更好的描述節點。
2. 知識圖譜與異質信息網絡的區別?
- 通常來講,知識圖譜比異質信息網絡包含更多的點和邊類型。但並不絕對,這兩個定義並無明確的界限,不少時候都是互爲替代的。
- 前文提到,知識圖譜強調節點之間的關係表示,圖網絡強調節點的結構表示。但其實知識圖譜中基於path的方法和圖網絡中基於隨機遊走採路徑的方法基本沒有區別。
【更新】介紹比較新的一些深度學習推薦模型改進方向:
- 引入用戶行爲序列建模(例如TDM/TransRec等)
- 將用戶歷史行爲看作一個無序集合,對全部embedding取sum、max和各類attention等
- 將用戶歷史行爲看作一個時間序列,採用RNN/LSTN/GRU等建模
- 抽取/聚類出用戶的多峯興趣,方法有Capsule等(阿里MIND提出)
- 根據業務場景的特殊需求,採用其餘方法
- 引入NLP領域知識建模(例如Transformer/BERT等)
- 多目標優化/多任務學習(例如阿里ESMM/Google MMoE等)
- 多模態信息融合
- 長期/短時間興趣分離(例如SDM等)
- 結合深度強化學習(例如YouTube推薦/今日頭條廣告推薦DEAR等)
- 圖神經網絡的預訓練(即引入遷移學習的思路)
- ......
本文參考了大佬的知乎專欄:https://zhuanlan.zhihu.com/p/112530121
若是你對智能推薦感興趣,歡迎先瀏覽個人另外一篇隨筆:智能推薦算法演變及學習筆記
若是您對數據挖掘感興趣,歡迎瀏覽個人另外一篇博客:數據挖掘比賽/項目全流程介紹
若是您對人工智能算法感興趣,歡迎瀏覽個人另外一篇博客:人工智能新手入門學習路線和學習資源合集(含AI綜述/python/機器學習/深度學習/tensorflow)
若是你是計算機專業的應屆畢業生,歡迎瀏覽個人另一篇博客:若是你是一個計算機領域的應屆生,你如何準備求職面試?
若是你是計算機專業的本科生,歡迎瀏覽個人另一篇博客:若是你是一個計算機領域的本科生,你能夠選擇學習什麼?
若是你是計算機專業的研究生,歡迎瀏覽個人另一篇博客:若是你是一個計算機領域的研究生,你能夠選擇學習什麼?
若是你對金融科技感興趣,歡迎瀏覽個人另外一篇博客:若是你想了解金融科技,不妨先了解金融科技有哪些可能?
以後博主將持續分享各大算法的學習思路和學習筆記:hello world: 個人博客寫做思路