推薦系統(二)Graph Embedding之DeepWalk

事先聲明,這篇博客的適用人羣是對推薦系統和NLP知識有初步瞭解的同學,因爲如下會用到諸如embedding和word2vec的基本思想(其實我也只是對這兩方面有一些基本的認識),這篇博客的意義在於備忘和供大家參考。

關鍵字: embedding,word2vec,RandomWalk

如下是本篇博客的主要內容:

  • Graph Embedding基本思想
  • Graph的構建
  • Graph Embedding中Embedding的學習
  • 代碼實現
  • 總結

1. Graph Embedding基本思想

根據博客上一篇文章推薦系統(一)SVD基本思想以及推薦系統的應用中提到,不管是user的embedding向量還是item的embedding向量,其構建過程都是通過某個user針對某個item的行爲來進行學習的,這樣導致整個系統的學習過程比較狹隘,沒有從宏觀的角度來進行Embedding建模。

而本篇博客提到的Graph Embedding初衷則有所不同,其建模的基本步驟分爲三步,

  1. 建模:將所有user在一段時間內的消費歷史構建爲一個圖。
  2. 提取特徵:通過RandomWalk生成模型訓練需要的訓練數據。
  3. 模型訓練:通過Word2Vec模型來構建每個節點(item)的Embedding向量(第3節)。

上述操作能夠實現跨user和item的user behavior全局建模的目的。之後可以利用上述item embedding向量做個性化推薦等一系列推薦相關的操作。

2. Graph的構建

第一步,建模。構建user behavior圖結構的過程如下圖所示,可以看到算法針對每個user的消費行爲的先後順序構建了圖結構,這個圖結構涵蓋了所有用戶的行爲,使得後續的學習模型能夠學習到更宏觀的信息。
圖片來自阿里論文

3. Graph Embedding中Embedding的學習

爲了講述一個完整的從數據構建到訓練模型的過程,這裏將提取特徵模型訓練作爲一個整體來進行講述。

在第2節中user behavior圖結構已經構建好,這一節主要介紹如何來構建圖中每個節點的Embedding向量,其基本思想爲遍歷所有節點(item),通過RandomWalk獲取以每個節點爲起點的一條圖路徑,每條路徑類比於Word2Vec中的每個sentence,之後通過訓練Word2Vec模型來得到每個節點的Embedding向量。對Word2Vec模型不熟悉的同學可以參考NLP(一)word2vec原理。基本思想圖示如下。
圖片來自阿里論文
根據上述基本思想,算法的基本過程分爲兩步:

  1. 通過RandomWalk獲取sentence樣本,
  2. 利用sentence樣本構建Word2Vec模型,學習得到Embedding向量。

3.1 提取特徵:RandomWalk

RandomWalk的基本思想個人覺得比較簡單,即遍歷每個節點,通過深度優先遍歷的方式獲取指定長度的一條路徑,即爲一個sentence,將所有的sentence放在一起,構成了Word2Vec所用到的sentence樣本。

該算法的時間複雜度個人認爲是O(Vwalk_lengthnum_walk)O(V*walk\_length*num\_walk),這裏VV指的是圖中節點的個數,walk_lengthwalk\_length指的是每個sentence的最大長度,num_walknum\_walk指的是隨機遊走的總epoch數。

3.2 模型訓練:Word2Vec

利用3.1節構建好sentence樣本,訓練Word2Vec模型就能生成目標Embedding向量。對於具體的Word2Vec模型,論文中採用的是Skip-gram,即通過中心節點來預測周圍節點,而計算損失時採用的是層次SoftMax算法進行計算的。

4. 代碼實現

對於DeepWalk的實現,網上已經有很多開源的代碼了,且代碼架構設計地相當不錯,很有參考價值,我這裏援引的是知乎淺夢大神github代碼,其中RandomWalk的核心代碼在這裏,Word2Vec的核心代碼是通過調用gesim庫來實現的。

5. 總結

本篇博客概述了DeepWalk的由來以及算法的基本過程,最後提供了大神的代碼實現。這裏需要提及的是我個人理解的DeepWalk的兩個缺點,如果說的不對,請大家指正:

  1. 將user behavior圖構建爲有向無權圖,即每條邊的權重都是1,但有時需要將圖設爲帶權重的,比如一條路徑在很多user behavior中都出現過,而無權圖則損失了這部分的信息。
  2. DeepWalk只關注圖節點的局部特徵,即直連節點,但是並沒有考慮非直連節點,比如兩個節點雖然沒有直連,但如果兩個節點所連接的節點集合的交集相似度較大,則這兩個節點的Embedding向量也應該比較相似,而這類信息是沒有辦法通過深度優先遍歷的方式來獲取的,只能通過寬度優先遍歷的方式來獲取,而這也正是我們後文要介紹的LINE算法(推薦系統(三)Graph Embedding之LINE)的核心思想。

參考

  1. 王喆的機器學習筆記
  2. 【Graph Embedding】DeepWalk:算法原理,實現和應用
  3. DeepWalk: Online Learning of Social Representations
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章