基于Node2Vec的图嵌入实现过程

【Graph Embedding】node2vec:算法原理,实现和应用 前面介绍过基于DFS邻域的DeepWalk和基于BFS邻域的LINE。node2vec则是一种综合考虑dfs邻域和bfs邻域的graph embedding方法。 DeepWalk:算法原理,实现和应用 LINE:算法原理,实现和应用 简单来说,node2vec是deepwalk的一种扩展,可以看作是结合了dfs和bfs随机游走的deepwalk。 nodo2vec 算法原理 优化目标 设f(u)......... 阅读详情
AI摘要

随着图结构数据增多,图嵌入技术受关注。本文介绍Node2Vec图嵌入方法,阐述其基于随机游走的原理,包括控制游走的参数p和q,以及嵌入学习过程。还通过实践展示如何读取JSON文件、训练模型、进行二维和三维嵌入可视化,并将嵌入和关系保存为JSON文件,为机器学习任务提供支持。

一、引言

  随着互联网的发展,社交网络、推荐系统以及知识图谱等应用中的图结构数据越来越多,如何从这些复杂的关系网中提取出有意义的信息,成为了机器学习中的一大挑战。图结构数据的关键在于节点(如用户、物品等)之间的关联关系,而要从图中有效提取节点的特征,我们需要一种能保留图的结构信息的嵌入方法。

  传统的机器学习方法难以直接处理图数据,因为图的结构不如图像和文本那样规则,图中的节点没有固定的顺序,也没有明确的拓扑形式。因此,近年来图嵌入(Graph Embedding)技术得到了广泛关注。通过图嵌入方法,我们可以将图中的节点映射为低维向量,使其能够被应用到分类、聚类、推荐等任务中。

  Node2Vec 是一种基于随机游走(Random Walk)的节点嵌入方法。它通过对图中的节点进行采样,并利用这些采样结果训练出能够表示节点的嵌入向量。这些向量不仅能保留节点的局部邻域信息,还能反映节点在整个图中的全局位置。本文的目的在于详细介绍如何通过代码实践使用Node2Vec进行图嵌入、对嵌入结果进行可视化,并最终将嵌入向量存储为JSON文件。

二、Node2Vec(原理)

2.1 随机游走(Random Walk)

  Node2Vec 基于图上的随机游走来捕捉节点的结构特性。随机游走是一种类似于在图上进行漫步的过程,即从一个节点出发,每次根据一定的概率选择下一个要访问的节点。通过多次游走,Node2Vec可以得到一系列的节点序列,这些序列可以看作是图中的“路径”,用于训练节点的嵌入表示。

  Node2Vec 提供了两个关键参数 p p p 和 q q q,用来控制随机游走的方式:

  • 参数 p p p:回归系数,用于控制游走时返回前一个节点的概率。 p p p 越大,模型越倾向于向更远的节点扩展。

  • 参数 q q q:探索系数,用于控制模型深度优先搜索(DFS)和广度优先搜索(BFS)之间的平衡。 q q q 越大,游走更倾向于深度探索,即更多地访问图的深层节点; q q q 较小时,游走更倾向于广度探索,即优先访问节点的直接邻居。

  通过调节这两个参数,Node2Vec 能够适应不同的任务需求。例如,在社交网络中,我们可能希望重点关注与用户相邻的其他用户,此时较小的 q q q值能帮助我们更好地捕捉局部社区结构。而在知识图谱中,我们可能希望深入挖掘某个概念与远端概念的关系,此时较大的 q q q 值可以帮助捕获图的全局结构。

在这里插入图片描述

2.2 嵌入学习

  一旦通过随机游走得到节点序列,Node2Vec 将这些序列视为词语序列,采用类似 Word2Vec 的 Skip-Gram 模型进行嵌入学习。Skip-Gram 模型的目标是给定一个节点,预测其上下文节点(即在随机游走序列中与该节点相邻的节点)。

  在这个过程中,Node2Vec 学习到每个节点的嵌入向量。这些嵌入向量能够保留节点之间的相似性,邻近的节点将拥有相近的嵌入表示。最终,通过这种方式,图中的每个节点都被映射到一个固定维度的向量空间中,嵌入向量可以直接用于下游任务,如节点分类、边预测和社区检测。

