前言:一般來說使用者Embedding在推薦系統中可以透過物品的Embedding向量平均或者聚類實現,因此物品的Embedding演算法的效果成為重中之重。這篇文章是筆者閱讀《深度學習推薦系統》第四章Embedding技術在推薦系統中的應用的學習筆記。本篇文章主要介紹傳統詞向量的生成演算法,在
Word2Vec
演算法的基礎上,詞向量生成演算法在推薦系統上的衍生。
- 傳統詞向量生成演算法
- Embedding
- Word2Vec
- Item2Vec
- Graph Embedding
- DeepWalk
- 主要思想
- 演算法實現
- Node2vec
- 演算法實現
- EGES
- 演算法實現
- DeepWalk
- Embedding
傳統詞向量生成演算法
Embedding
Word2Vec
傳統的編碼方式:one-hot編碼,不同單詞
[1, 0, 0]
和[0, 1, 0]
之間的餘弦相似度為0。因此,Word2Vec希望能夠透過訓練得到一個新的詞向量表達方式,從而豐富向量的語義資訊。主要目標如圖所示,從一個稀疏的one-hot向量透過訓練得到一個豐富稠密的新向量。學習參考連結:【詞向量表示】Word2Vec原理及實現-CSDN部落格
Item2Vec
狹義上:一種物品Embedding方法,是對Word2Vec演算法的延申,Item2Vec方法是將物品視為“單詞”,而一個行為,例如購買行為視為一個句子,在一個行為中,有物品先後購買順序,而Item2Vec正是利用這種序列學習物品向量表示。
廣義上:只要是物品→向量的方法都可以稱為Item2Vec:雙塔模型(百度、Facebook),以one-hot編碼作為輸入,經過複雜的多層神經網路輸出Embedding向量。
與Word2Vec的區別
- 資料不同:
Item2Vec
利用“物品序列”等行為產生歷史行為序列(包括購買、瀏覽等行為),而Word2Vec
是利用“詞序”。
- 最佳化目標不同:
Item2Vec
在最佳化目標的過程中認為任意兩個物品之間都存在聯絡,而Word2Vec
認為只有在一定視窗內才有聯絡。
侷限性
只能使用序列型的行為資料實現向量生成
Graph Embedding
DeepWalk
本質還是Item2Vec演算法,只不過是利用遊走的方式在圖上產生大量的物品序列
主要思想
給定一張圖結構,在圖上進行隨機遊走,產生大量的物品序列,最後將序列放入Item2Vec中進行訓練
演算法實現
與Item2Vec不同的是,在生成大量物品序列的過程中,需要確定當前結點的下一個結點,即隨機遊走的演算法,假設物品關係圖是有向有權圖,則隨機遊走的形式化表達為:
其中$ N_+(v_i)\(表示\)v_i\(的所有出邊集合,\)M_{ij}$表示兩個結點之間的權重。這一過程即計算下一個結點被選擇機率,邊權重越大,被選擇的機率越大。若是無權圖,則將所有邊權重預設為1,即每個結點被選擇的機率相同。
Node2vec
在DeepWalk的基礎上,調整了隨機遊走的權重,使得結果更能體現圖網路的同質性和結構性
- 同質性:相互連線的物品向量相近,在物品網路結構表示為同類、同屬性商品;
- 結構性:拓撲結構相似的物品向量相近,在物品網路結構表示為各品類的爆款、最佳湊單等等;
演算法實現
- 同質性:不僅需要找到相近的結點,還需要遊走到遠方的結點訓練,
BFS
只能找到相近的結點,而DFS
更適合表達網路”同質性“的遊走過程 - 結構性:需要找到物品相似的拓撲結構,需要對周圍的結點網路結構進行遍歷掃描,
BFS
更適合表達網路”結構性“遊走過程
綜上所述,在選擇下一結點時,需要權衡BFS和DFS的傾向性,Node2Vec透過節點間的跳轉機率權衡兩者的傾向性,從結點v跳轉到結點x的機率為:
其中d表示結點v和x的距離,\(\omega_{vx}\)表示兩個結點的權重,\(a_{pq}\)表示機率權重引數,平衡BFS和DFS的傾向性
其中p
表示在附近遊走的可能性,p
越小,Node2vec更注重表達網路的結構性,q
越小,則遠離原始節點的機率越大,此時,Node2vec更注重表達網路的同質性
EGES
阿里巴巴的embedding方法,基本思想是在Deepwalk生成的Graph Embedding上引入補充資訊,目的是為了解決長尾物品問題、冷啟動物品互動資訊少的問題。DeepWalk、Node2Vec只基於圖結構生成節點嵌入向量,忽略了節點可能攜帶的其他輔助資訊。EGES透過引入更多的補充資訊來豐富向量特徵。實現上並沒有過多的理論創新,但在工業上是實用性很強的演算法。
演算法實現
-
生成物品關係圖:利用物品的相同特徵生成基於內容的知識圖譜,透過知識圖譜生成的物品向量被稱為補充向量;
-
對於不同特徵的向量,模型透過加權求和的方式得到最後的Embedding輸出,其中權重引數為\(e^{a_j}\)