DeepWalk算法

DeepWalk算法

介绍

图是一种非常有用的数据结构,可以表示共同交互。这些共同交互可以通过神经网络编码为嵌入,用于不同的机器学习算法。这就是DeepWalk算法的优势所在。

在本文中,我们将通过一个Word2Vec示例来探索DeepWalk算法。

让我们更多地了解图网络,这是该算法的核心所在。

如果我们考虑一个特定的生态系统,图通常表示两个或多个实体之间的交互。图网络有两个对象 – 节点或顶点和边。

DeepWalk算法

每个元素在图系统中表示为一个节点(或顶点)。例如,像Facebook这样的社交网络使用图网络将用户表示为节点。这个算法用于推荐朋友。

图的另一个方面是连接两个节点并从一个节点向另一个节点运行的边缘。这些边可以是单向的(有方向的)或双向的(无方向的)。它定义了节点之间的互动。它可以加权表示互动或链接的强度。例如,在上面讨论的Facebook朋友推荐算法中,边连接两个或更多用户。

现在,我们对图网络有了基本的了解,让我们深入研究DeepWalk算法。

DeepWalk算法

word2Vec模型允许将单词嵌入到n维空间向量中。Word2Vec是由Google于2013年发布的。在Word2Vec中,相似的单词在n维空间中靠近彼此。换句话说,它们具有相同的余弦距离。

DeepWalk算法

Word2Vec使用滑动窗口方法训练skip-gram算法。给定模型中的一个特定词,skip-gram模型试图预测周围的词。在我们的情况中,我们将预测目标节点附近的节点。周围的节点将被编码以找到最接近目标节点的节点。

DeepWalk

DeepWalk通过随机遍历图形来识别网络的潜在模式。然后神经网络将这些模式进行编码和学习以生成最终的嵌入。生成这些随机路径的极其简单的方法是从目标根开始,随机选择邻居节点,然后随机添加到路径中,然后选择该节点的邻居节点,以此类推,直到达到所需的步骤数量。在Facebook的好友推荐示例中,通过反复遍历网络路径生成id。这些id被视为Word2Vec模型中的标记。

DeepWalk算法的步骤:

  • 从特定节点开始,每个节点执行’K-random’个步骤。

  • 将每个遍历分配为节点和id序列。

  • 使用给定的节点/id字符串列表,用Skip-Gram算法训练一个名为q的Word2Vec模型。

DeepWalk算法

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是一个非常通用的算法。通过一些小的调整,它可以应用于许多类型的网络。它是考虑的最有效的算法之一。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程