2.3 Node2Vec 的优势

  Node2Vec 的最大优势在于它可以同时捕捉局部和全局的图结构信息。相比于传统的图算法(如PageRank)只考虑节点的全局属性,或者某些仅仅考虑局部连接的嵌入方法,Node2Vec 能够通过灵活的随机游走策略,在不同的场景下取得更好的表现。

  此外,Node2Vec 的随机游走策略可以高效处理大型图,尤其是对于节点和边非常多的复杂网络,Node2Vec 仍然能通过较少的计算时间获得高质量的嵌入向量。

三、使用 Node2Vec 进行图嵌入(实践)

3.1 读取和转换 JSON 文件为 Graph 对象

  在正式训练模型之前,首先我们需要将原始的数据加载为图结构。在很多实际应用场景中,图结构的输入数据并不是直接以图的形式给出,而是以诸如JSON等格式的文件存储了节点之间的关系。因此,第一步的任务是将JSON文件中的节点和边转化为可以用于训练的 Graph 对象。(本文使用的json文件可以从百度网盘下载)

import json
import networkx as nx

# 读取并转换JSON文件为Graph对象的函数
def read_and_convert_json_to_graph(json_file):
    with open(json_file, 'r') as file:
        json_list = json.load(file)

    G = nx.Graph()  # 创建一个空的无向图
    for item in json_list:
        G.add_edge(item['object1'], item['object2'])  # 添加边

    return G

  在上面的代码中,read_and_convert_json_to_graph 函数负责读取JSON文件,并将其中的节点(object1 和 object2)之间的关系转换为图的边(edge)。具体过程如下:

  • 通过 json.load() 将JSON文件中的内容加载为Python的列表格式。

  • 遍历该列表中的每个元素,并使用 networkx 库将两个节点之间的关系加入到无向图 G 中。

  最终,我们会得到一个完整的 Graph 对象,它包含了所有节点及它们之间的连接。这个 Graph 对象将作为Node2Vec 模型的输入,进一步进行节点嵌入训练。

3.2 训练 Node2Vec 模型

  接下来,利用构建好的图对象,我们将使用Node2Vec库进行节点嵌入的训练。Node2Vec 的核心思想是通过随机游走生成节点序列,并通过这些序列学习节点的嵌入表示。

from node2vec import Node2Vec

# Node2Vec模型训练函数
def train_node2vec(graph, dimensions=64, walk_length=30, num_walks=200, p=1, q=1, workers=4):
    node2vec = Node2Vec(graph, dimensions=dimensions, walk_length=walk_length, num_walks=num_walks, p=p, q=q, workers=workers)
    model = node2vec.fit(window=10, min_count=1, batch_words=4)
    return model

  在这个 train_node2vec 函数中,我们定义了几个关键参数来控制Node2Vec的训练过程:

  • dimensions:嵌入向量的维度,即我们希望每个节点被映射到多少维度的向量空间。通常,维度越高,模型能表达的信息越丰富,但训练时间也会增加。

  • walk_length:随机游走的长度,决定每次游走过程中访问的节点数目。

  • num_walks:每个节点的游走次数,即我们为每个节点采样的路径数量。

  • p 和 q:前面介绍的控制游走策略的两个参数,分别控制返回前一节点的概率和探索新节点的概率。

  • workers:并行计算的线程数,用于加速训练过程。

  训练完成后,fit() 函数返回的是一个包含了所有节点嵌入向量的模型对象。我们可以通过该模型获取每个节点的嵌入向量,并将这些向量用于后续的任务。

3.3 二维嵌入可视化

  在训练完Node2Vec模型并得到节点的高维嵌入向量后,直接查看这些高维向量并不直观,因此我们通常需要将其降维,以便通过图形展示这些节点在嵌入空间中的分布情况。

  二维可视化是最常用的手段之一。我们可以使用降维算法(如主成分分析 PCA)将嵌入向量从高维空间降至二维,从而通过平面图直观展示节点之间的相对位置。接下来是实现代码:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA

# 二维可视化嵌入的函数
def visualize_embeddings(model, graph, save_path='embeddings_visualization.png'):
    # 获取所有节点的嵌入向量
    embeddings = np.array([model.wv[str(node)] for node in graph.nodes()])
    
    # 使用PCA将嵌入向量降维到2D
    pca = PCA(n_components=2)
    embeddings_2d = pca.fit_transform(embeddings)

    # 绘制图形
    plt.figure(figsize=(20, 16))  # 设置图形大小
    pos = {node: embeddings_2d[i] for i, node in enumerate(graph.nodes())}

    # 绘制节点,设置节点大小和颜色
    nx.draw_networkx_nodes(graph, pos=pos, node_size=30, node_color='blue')

    # 绘制图中的边,透明度alpha设置较低以减少边线干扰
    nx.draw_networkx_edges(graph, pos=pos, alpha=0.1)

    # 隐藏坐标轴
    plt.axis('off')

    # 保存结果并展示图像
    plt.savefig(save_path)
    plt.show()
  • 获取节点嵌入向量:从训练好的 Node2Vec 模型中提取节点的嵌入向量,这些嵌入向量被保存在 model.wv 中,其中每个节点的 ID 被转化为字符串格式。

  • PCA降维:使用 PCA 将高维嵌入向量降至二维。PCA 是一种常见的降维技术,它能够提取数据中最重要的两个主成分,使得降维后的数据尽可能保留原始高维数据中的信息。

  • 节点和边的可视化:通过 networkx 提供的 draw_networkx_nodes 和 draw_networkx_edges 方法来绘制图形中的节点和边。节点颜色为蓝色,边的透明度较低,以减少边线的干扰,使节点的位置关系更加清晰可见。

  • 图形保存与显示:绘制好的图形保存为 PNG 文件,并显示出来以供查看。plt.savefig() 可以保存结果,plt.show() 用于在执行程序时显示图像。

  通过这种方式,节点会根据其嵌入向量的相似性在二维平面上分布。距离较近的节点往往在嵌入空间中更为相似,说明它们在图结构中有更密切的联系。反之,距离较远的节点可能属于不同的社区或子图。

3.4 三维嵌入可视化

  虽然二维可视化已经能帮助我们理解节点嵌入,但在某些场景中,我们可能希望更丰富的维度来展示节点的分布。此时,三维可视化可以提供更直观的展示效果。通过降维到三维,我们能够通过三维图形进一步观察节点的相互关系。

from mpl_toolkits.mplot3d import Axes3D
from sklearn.decomposition import PCA

# 三维可视化嵌入的函数
def visualize_embeddings_3d(model, graph, save_path='embeddings_visualization_3d.png'):
    # 获取所有节点的嵌入向量
    embeddings = np.array([model.wv[str(node)] for node in graph.nodes()])
    
    # 使用PCA将嵌入向量降维到3D
    pca = PCA(n_components=3)
    embeddings_3d = pca.fit_transform(embeddings)

    # 创建3D绘图
    fig = plt.figure(figsize=(20, 16))
    ax = fig.add_subplot(111, projection='3d')

    # 获取嵌入向量的三个维度(x, y, z坐标)
    xs = embeddings_3d[:, 0]
    ys = embeddings_3d[:, 1]
    zs = embeddings_3d[:, 2]

    # 绘制节点
    ax.scatter(xs, ys, zs, c='blue', marker='o')

    # 设置轴标签
    ax.set_xlabel('PCA1')
    ax.set_ylabel('PCA2')
    ax.set_zlabel('PCA3')

    # 添加标题
    plt.title('3D visualization of Node Embeddings')

    # 保存并展示图像
    plt.savefig(save_path)
    plt.show()
  • PCA降维到三维:与二维可视化类似,这里我们将嵌入向量从高维空间降至三维。这三个维度能够提供更多的嵌入信息,从而帮助我们更好地观察节点的分布情况。

  • 三维绘图:通过 mpl_toolkits.mplot3d 的 Axes3D 类进行三维图形的绘制。我们提取PCA降维后的三个维度(x、y、z坐标),并将其用于三维散点图的绘制。

  • 散点绘制:使用 scatter() 函数绘制节点,每个节点显示为一个三维点。我们可以通过颜色、大小、标记等属性来调整节点的视觉效果。在本例中,节点颜色为蓝色,标记为圆形。

  • 图形轴标签与标题:为三维图形的各个坐标轴(PCA1、PCA2、PCA3)添加标签,以便清晰显示每个维度代表的含义。此外,还为图形添加了标题,方便理解可视化内容。

  三维图形相比于二维图形能够展示更多的信息。特别是在处理嵌入维度较高的情况下,三维可视化能够帮助我们更好地理解节点在嵌入空间中的位置关系。通过旋转三维图形,我们可以从不同角度观察节点的分布情况,发现潜在的社区结构或其他有趣的模式。

