深度解析Graph Embedding


Graph Embedding是推薦系統、計算廣告領域最近非常流行的做法,是從word2vec等一路發展而來的Embedding技術的最新延伸;並且已經有很多大廠將Graph Embedding應用於實踐后取得了非常不錯的線上效果。
word2vec和由其衍生出的item2vec是embedding技術的基礎性方法,但二者都是建立在“序列”樣本(比如句子、推薦列表)的基礎上的。而在互聯網場景下,數據對象之間更多呈現的是圖結構。典型的場景是由用戶行為數據生成的物品全局關系圖,以及加入更多屬性的物品組成的知識圖譜
在面對圖結構的時候,傳統的序列embedding方法就顯得力不從心了。在這樣的背景下,對圖結構中間的節點進行表達的graph embedding成為了新的研究方向,並逐漸在深度學習推薦系統領域流行起來。

DeepWalk

早期影響力較大的graph embedding方法是2014年提出的DeepWalk,它的主要思想是在由物品組成的圖結構上進行隨機游走,產生大量物品序列,然后將這些物品序列作為訓練樣本輸入word2vec進行訓練,最大化隨機游走序列的似然概率,並使用最終隨機梯度下降學習參數,得到物品的embedding。其目標函數為:

\[\zeta(s)=\frac{1}{|s|} \sum_{i=1}^{|s|} \sum_{i-t \leq j \leq i+t,j \neq i}log Pr(v_j|v_i) \]

其中:

\[Pr(v_j|v_i) = \frac{exp(v'_j \cdot v_i)}{\sum_{v \in V} exp(v' \dot v_i)} \]

實際上,也是word2vec的目標函數。

下圖用圖示的方法展現了DeepWalk的過程。

DeepWalk1

整個DeepWalk的算法流程可以分為四步:

  1. 圖a展示了原始的用戶行為序列
  2. 圖b基於這些用戶行為序列構建了物品相關圖,可以看出,物品A,B之間的邊產生的原因就是因為用戶U1先后購買了物品A和物品B,所以產生了一條由A到B的有向邊。如果后續產生了多條相同的有向邊,則有向邊的權重被加強。在將所有用戶行為序列都轉換成物品相關圖中的邊之后,全局的物品相關圖就建立起來了。
  3. 圖c采用隨機游走的方式隨機選擇起始點,重新產生物品序列。
  4. 圖d最終將這些物品序列輸入word2vec模型(使用的是skip-gram模型),生成最終的物品Embedding向量。

在上述DeepWalk的算法流程中,核心是第三步,其中唯一需要形式化定義的是隨機游走的跳轉概率,也就是到達節點\(v_i\)后,下一步遍歷\(v_i\)的臨接點\(v_j\)的概率。如果物品的相關圖是有向有權圖,那么從節點\(v_i\)跳轉到節點\(v_j\)的概率定義如下:

\[p(v_j|v_i) = \begin{cases} \frac{M_{ij}}{\sum_{j \in N_+(v_i)}M_{ij}} , v_j \in N_+(v_i)\\ 0, \ \ \ \ \ e_{ij} \notin \epsilon \end{cases} \]

其中$ N_+(v_i)\(是節點\)v_i\(所有的出邊集合,\)M_{ij}\(是節點\)v_i\(到節點\)v_j\(邊的權重。 如果物品相關圖是無相無權重圖,那么跳轉概率將是上面公式的一個特例,即權重\)M_{ij}$將為常數\(1\),且$ N_+(v_i) \(應是節點\)v_i$所有“邊”的集合,而不是所有“出邊”的集合。

DeepWalk2

算法中有一個參數\(t\),是隨機游走的步長,即需要限定隨機游走的長度,不要過長,有幾個好處,1)可以捕獲網絡中局部區域的結構信息;2)易於實現並行化,多個線程,進程,甚至服務器,可以同時隨機游走網絡的不同部分,實現分布式計算;3)能夠適應網絡的變化,網絡局部發生變化時,可以只對局部網絡進行學習和訓練,而不需要對整個網絡重新學習。

DeepWalk具有良好的可伸縮性,可以多台機器同時訓練網絡的不同部分。而且節點的出現頻次符合指數分布,大部分低頻節點都分布在長尾。多台機機器同時訓練也不太會發生沖突,文中提出可以采用異步的隨機梯度下降(ASGD)

