DeepWalk 演算法
簡介
圖是一種非常有用的資料結構,可以表示共同互動。這些共同互動可以透過神經網路編碼為嵌入,用於不同的機器學習演算法。這就是 DeepWalk 演算法閃光的地方。
在本文中,我們將使用 Word2Vec 示例來探索 DeepWalk 演算法。
讓我們進一步瞭解圖網路,該演算法的核心基於此。
圖
如果我們考慮一個特定的生態系統,圖通常表示兩個或多個實體之間的互動。圖網路有兩個物件——節點或頂點和邊。

節點(或頂點)表示圖系統中的每個元素。例如,Facebook 等社交網路使用圖網路將使用者表示為節點。此演算法用於推薦朋友。
圖的另一個方面是連線兩個節點並從一個節點執行到另一個節點的邊。這些邊可以是單向的(有向的)或雙向的(無向的)。它定義了節點的互動。它可以加權以表示互動或連結的強度。例如,在上面討論的 Facebook 好友推薦演算法中,邊連線兩個或多個使用者。
現在,我們已經對圖網路有了基本的瞭解,讓我們深入瞭解 DeepWalk 演算法。
DeepWalk 演算法
word2Vec 模型允許將單詞嵌入到 n 維空間向量中。Word2Vec 由 Google 於 2013 年釋出。在 Works2Vec 中,相似的單詞在 n 維空間中彼此靠近放置。換句話說,它們具有相同的餘弦距離。

Word2Vec 使用基於滑動視窗方法的跳字演算法進行訓練。給定模型中的特定單詞,跳字模型嘗試預測周圍的單詞。在我們的場景中,我們將根據目標節點預測鄰居節點。將對周圍節點進行編碼以找到最接近目標節點的節點。
DeepWalk
DeepWalk 透過隨機遍歷圖來識別網路的潛在模式。然後,神經網路對這些模式進行編碼和學習,以生成最終的嵌入。生成這些隨機路徑的一種極其簡單的方法是從目標根開始,隨機選擇該節點的鄰居,然後將其隨機新增到路徑中,然後隨機選擇該節點的鄰居,並繼續遍歷,直到您已執行所需的步數。在 Facebook 好友推薦示例中,透過重複遍歷網路的路徑生成 ID。這些 ID 在 Word2Vec 模型中被視為標記。
DeepWalk 演算法的步驟。
從特定節點開始,從每個節點執行“K-隨機”步。
將每次遍歷分配為節點和 ID 序列
使用給定的節點/ID 字串列表,使用跳字演算法訓練 q Word2Vec 模型。

DeepWalk 演算法的 Python 程式碼
## Deepwalk import numpy as np import random from tqdm import tqdm import warnings warnings.filterwarnings('ignore') from sklearn.decomposition import PCA import networkx as nx import matplotlib.pyplot as plt import pandas as pd from gensim.models import Word2Vec %matplotlib inline df_data = pd.read_csv("/content/space_data.tsv", sep = "\t") df_data.head() g = nx.from_pandas_edgelist(df_data, "source", "target", edge_attr=True, create_using=nx.Graph()) def get_random_walk(node, pathlength): random_walk = [node] for i in range(pathlength-1): tmp = list(g.neighbors(node)) tmp = list(set(tmp) - set(random_walk)) if len(tmp) == 0: break ran_node = random.choice(tmp) random_walk.append(ran_node) node = ran_node return random_walk allnodes = list(g.nodes()) walks_list_random = [] for n in tqdm(allnodes): for i in range(5): walks_list_random.append(get_random_walk(n,10)) # count of sequences len(walks_list_random) model = Word2Vec(window = 4, sg = 1, hs = 0, negative = 9, alpha=0.04, min_alpha=0.0005,seed = 20) model.build_vocab(walks_list_random, progress_per=2) model.train(walks_list_random, total_examples = model.corpus_count, epochs=20, report_delay=1) model.similar_by_word('artificial intelligence')
輸出
100%|██████████| 2088/2088 [00:00<00:00, 6771.58it/s] [('robot ethics', 0.9894747138023376), ('cognitive robotics', 0.9886192083358765), ('evolutionary robotics', 0.9876964092254639), ('multi-agent system', 0.9861799478530884), ('cloud robotics', 0.9842559099197388), ('fog robotics', 0.9835143089294434), ('glossary of robotics', 0.9817663431167603), ('soft robotics', 0.9738423228263855), ('robotic governance', 0.9687554240226746), ('robot rights', 0.9686211943626404)]
解釋 - 輸出列出了與搜尋詞(查詢)“'人工智慧'”最相似的詞。輸出是一個元組列表,其中每個元組的第一個元素是一個相似的詞,第二個元素是置信度值。例如,“機器人倫理”相似度為 98.9%(置信度 - 0.989),然後是認知機器人學 (0.988) 等
結論
DeepWalk 是一種用途廣泛的演算法。只需稍加調整,就可以在多種網路中實現。它是可以考慮的最有效的演算法之一。