3.5 保存嵌入和关系到 JSON 文件

  在获得了节点嵌入向量后,我们往往需要将这些向量保存下来,方便后续的分析与应用。在实际项目中,我们可能需要将嵌入向量与原始的关系数据一起存储,以便后续模型或任务能够继续利用这些嵌入。

  下面的代码展示了如何将节点的嵌入向量与原始的JSON文件结合,并将结果保存为一个新的JSON文件。

def save_embeddings_to_json(graph, model, json_file_path, output_file):
    # 读取原始的JSON文件来获取对象间的关系
    with open(json_file_path, 'r') as file:
        json_list = json.load(file)

    output_data = []

    for item in json_list:
        object1, object2 = item['object1'], item['object2']

        # 对于每对对象,获取其嵌入向量
        properties1 = model.wv[object1].tolist() if object1 in model.wv else None
        properties2 = model.wv[object2].tolist() if object2 in model.wv else None

        # 构建新的字典项,包含嵌入向量和原始关系
        modified_item = {
            "object1": object1,
            "properties1": properties1,
            "object2": object2,
            "properties2": properties2,
            "relationship": item.get('relationship')  # 假设原始JSON中包含关系字段
        }
        output_data.append(modified_item)

    # 将修改后的数据写入新的JSON文件
    with open(output_file, 'w') as f:
        json.dump(output_data, f, indent=4)
  • 原始关系读取:首先,我们读取原始的JSON文件,获取其中包含的节点及其关系。在本例中,JSON文件中的每一条记录包含两个对象(object1 和 object2),代表它们之间的某种关系。

  • 嵌入向量提取:对于每个对象,我们通过模型中的 model.wv 获取其对应的嵌入向量。如果某个对象没有嵌入向量(例如由于它在训练中未出现),我们可以将其设置为 None。

  • 数据结构修改:将每对对象的嵌入向量(properties1 和 properties2)与它们的关系信息(relationship)一起构造一个新的数据项。

  • 结果保存:最终,将所有修改后的数据写入一个新的JSON文件,以便在后续的分析中使用。

3.6 完整代码

import json
import numpy as np
from node2vec import Node2Vec
import networkx as nx
import matplotlib.pyplot as plt


# 读取并转换JSON文件为Graph对象的函数
def read_and_convert_json_to_graph(json_file):
    with open(json_file, 'r') as file:
        json_list = json.load(file)

    G = nx.Graph()  # 创建一个空的无向图
    for item in json_list:
        G.add_edge(item['object1'], item['object2'])  # 添加边

    return G


# Node2Vec模型训练函数
def train_node2vec(graph, dimensions=64, walk_length=30, num_walks=200, p=1, q=1, workers=4):
    # 使用Node2Vec库
    node2vec = Node2Vec(graph, dimensions=dimensions, walk_length=walk_length, num_walks=num_walks, p=p, q=q,
                        workers=workers)

    # 训练模型
    model = node2vec.fit(window=10, min_count=1, batch_words=4)

    return model


# 可视化嵌入的函数,实现二维可视化
def visualize_embeddings(model, graph, save_path='embeddings_visualization.png'):
    # 获取嵌入向量
    embeddings = np.array([model.wv[str(node)] for node in graph.nodes()])

    # 使用PCA进行降维以便于可视化
    from sklearn.decomposition import PCA
    pca = PCA(n_components=2)
    embeddings_2d = pca.fit_transform(embeddings)

    # 绘制节点嵌入
    plt.figure(figsize=(20, 16))
    pos = {node: embeddings_2d[i] for i, node in enumerate(graph.nodes())}

    # 调整节点大小和边的透明度
    nx.draw_networkx_nodes(graph, pos=pos, node_size=30, node_color='blue')
    edges = nx.draw_networkx_edges(graph, pos=pos, alpha=0.1)  # 减少alpha以降低边的透明度

    plt.axis('off')  # 关闭坐标轴
    plt.savefig(save_path, format='PNG')  # 先保存可视化结果到文件
    plt.show()  # 然后显示图像
    plt.close()  # 关闭图形,防止重复显示