Node2vec

2016年,斯坦福大學在DeepWalk的基礎上更進一步,通過調整隨機游走權重的方法使graph embedding的結果在網絡的 同質性(homophily)結構性(structural equivalence) 中進行權衡權衡。

具體來講,網絡的“同質性”指的是距離相近節點的embedding應該盡量近似,如下圖,節點\(u\)與其相連的節點\(s1\)\(s2\)\(s3\)\(s4\)的embedding表達應該是接近的,這就是“同質性“的體現。
“結構性”指的是結構上相似的節點的embedding應該盡量接近,圖4中節點u和節點s6都是各自局域網絡的中心節點,結構上相似,其embedding的表達也應該近似,這是“結構性”的體現。

Node2vec

DFS反應了同質性,BFS反映了結構性。 對於寬度優先搜索(BFS)來說,其搜索往往是在當前節點(這里以節點\(u\)為例)的鄰域進行的,相當於對\(u\)周圍的網絡結構進行了一次微觀掃描(microscope view)。那么這個微觀掃描當然更容易得到微觀結構的觀察,所以BFS就更容易使embedding結果更多反應網絡的“結構性”。DFS相當於對網絡結構進行了一次宏觀掃描(macroscope view),只有在宏觀的視角,才能發現大的集團、社區的聚集性,和集團內部節點的“同質性”。

node2vec優化的目標是給定每個頂點條件下,令其近鄰頂點出現的概率最大。在條件獨立性假設以及特征空間對稱性假設下,最終的目標函數定義為:

\[max_f \sum_{u \in V}[-log Z_u + \sum_{n_i \in N_s(u)} f(n_i) \cdot f(u)] \]

由於歸一化因子\(Z_u=\sum_{v \in V} exp(f(u) \cdot f(v))\)的計算代價高,所以采用負采樣技術優化。

在node2vec算法中,主要通過節點間的跳轉概率,控制BFS和DFS的傾向性。下圖顯示了node2vec算法從節點\(t\)跳轉到節點\(v\)后,下一步從節點\(v\)跳轉到周圍各點的跳轉概率。

Node2vec跳轉概率

形式化來講,從節點\(v\)跳轉到下一個節點\(x\)的概率為

\[P(c_i=x|c_{i-1}=v)= \begin{cases} \frac{\pi_{vx}}{Z} \ \ \ \ \ if {v,x} \in E \\ 0 \ \ \ \ \ \ \ \ otherwise \end{cases} \]

其中,\(Z\)是歸一化常數。\(\pi_{vx}\)表示頂點\(v\)和頂點\(x\)之間的未歸一化轉移概率。

\[\pi_{vx} = \alpha_{pq}(t,x) \cdot \omega_{vx} \]

其中 \(\omega_{vx}\) 是邊\(vx\)的權重, $ \alpha_{pq}(t,x)$ 的定義如下:

\[\alpha_{pq}(t,x)= \begin{cases} \frac{1}{p} \ \ \ \ \ if d_{tx}=0 \\ 1 \ \ \ \ \ if d_{tx}=1 \\ \frac{1}{q} \ \ \ \ if d_{tx}=2 \\ \end{cases} \]

其中,\(d_{tx}\)指的是節點\(t\)到節點\(x\)的距離,參數\(p\)\(q\)共同控制着隨機游走的傾向性。參數\(p\)被稱為返回參數(return parameter),\(p\)越小,隨機游走回節點\(t\)的可能性越大,node2vec就更注重表達網絡的同質性,參數\(q\)被稱為進出參數(in-out parameter),\(q\)越小,則隨機游走到遠方節點的可能性越大,node2vec更注重表達網絡的結構性,反之,當前節點更可能在附近節點游走。在文中試驗部分,作者對p和q的設置一般是2的指數,比如​\(\{1/8,1/4,1/2,1,2,4,8\}\)

node2vec所體現的網絡的同質性和結構性在推薦系統中也是可以被很直觀的解釋的。同質性相同的物品很可能是同品類、同屬性、或者經常被一同購買的物品,而結構性相同的物品則是各品類的爆款、各品類的最佳湊單商品等擁有類似趨勢或者結構性屬性的物品。毫無疑問,二者在推薦系統中都是非常重要的特征表達。由於node2vec的這種靈活性,以及發掘不同特征的能力,甚至可以把不同node2vec生成的embedding融合共同輸入后續深度學習網絡,以保留物品的不同特征信息。

