Graph Embedding-DeepWalk
阿新 • • 發佈:2020-12-02
一言以蔽之,DeepWalk是在graph上,通過隨機遊走來產生一段定長的結點序列,並將其通過word2vec的方式獲得各個結點的embedding的演算法。
DeepWalk一共涉及以下幾個內容:
- 隨機遊走的一些知識
- DeepWalk如何做隨機遊走
- Word2Vec的一種訓練方式
DeepWalk 使用圖中節點與節點的共現關係來學習節點的向量表示。在描述節點與節點的共現關係的過程中,DeepWalk 給出的方法是使用隨機遊走 (RandomWalk) 的方式在圖中進行節點取樣。
隨機遊走
隨機遊走(Random Walk)是一種數學統計模型,它是一連串的軌跡所組成,其中每一次都是隨機的。它能用來表示不規則的變動形式,如同一個人酒後亂步,所形成的隨機過程記錄.通常,隨機遊走一個簡單的隨機遊走的例子是在整數在數軸上的隨機遊走,它從0開始,然後每一步以相同的概率
DeepWalk的隨機遊走
這裡貼一張DeepWalk的演算法
uploading-image-790981.png
演算法包含幾個重要的引數:
- \(w\): Word2Vec的取樣視窗大小
- \(d\): 每個結點embedding的維度
- \(\gamma\):這個引數意思是我要重複\(\gamma\)
- \(t\): 遊走的長度,也就是結點的數量
上面的\(\gamma\)意思也就是希望多重複幾次相同開始結點的隨機遊走,作者認為這樣能加快隨機梯度下降的收斂速度。
具體實現層面:
我們可以把\(\gamma\)並行化處理,其次,演算法中的shuffle(V)的話其實就是把所有的node都全部打亂,然後挨個的遍歷一遍並做隨機遊走。在隨機遊走的時候,我們可能並不能保證每次都能拿到規定的長度,這時候可以不用管,直接break掉,有多少算多少,因為這些後面可以交給Word2Vec進行處理。
模擬一下隨機遊走:
def deepwalk_walk(walk_length, start_node): walk_seq = [start_node] while len(walk_seq) < walk_length: curr_node = walk[-1] cur_node_nbrs = list(G.neighbors(curr_node)) if len(cur_node_nbrs) > 0: walk.append(random.choice(curr_node_nbrs)) else: break return walk_seq
Word2Vec的訓練方式
拿到結點序列之後,我們將其看作是一段自然語言序列,這樣就可以順其自然的送到W2V裡面train。