DeepWalk
簡介
-
將節點表示為向量,保留網絡結構信息
-
DeepWalk將隨機游走得到的節點序列當做句子,從截斷的隨機游走序列中得到網絡的局部信息,再通過局部信息來學習節點的潛在表示。
-
可擴展、可並行、可處理稀疏網絡
-
可對網絡進行全局觀察
DeepWalk將一個圖作為輸入,並產生一個潛在表示(將圖中的每個節點表示為一個向量)作為輸出。
算法要求
-
適應性:社交網絡是不斷變化的,當網絡發生變化時,可對對整個網絡新進行計算。
-
社區意識:節點在潛在表示的維度空間中的距離,應該表示網絡中對應的成員的相似度,以此保證網絡的同質性。
-
低維:當被標記的成員很少時,低維的模型一般表現的更好,並且收斂和推理速度更快。
-
連續性:需要通過圖的潛在表示來對連續空間中的部分社區成員進行建模。除了提供對社區成員資格的細微視圖之外,連續表示還可以使社區之間的決策界限平滑,從而實現更強大的分類。
算法大致思路
1、隨機游走
將從頂點Vi開始的隨機游走序列表示為Wvi。Wvij表示序列Wvi中的第j個點。其中,Wvi1為Vi,Wvik+1是從Wvik的鄰居中隨機選擇的節點。隨機游走得到的序列中包含了網絡的局部結構信息。
當圖中節點的度遵循冪律分布(y=cx-r,y是度數為r的節點的出現的頻率;直觀上說,就是度數大的節點比較少,度數小的節點比較多)時,短隨機游走中頂點出現的頻率也將遵循冪律分布。
因為自然語言中單詞出現的頻率遵循類似的分布,所以用於建模自然語言分布的技術,可以用於對隨機游走得到的序列進行建模。
-
語言建模的目標是估計出現在語料庫中的特定序列的可能性。即給定$W_n=(W_0,W_1,...,W_n)$的序列,其中$W_i \in V$,($V$是詞匯表),我們想最大化$P_r(W_n|W_0,W_1,...,W_n-1)$,隨機游走得到的序列可以被認為是一種特殊語言的短句,類比語言建模可以得到:在隨機游走中給定迄今為止訪問的所有先前頂點的情況下,下一個頂點是的可能性可以表示為:
$$P_r(V_i|V_0,V_1,...,V_i-1)$$ -
為了得到節點的潛在表示,引入映射函數$\Phi:v \in V \rightarrow R^{|V|*d}$,$|V|*d$矩陣$\Phi$表示圖中每個頂點的在d維空間中的潛在表示。這樣公式(1)可以表示為:
$$P_r(V_i|V_0,V_1,...,V_i-1)$$
3.對語言建模進行relaxation
-
不是通過上下文預測單詞,而是使用單詞來預測上下文,上下文由單詞左右兩邊的單詞組成。(SkipGram)
-
不考慮句子中上下文出現的順序,最大化出現在上下文中的所有單詞的概率。對於頂點表示建模,就產生了下面的優化問題:
$$P_r(V_i|V_0,V_1,...,V_i-1)$$
SkipGram使用獨立性假設,條件概率(3)近似為:
該算法由兩個主要組件組成:一個隨機游走生成器和一個語言模型更新程序。