# 修改后的可视化嵌入函数,实现三维可视化
def visualize_embeddings_3d(model, graph, save_path='embeddings_visualization_3d.png'):
    # 获取嵌入向量
    embeddings = np.array([model.wv[str(node)] for node in graph.nodes()])

    # 使用PCA进行到3维的降维
    from sklearn.decomposition import PCA
    pca = PCA(n_components=3)
    embeddings_3d = pca.fit_transform(embeddings)

    # 创建3D绘图
    fig = plt.figure(figsize=(20, 16))
    ax = fig.add_subplot(111, projection='3d')

    # 获取节点的三维坐标
    xs = embeddings_3d[:, 0]
    ys = embeddings_3d[:, 1]
    zs = embeddings_3d[:, 2]

    # 绘制节点
    ax.scatter(xs, ys, zs, c='blue', marker='o')

    ax.set_xlabel('PCA1')
    ax.set_ylabel('PCA2')
    ax.set_zlabel('PCA3')
    plt.title('3D visualization of Node Embeddings')

    plt.savefig(save_path, format='PNG')  # 保存可视化结果到文件
    plt.show()  # 显示图像
    plt.close()  # 关闭图形,防止重复显示

def save_embeddings_to_json(graph, model, json_file_path, output_file):
    # 首先,读取原始的JSON文件来获取对象间的关系
    with open(json_file_path, 'r') as file:
        json_list = json.load(file)

    output_data = []

    for item in json_list:
        object1, object2 = item['object1'], item['object2']
        # 对于每对对象,获取其嵌入向量
        properties1 = model.wv[object1].tolist() if object1 in model.wv else None
        properties2 = model.wv[object2].tolist() if object2 in model.wv else None
        # 构建新的字典项
        modified_item = {
            "object1": object1,
            "properties1": properties1,
            "object2": object2,
            "properties2": properties2,
            "relationship": item.get('relationship')  # 假设原始JSON中包含关系字段
        }
        output_data.append(modified_item)

    # 将修改后的数据写入新的JSON文件
    with open(output_file, 'w') as f:
        json.dump(output_data, f, indent=4)

# 主程序
if __name__ == "__main__":
    json_file_path = 'Node2Vec_Input.json'
    output_file = 'Node2Vec_Embeddings_Dim768.json'

    G = read_and_convert_json_to_graph(json_file_path)

    #节点嵌入维度为dimensions
    model = train_node2vec(G, dimensions=768, walk_length=20, num_walks=200, p=1, q=2, workers=4)
    visualize_embeddings_3d(model, G, 'embeddings_visualization_Dim768_3D_20-200-1-2-4.png')

    # 调用新定义的函数,保存嵌入和关系到JSON
    save_embeddings_to_json(G, model, json_file_path, output_file)

四、结论

  通过以上的过程,我们完整地介绍了如何使用Node2Vec进行图嵌入、如何将嵌入结果可视化以及如何保存嵌入向量。Node2Vec 提供了一种灵活且高效的方式来处理图数据,并且能够通过参数调整适应不同的图结构。通过嵌入向量,我们可以将图结构信息转化为适合机器学习模型处理的低维向量形式,从而为分类、聚类、推荐系统等任务提供支持。

图神经网络——node2vec 论文地址:https://arxiv.org/pdf/1607.00653.pdf 发表会议:KDD2016 文章目录1. 引言2. 采样算法2.1. 传统的采样算法2.2. Node2vec中的采样算法2.3. 使用基于random walk采样的好处(时间空间复杂度分析)3. node2vec算法流程 1. 引言 这篇论文可以说是对DeepWalk的扩展。按照LINE中的说法,DeepWalk只捕捉了节点间的二阶相似性,LINE同时捕捉节点间的一阶相似性和二阶相似性。而Node2Vec也是同时捕捉.. 阅读详情

相关推荐

【网络表示学习】node2vec

todo

zjwreal 1487

图神经网络之Node2Vec详解

目录背景传统算法存在的问题算法背景动机算法随机序列的生成Node2Vec算法算法的具体流程:总结相关资料 背景 传统算法存在的问题 一些方法中所提出的特征需要依赖人手工定义,这需要特定领域内专业人士来完成,而且依靠人手工定义特征的有效性无法保证。 利用一些非监督学习中的降维方法计算效率低,准确度也不够,而且还不能反应出网络的结构特征。 算法背景 Node2Vec继承于随机游走模型DeepWalk算法模型,也是属于图神经网络种随机游走模型一类。 作者提出网络结构中存在以下两种现象: 1)同质性:社区关系

weixin_42722532的博客 1万+

Graph Embedding(DeepWalk,LINE,Node2vec)

Graph Embedding 属于表示学习。主要是将图中的节点/图表示成低维,实值,稠密的向量形式,使得到的向量能够做进一步的推理,对下游任务会很有帮助。图嵌入(顶点嵌入/图嵌入)方法主要有矩阵分解,随机游走和深度学习。 矩阵分解: 基于矩阵分解的方法是将节点间的关系用矩阵的形式加以表达,然后分解该矩阵以得到嵌入向量。通常用于表示节点关系的矩阵包括邻接矩阵,拉普拉斯矩阵,节点转移概率矩阵,节点...

nakaizura 6567

【补充】图神经网络前传——Node2vec

对于网络中的节点和边来做预测,首先需要做特征工程,把他们变成向量,有了这些向量之后才能输入到后续的机器学习算法当中,继续做下游的预测、分类任务。但是当时表示学习(ML)在图中的应用(如deepwalk、line)的表示能力不够高->无法反应出节点更丰富的特征和更丰富的连接属性。提出node2vec,一个更好的做node embedding的方法。node2vec是使用极大似然估计来实现训练。定义了一个非常灵活的,有偏随机游走方法,可以有效的探索多样的属性(邻居?),得到更丰富的表示。

Karen_Yu_的博客 2138

图嵌入Graph embedding学习笔记

将图的节点或边映射到一个低维的向量空间,即**将海量、高维、异构、复杂和动态的数据表示为统一、低维、稠密的向量**,用以保存图的结构和性质,旨在实现节点分类与聚类、链接预测、图的重构和可视化 等,提供一种具有更低计算复杂度的方法。 包括**节点、边、子图、全图**基于**手工构造特征、矩阵分解、随机游走、图神经网络**的图嵌入方法。 1.DeepWalk 采用随机游走形成序列,采用skip-gram方法生成节点embedding。 2.node2vec 采用不同的随机游走策略形成序列,类似skip-gram

weixin_45928096的博客 4180

PGL 系列(六)node2vec

paddle 2.4.0 node2vec 复现

_yuki_ 705

大规模图嵌入 示例_ICLR 2020 | 基于谱方法的高效多级图嵌入框架

提高图嵌入的质量和效率是一直以来被关注的两个问题。一方面,图嵌入应该利用图的结构性特征以及节点的属性特征来提升嵌入的质量;另一方面,提高图嵌入方法的效率和可扩展性使其能够应用到超大规模的图上。这两个问题常常是正交的。因此,本文希望能够同时提升图嵌入的效率和质量。阅读原文:GraphZoom: A Multi-level Spectral Approach for Accurate and Scal...

weixin_30402009的博客 144

Deep Walk 和 Node2Vec:图嵌入

DeepWalk 是一种基于图的机器学习算法,可为给定图生成节点嵌入。它由纽约大学的 Bryan Perozzi、Rami Al-Rfou 和 Steven Skiena 于 2014 年开发。 该算法的目标是通过分析图中每个节点的局部邻域来学习图中每个节点的表示。 DeepWalk应用了skip-gram的概念(也用于自然语言处理)来为每个节点生成向量嵌入。这个想法是将图上的随机游走视为句子,并将每个节点视为句子中的一个单词。

gongdiwudu的专栏 6774

图嵌入核心:随机游走平稳分布与node2vec算法深度解析

图表示学习是机器学习领域处理关系数据的关键技术,旨在将复杂的图结构信息转化为低维稠密的向量表示。其核心原理之一是基于马尔可夫链的随机游走,通过模拟节点间的随机转移来捕获图的结构特性。这一过程最终会收敛到一个平稳分布,该分布编码了图中节点的重要性与连接模式,是理解图嵌入算法理论根基的钥匙。从技术价值看,平稳分布及其背后的细致平衡条件,为设计高效的图嵌入算法提供了理论框架和优化方向。在应用场景上,经典的node2vec算法正是通过精心设计有偏的随机游走策略(由参数p和q控制),来塑造其平稳分布,从而让模型能够灵

weixin_31887307的博客 359

node2vec:node2vec算法的实现

Node2Vec node2vec算法Aditya Grover,Jure Leskovec和Vid Kocijan的Python3实现。 安装 pip install node2vec 用法 import networkx as nx from node2vec import Node2Vec # Create a graph graph = nx . fast_gnp_random_graph ( n = 100 , p = 0.5 ) # Precompute probabilities and generate walks - **ON WINDOWS ONLY WORKS

RDMA网络通信技术、NCCL集合通讯(GPU)

NCCL 是 NVIDIA 专为 GPU 设计的高性能集合通信库,用于优化多 GPU、多节点间的集体操作(如 AllReduce、Broadcast、AllGather 等),是深度学习分布式训练的核心组件。RDMA 允许计算机直接访问远程内存,无需 CPU 干预,大幅降低了网络通信的延迟和 CPU 开销。常见的 RDMA 实现包括。是两项关键技术,用于优化节点间数据传输效率和大规模并行计算性能。在高性能计算(HPC)、人工智能训练和数据密集型场景中,

weixin_42795092的博客 2422

葡萄书--图表示学习

目标是对节点进行编码,使得嵌入空间中的相似性(例如点积)近似于原始网络中的相似性。

m0_73202283的博客 744

知识图谱本体建模之RDF、RDFS、OWL详解

(一)知识图谱本体建模之RDF、RDFS、OWL详解 1.语义网体系 知识图谱于2012年由Google提出,并不是新概念,而是由语义网络(Semantic Network)衍生而来。语义网络由相互连接的节点和边组成,节点表示概念或者对象,边表示他们之间的关系。RDF,RDFS与OWL都是基于语义网的知识表示框架,在节点和边的取值上做了约束,制定了统一标准,为多源数据的融合提供了便利。RDF,RDFS/OWL 属于语义网技术栈,它们的提出,使得语义网克服了语义网络的缺点。其语义网技术栈如下所示。 2.RD

周周的专栏 1万+

Node2vec原理剖析,代码实现

DeepWalk原理介绍 与词嵌入类似,图嵌入基本理念是基于相邻顶点的关系,将目的顶点映射为稠密向量,以数值化的方式表达图中的信息,以便在下游任务中运用。 Word2Vec根据词与词的共现关系学习向量的表示,DeepWalk受其启发。它通过随机游走的方式提取顶点序列,再用Word2Vec模型根据顶点和顶点的共现关系,学习顶点的向量表示。可以理解为用文字把图的内容表达出来,如下图所示。 DeepWalk训练图表示的整个过程大致可以分为2步: 随机游走提取顶点序列 使用skip-gram学习顶点嵌入 训

jiede1的博客 4879

学习笔记7--激光雷达标定

本系列博客包括6个专栏,分别为:《自动驾驶技术概览》、《自动驾驶汽车平台技术基础》、《自动驾驶汽车定位技术》、《自动驾驶汽车环境感知》、《自动驾驶汽车决策与控制》、《自动驾驶系统设计及应用》,笔者不是自动驾驶领域的专家,只是一个在探索自动驾驶路上的小白,此系列丛书尚未阅读完,也是边阅读边总结边思考,欢迎各位小伙伴,各位大牛们在评论区给出建议,帮笔者这个小白挑出错误,谢谢! 此专栏是关于《自动驾驶汽车环境感知》书籍的笔记。 2.激光雷达标定 2.1 概述 激光雷达内参标定:内部激光发射器坐标系与雷达本

FUXI_Willard 8027

1小时读完100篇文献的正确打开方式

各位同仁好,我是七哥。一个在高校里从事人工智能 相关领域研究,钻研用大模型AI实操的学术人。可以和七哥交流学术写作或Gemini、GPT、Claude 等大模型 学术实操相关问题,多多交流,相互成就,共同进步。文献阅读与整理一般都是最先开始、却也最容易被低估的一步。很多学术同仁一开始就陷入越读越多、越读越乱的状态:论文下载了一大堆,但真正能用来支撑自己观点的内容却始终难以提炼出来。一方面,我们需要通过文献了解该研究领域的整体发展脉络,把握当前学界已经讨论到什么程度;

智能AI让学术科研更容易 49

图嵌入(Graph embedding)

目录Graph embedding的意义图嵌入可以解决的问题为什么我们要使用图形嵌入?什么是图嵌入?图嵌入的挑战Word2vec图嵌入方法总结参考资料后记 Graph embedding的意义 Graph广泛存在于真实世界的多种场景中,即节点和边的集合。比如社交网络中人与人之间的联系,生物中蛋白质相互作用以及通信网络中的IP地址之间的通信等等。除此之外,我们最常见的一张图片、一个句子也可以抽象...

小红花yu 1万+

【异常】OpenClaw 上下文溢出问题(100% context used 309.9k/200k`)排查与解决

摘要:OpenClaw 运行出现"100% context used 309.9k/200k"报错,表示上下文窗口超出200k Token限制。解决方法包括:1) 重启服务或新建会话清空缓存;2) 修改配置文件提升context_window值;3) 长期优化如限制历史对话轮数、分批处理长文本。该问题通常由输入过长或多轮对话累积导致,需控制单次输入量在阈值内。

奶爸的编程之路,也就一周冷个三天 3236

graph embedding(图嵌入)

图embedding 文章目录图embedding一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码如下(示例): import

mengmeng6666的博客 4347

safetensors_rust.SafetensorError: Error while deserializing header: MetadataIncompleteBuffer解决方案

本文主要介绍了safetensors_rust.SafetensorError: Error while deserializing header: MetadataIncompleteBuffer解决方案,希望能对使用Python的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案 2.1 Windows 2.2 Linux

weixin_43178406的博客 15万+

黑猫带你学eMMC协议第14篇:eMMC FFU详解(Field Firmware Update)

1 前言 1.1 声明 本文依据eMMC JEDEC5.1及个人工作经验整理而成,如有错误请留言。 本文结合eMMC JEDEC5.1协议手册查看效果更佳。 1.2 内容提要 1、ffu相关寄存器有哪些? 2、如何设置ffu? 3、什么是ffu?是否能够更新旧版本的固件到emmc? 4、ffu配置流程图。 2 什么是FFU 主机下载新的固件到eMMC,下载成功后eMMC将固件安装到设备。 3 相关寄存器/命令 SUPPORTED_MODES [493] FFU_FEATURES [492] 该

黑猫奥利奥的博客 4658

node2vec算法

node2vec算法详解以及代码实例

qq_43138237的博客 4938

无线通信基础:调制与解调技术_(42).7.3.2多进制频移键控解调(MFSK解调)

MFSK解调是一种通过频谱分析和频率检测来恢复数字信号的技术。本文介绍了MFSK解调的基本原理,包括信号接收、频谱分析、频率检测和符号判决。在实际应用中,噪声会对解调性能产生影响,因此引入了信噪比优化和多步判决方法来提高解调的准确性。通过性能评估,可以更好地理解MFSK解调在不同噪声环境下的表现。这些方法和技术为MFSK在实际通信系统中的应用提供了理论和实践基础。

2401_87715305的博客 1318

Node2Vec: 图嵌入的强大工具

在现代图挖掘和网络分析中,图嵌入(Graph Embedding)是一种将图中的节点映射到低维向量空间的方法。这些低维向量可以作为输入用于各种机器学习任务,如节点分类、链接预测和图分类。Node2Vec 是一种流行的图嵌入算法,能够有效地捕捉图结构并生成高质量的节点嵌入。本文将详细介绍 Node2Vec 的工作原理、关键参数以及使用方法。

m0_53623159的博客 1363

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

论文笔记:详解DeepWalk与Node2vec

最近读了DeepWalk和Node2vec这两篇图学习的经典文章,对自己的笔记进行了整理。对这两种算法做了详细介绍。

zly_Always_be的博客 4421

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

从Word2vec到Graph2vec:一文搞懂图嵌入的7种经典算法(附代码)

本文深入解析了从Word2vec到Graph2vec的7种经典图嵌入算法,包括DeepWalk、Node2vec、LINE等,详细介绍了它们的核心思想、适用场景及代码实现。图嵌入技术通过将节点、边或整个图映射到低维向量空间,为图分析任务提供了高效解决方案,适用于社交网络、知识图谱等多种场景。

ss78901的博客 940

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

上一篇: DialMAT:跨模态特征提取与对抗训练的结合
下一篇: 时间卷积网络(TCN)原理+代码详解
晓shuo
晓shuo 优质创作者: 人工智能技术领域 优质创作者: 人工智能技术领域
博客等级 码龄6年 4万+粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓shuo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值