EGES

2018年阿里公布了其在淘寶應用的Embedding方法EGES(Enhanced Graph Embedding with Side Information),其基本思想是在DeepWalk生成的graph embedding基礎上引入補充信息。
如果單純使用用戶行為生成的物品相關圖,固然可以生成物品的embedding,但是如果遇到新加入的物品,或者沒有過多互動信息的長尾物品,推薦系統將出現嚴重的冷啟動問題。為了使“冷啟動”的商品獲得“合理”的初始Embedding,阿里團隊通過引入了更多補充信息來豐富Embedding信息的來源,從而使沒有歷史行為記錄的商品獲得Embedding。

生成Graph embedding的第一步是生成物品關系圖,通過用戶行為序列可以生成物品相關圖,利用相同屬性、相同類別等信息,也可以通過這些相似性建立物品之間的邊,從而生成基於內容的knowledge graph。而基於knowledge graph生成的物品向量可以被稱為補充信息(side information)embedding向量,當然,根據補充信息類別的不同,可以有多個side information embedding向量。

那么如何融合一個物品的多個embedding向量,使之形成物品最后的embedding呢?最簡單的方法是在深度神經網絡中加入average pooling層將不同embedding平均起來,阿里在此基礎上進行了加強,對每個embedding加上了權重,如圖所示,對每類特征對應的Embedding向量,分別賦予了權重\(a_0,a_1…a_n\)。圖中的Hidden Representation層就是對不同Embedding進行加權平均操作的層,得到加權平均后的Embedding向量后,再直接輸入softmax層,這樣通過梯度反向傳播,就可以求的每個embedding的權重\(a_i(i=0…n)\)

EGES

在實際的模型中,阿里采用了 \(e^{a_j}\) 而不是\(a_j\)作為相應embedding的權重,一是避免權重為\(0\),二是因為 \(e^{a_j}\) 在梯度下降過程中有良好的數學性質。

阿里的EGES並沒有過於復雜的理論創新,但給出一個工程性的結合多種Embedding的方法,降低了某類Embedding缺失造成的冷啟動問題,是實用性極強的Embedding方法。

時至今日,Graph Embedding仍然是工程和學術領域研究和實踐的熱點,除了本節介紹的DeepWalk,Node2vec,EGES等主流的方法,還有LINE,SDNE等方法也很流行。

Q&A

在使用Graph Embedding生成物品的Embedding之后,應該如何生成用戶的Embedding?除了Average Pooling有更好的方法嗎?

若使用用戶行為序列對應item embedding構建呀用戶embedding會出現user embedding與item embedding不在一個向量空間的問題,這會造成無法利用user embedding和item embedding的內積直接得到推薦列表。
使用異構網絡可以解決這個問題,例如metapath2vec,它本身會將不同類型的節點放到同一個網絡來訓練 所以得到的vector是同一空間

graph embedding對比item embedding的優勢是什么?

  1. 通過隨機游走獲得的商品序列包含了直接關聯和間接關聯的,如此構造的序列比之前簡單基於用戶下單物品順序構造的序列更廣泛,也就是擴寬了推薦內容;
  2. 直接用原始的序列,可能存在的問題是,有一些item出現頻次非常高,有一些item出現頻次很低,導致部分item過度訓練,而另外一些item訓練不足,訓練結果朝着那些熱門item偏移。生成graph之后,只保留了item之間的結構,而丟掉了item出現的頻次信息。在做隨機游走的時候,每個節點都要作為起點游走生成序列,因此每個節點都能保證一定數量的出現頻次,使得所有item都能得到有效的訓練。冷門物品在序列中出現的次數更多了,其實這有利於新上線的商品(同樣與其他物品關聯很少)的embedding訓練。

參考:
DeepWalk及node2vec簡單理解學習
Graph Embedding在淘寶推薦系統中的應用
深度學習中不得不學的Graph Embedding方法
關於Node2vec算法中Graph Embedding同質性和結構性的進一步探討
【Graph Embedding】node2vec:算法原理,實現和應用
論文:DeepWalk: Online Learning of Social Representations
論文:node2vec: Scalable Feature Learning for Networks
論文:Billion-scale Commodity Embedding for E-commerce Recommendation in Alibaba


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM