Embedding技术:DeepWalkNode2vec
引言
在推荐系统中,Graph Embedding技术已经成为一种强大的工具,用于捕捉用户和物品之间的复杂关系。本文将介绍Graph Embedding的基本概念、原理及其在推荐系统中的应用。
什么是Graph Embedding?
Graph Embedding是一种将图中的节点映射到低维向量空间的技术。通过这种映射,图中的节点可以在向量空间中表示为密集的向量,从而方便进行各种机器学习任务,如分类、聚类和推荐。

Graph Embedding的基本原理
1. 图的表示
一个图 G = ( V , E ) G = (V, E) G=(V,E)由节点集合 V V V和边集合 E E E组成。在推荐系统中,节点可以表示用户或物品,边可以表示用户与物品之间的交互(如点击、购买等)。图可以是有向的或无向的,也可以是加权的(例如,边权重表示交互的强度)。
2. 目标函数
Graph Embedding的目标是学习一个映射函数 f : V → R d f: V \rightarrow \mathbb{R}^d f:V→Rd,将每个节点 v ∈ V v \in V v∈V映射到一个 d d d维的向量空间。这个映射函数通常通过优化以下目标函数来学习:
min f ∑ ( u , v ) ∈ E L ( f ( u ) , f ( v ) ) \min_{f} \sum_{(u, v) \in E} \mathcal{L}(f(u), f(v)) fmin(u,v)∈E∑L(f(u),f(v))
其中, L \mathcal{L} L是损失函数,用于衡量节点 u u u和 v v v在向量空间中的相似性。常见的损失函数包括:
-
负对数似然损失:
L ( f ( u ) , f ( v ) ) = − log σ ( f ( u ) T f ( v ) ) \mathcal{L}(f(u), f(v)) = -\log \sigma(f(u)^T f(v)) L(f(u),f(v))=−logσ(f(u)Tf(v))
其中, σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+e−x1是sigmoid函数。 -
欧氏距离损失:
L ( f ( u ) , f ( v ) ) = ∥ f ( u ) − f ( v ) ∥ 2 2 \mathcal{L}(f(u), f(v)) = \|f(u) - f(v)\|_2^2 L(f(u),f(v))=∥f(u)−f(v)∥22
目标函数的核心思想是:如果两个节点在图中是相邻的(即存在边),那么它们在向量空间中的表示应该尽可能相似。
3. 常见的Graph Embedding方法
3.1 DeepWalk
DeepWalk是一种基于随机游走的Graph Embedding方法。它通过在图中进行随机游走,生成节点序列,然后使用Skip-gram模型来学习节点的向量表示。Skip-gram原理可以我前几篇Embedding生成文章

DeepWalk
给定一个起始节点 v i v_i vi,随机游走生成一个节点序列 v i 1 , v i 2 , … , v i k v_{i1}, v_{i2}, \dots, v_{ik} vi1,vi2,…,vik,其中每个节点 v i j v_{ij} vij是从当前节点 v i ( j − 1 ) v_{i(j-1)} vi(j−1)的邻居中随机选择的。(如上图所示)
Skip-gram模型
Skip-gram模型的目标是最大化给定中心节点 v i v_i vi时,其上下文节点 v i − w , … , v i + w v_{i-w}, \dots, v_{i+w} vi−w,…,vi+w的条件概率。目标函数为:
min f − log P ( v i − w , … , v i + w ∣ f ( v i ) ) \min_{f} -\log P(v_{i-w}, \dots, v_{i+w} \mid f(v_i)) fmin−logP(vi−w,…,vi+w∣f(vi))
具体地,Skip-gram模型使用softmax函数来计算条件概率:
P ( v j ∣ v i ) = exp ( f ( v j ) T f ( v i ) ) ∑ v k ∈ V exp ( f ( v k ) T f ( v i ) ) P(v_j \mid v_i) = \frac{\exp(f(v_j)^T f(v_i))}{\sum_{v_k \in V} \exp(f(v_k)^T f(v_i))} P(vj∣vi)=∑vk∈Vexp(f(vk)Tf(vi))exp(f(vj)Tf(vi))
由于直接计算softmax的分母计算量较大,通常采用负采样(Negative Sampling)来近似计算。负采样的目标函数为:
min f − log σ ( f ( v j ) T f ( v i ) ) − ∑ k = 1 K E v k ∼ P n ( v ) log σ ( − f ( v k ) T f ( v i ) ) \min_{f} -\log \sigma(f(v_j)^T f(v_i)) - \sum_{k=1}^K \mathbb{E}_{v_k \sim P_n(v)} \log \sigma(-f(v_k)^T f(v_i)) fmin−logσ(f(vj)Tf(vi))−k=1∑KEvk∼Pn(v)logσ(−f(vk)Tf(vi))
其中, K K K是负采样数, P n ( v ) P_n(v) Pn(v)是负采样分布。
3.2 Node2Vec
Node2Vec是对DeepWalk的改进,它引入了广度优先搜索(BFS)和深度优先搜索(DFS)的策略,可以更好地捕捉图的局部和全局结构。

随机游走策略

Node2Vec的随机游走策略由两个参数控制,以使Embedding结果倾向于同质化(距离相近节点Embedding相似)或结构性(结构上相似节点Embedding应相似):
- 返回参数 p p p:控制游走返回到前一个节点的概率。
- 进出参数 q q q:控制游走远离前一个节点的概率。
具体地,Node2Vec的随机游走概率定义为:
P ( v j ∣ v i ) = { 1 p if d i j = 0 1 if d i j = 1 1 q if d i j = 2 P(v_j \mid v_i) = \begin{cases} \frac{1}{p} & \text{if } d_{ij} = 0 \\ 1 & \text{if } d_{ij} = 1 \\ \frac{1}{q} & \text{if } d_{ij} = 2 \end{cases} P(vj∣vi)=⎩ ⎨ ⎧p11q1if dij=0if dij=1if dij=2
其中, d i j d_{ij} dij是节点 v i v_i vi和 v j v_j vj之间的最短路径距离。
结构性和同质性
在node2vec算法中,通过精心调整p和q参数,可以巧妙地引导节点嵌入(Embedding)的方向,使其呈现出不同的特性。具体而言:
-
若我们对网络节点的局部特征更为关注,倾向于让相近的节点在嵌入空间中具有相似的表示,那么可通过调整参数使节点Embedding更倾向于同质性,例如上图所示的网络节点Embedding情况;
-
反之,若我们更重视网络的全局结构特征,希望结构相近的节点在嵌入空间中能够彼此靠近,即使它们在实际网络中可能相隔较远,那么就可以像下图那样,使节点Embedding更倾向于结构性。这种灵活的参数调节机制,使得node2vec算法能够根据不同的任务需求和数据特点,生成更符合需求的节点嵌入表示,为后续的图分析和机器学习任务提供了强大的特征支持。

目标函数
Node2Vec的目标函数与DeepWalk类似,但随机游走的策略更加灵活,能够更好地捕捉图的结构信息。目标函数为:
min f − log P ( v i − w , … , v i + w ∣ f ( v i ) ) \min_{f} -\log P(v_{i-w}, \dots, v_{i+w} \mid f(v_i)) fmin−logP(vi−w,…,vi+w∣f(vi))
Graph Embedding在推荐系统中的应用
1. 用户-物品图
在推荐系统中,用户与物品之间的交互行为(如点击、购买、评分等)可以自然地建模为一个用户-物品二分图(User-Item Bipartite Graph)。该图 G = ( V , E ) G = (V, E) G=(V,E) 中,节点集合 V V V 分为两部分:用户节点 U U U 和物品节点 I I I,边集合 E E E 表示用户与物品之间的交互。例如,边 ( u , i ) (u, i) (u,i) 表示用户 u u u 与物品 i i i 的交互行为,边的权重可以表示交互的强度(如点击次数或评分值)。
通过Graph Embedding技术,用户和物品可以被映射到同一个低维向量空间 R d \mathbb{R}^d Rd,从而将复杂的图结构转化为稠密的向量表示。这种表示不仅保留了用户与物品之间的显式交互关系,还能够捕捉隐式的高阶关系(如用户之间的相似性或物品之间的关联性)。
2. 推荐算法
基于Graph Embedding的推荐算法通常包括以下步骤:
-
构建用户-物品图
根据用户与物品的交互数据构建二分图,明确节点和边的定义及其权重。 -
学习用户和物品的向量表示
使用Graph Embedding方法(如DeepWalk、Node2Vec等)将用户和物品映射到低维向量空间,得到向量表示 f ( u ) f(u) f(u) 和 f ( i ) f(i) f(i)。 -
计算相似性并生成推荐列表
对于目标用户 u u u,计算其向量 f ( u ) f(u) f(u) 与所有物品向量 f ( i ) f(i) f(i) 的相似性(如余弦相似度或点积),并根据相似性得分对物品排序,生成个性化推荐列表。
3. 优势
基于Graph Embedding的推荐系统具有以下显著优势:
-
捕捉复杂关系
Graph Embedding能够捕捉用户与物品之间的高阶相似性和隐式反馈。例如,通过随机游走或邻居聚合,可以发现用户之间或物品之间的潜在关联,从而提升推荐的准确性。 -
可扩展性
基于Graph Embedding的方法通常具有较高的可扩展性,能够处理大规模的用户-物品交互数据。例如,GraphSAGE通过邻居采样和聚合机制,降低了计算复杂度,适用于大规模图数据。 -
灵活性
Graph Embedding方法可以与其他推荐技术(如矩阵分解、深度学习等)结合,进一步提升推荐性能。例如,可以将Graph Embedding生成的向量作为输入特征,用于深度学习模型的训练。 -
冷启动问题的缓解
通过捕捉用户与物品之间的高阶关系,Graph Embedding能够为冷启动用户或物品提供更合理的推荐,缓解冷启动问题。
Reference
- 王喆《深度学习推荐系统》
- Perozzi, B., Al-Rfou, R., & Skiena, S. (2014). DeepWalk: Online Learning of Social Representations. Stony Brook University Department of Computer Science.
- Grover, A., & Leskovec, J. (2016). node2vec: Scalable Feature Learning for Networks. Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining.
相关文章:
Embedding技术:DeepWalkNode2vec
引言 在推荐系统中,Graph Embedding技术已经成为一种强大的工具,用于捕捉用户和物品之间的复杂关系。本文将介绍Graph Embedding的基本概念、原理及其在推荐系统中的应用。 什么是Graph Embedding? Graph Embedding是一种将图中的节点映射…...
基于IMM算法的目标跟踪,四模型IMM|三维环境|4个模型分别是:CV、左转CT、右转CT、CA(基于EKF,订阅专栏后可获得完整源代码)
这段MATLAB代码实现了基于交互多模型(IMM)算法的目标跟踪,结合了四种运动模型(匀速直线、左转圆周、右转圆周和匀加速直线)。通过定义状态方程、生成带噪声的测量数据,以及执行IMM迭代,该代码有效地实现了多模型的状态估计和融合。最终,用户可以通过可视化结果观察目标…...
大模型工程师日记(十三):检索增强生成(RAG)
Document loaders和Text splitters Document loaders(文档加载器) Document loaders(文档加载器) 这些类加载文档对象。LangChain与各种数据源有数百个集成,可以从中加载数据:Slack、Notion、Google Drive等。 每个文档加载器都有自己特定的参数&#…...
HOW - React 如何在在浏览器绘制之前同步执行 - useLayoutEffect
目录 useEffect vs useLayoutEffectuseEffectuseLayoutEffect主要区别总结选择建议注意事项 useLayoutEffect 使用示例测量 DOM 元素的尺寸和位置示例:自适应弹出框定位 同步更新样式以避免闪烁示例:根据内容动态调整容器高度 图像或 Canvas 绘制前的准备…...
前端开发10大框架深度解析
摘要 在现代前端开发中,框架的选择对项目的成功至关重要。本文旨在为开发者提供一份全面的前端框架指南,涵盖 React、Vue.js、Angular、Svelte、Ember.js、Preact、Backbone.js、Next.js、Nuxt.js 和 Gatsby。我们将从 简介、优缺点、适用场景 以及 实际…...
图像形成与计算机视觉基础
1. 图像形成的基本原理 图像形成是物理世界与传感器(如胶片、CCD/CMOS)交互的过程,核心是光线的传播与记录。 1.1 直接放置胶片模型 物理原理:物体表面反射的光线直接照射到胶片上,但无任何遮挡或聚焦机制。 问题&a…...
【显示】3.1 Android 从Activity到Display链路概括
目录 一,Activity上屏Flow总结 二,链路拆解 2.1 Activity 的创建和 UI 初始化 2.2 Window 和 DecorView 的创建 2.3 Surface 的创建 2.4 View 的绘制流程 2.5 Surface 的提交和合成 2.6 上屏显示 三,多个Activity的处理方式 一,Activity上屏Flow总结 Activity → s…...
【leetcode hot 100 240】搜索二维矩阵Ⅱ
解法一:直接查找 class Solution {public boolean searchMatrix(int[][] matrix, int target) {for(int i0; i<matrix.length; i){for(int j0; j<matrix[0].length; j){if(matrix[i][j]>target){break;}if(matrix[i][j]target){return true;}}}return fal…...
Spring Boot 缓存最佳实践:从基础到生产的完整指南
Spring Boot 缓存最佳实践:从基础到生产的完整指南 引言 在现代分布式系统中,缓存是提升系统性能的银弹。Spring Boot 通过 spring-boot-starter-cache 模块提供了开箱即用的缓存抽象,但如何根据业务需求实现灵活、可靠的缓存方案…...
Ubuntu20.04双系统安装及软件安装(一):系统安装
Ubuntu20.04双系统安装及软件安装(一):系统安装 Ubuntu系统卸载Ubuntu20.04安装BIOS进入系统安装 许久没写博客了,今天开始重新回归了。首先记录我在双系统上重装Ubuntu20.04的安装过程记录以及个人见解。 Ubuntu系统卸载 参考双…...
Linux14-io多路复用
UDP:单循环服务器,服务器同一时刻只能响应一个客户端的请求 TCP:并发服务器,服务器同一时刻只能响应多个客户端的请求 一、构建TCP并发服务器 让TCP服务端具备同时响应多个客户端的能力。 1.多进程 资源消耗大,同资源平台下,并发量小。 2.多线程 创建线程、进程,比…...
【人工智能学习之优化为什么会失败】
【人工智能学习之优化为什么会失败与方案建议】 一、优化为什么会失败?1. 局部极小值和鞍点2. 梯度消失/爆炸(Vanishing/Exploding Gradients)2. 病态条件(Ill-Conditioning)3. 参数初始化不当4. 学习率不当5. 过拟合&…...
flask学习2-应用(博客)
flask学习2-应用(博客) 项目目录应用程序工厂连接到数据库建表初始化数据库文件蓝图和视图第一个视图:注册注册登录根据用户id查询用户注销模板基本布局注册登录注册用户静态文件博客蓝图索引创建更新-根据id查询更新-根据id更新删除使项目可安装描述项目安装项目测试覆盖率…...
Next.js项目实战-ai助手帮我写文章发布视频第1节(共89节)
😂Ai在国内外已经杀疯了,老板要求我们把速度再提升快一些,哪怕是几秒,几百毫秒也行~现在,马上就要,就地就要,只好搬出前端服务端(大保健)😓。没错,今天我要分…...
探秘Transformer系列之(9)--- 位置编码分类
探秘Transformer系列之(9)— 位置编码分类 文章目录 探秘Transformer系列之(9)--- 位置编码分类0x00 概述0x01 区别1.1 从直观角度来看1.2 从模型处理角度来看1.3 优劣 0x02 绝对位置编码2.1 基础方案2.2 训练式2.3 三角函数式2.4…...
文件操作(详细讲解)(2/2)
你好呀这里是我说风俗,各位客官走过路过,关关注,点点赞,收收藏,您的鼓励是对我最大的认可,我也会努力更行下去的!!!大一学生不易(》《) 5. 文件的…...
笔记四:C语言中的文件和文件操作
Faye:只要有正确的伴奏,什么都能变成好旋律。 ---------《寻找天堂》 目录 一、文件介绍 1.1程序文件 1.2 数据文件 1.3 文件名 二、文件的打开和关闭 2.1 文件指针 2.2.文件的打开和关闭 2.3 文件读取结束的判定 三、 文件的顺序读写 3.1 顺序读写…...
Zabbix+Deepseek实现AI告警分析(非本地部署大模型版)
目录 前言技术架构DeepSeek API获取1. 注册账号2. 申请API-Key Zabbix告警AI分析 实现1. 创建Scripts2. Scripts关键参数说明3. 需要注意 测试参考链接 前言 最近手伤了,更新频率下降…… 近期在Zabbix社区看到了一篇文章:张世宏老师分享的《Zabbix告警分…...
基于Celery+Supervisord的异步任务管理方案
一、架构设计背景 1.1 需求场景分析 在Web应用中,当遇到以下场景时需要异步任务处理方案: 高延迟操作(大文件解析/邮件发送/复杂计算)请求响应解耦(客户端快速响应)任务队列管理(任务优先级/…...
国产NAS系统飞牛云fnOS深度体验:从运维面板到博客生态全打通
文章目录 前言1. 飞牛云本地部署1Panel2. 1Panel功能介绍3. 公网访问1Panel控制面板4. 固定1Panel公网地址5. 1Panel搭建Halo博客6. 公网访问Halo个人博客 前言 嘿,小伙伴们!是不是厌倦了服务器管理的繁琐和搭建个人网站的复杂?今天就来一场…...
使用QT + 文件IO + 鼠标拖拽事件 + 线程 ,实现大文件的传输
第一题、使用qss,通过线程,使进度条自己动起来 mythread.h #ifndef MYTHREAD_H #define MYTHREAD_H#include <QObject> #include <QThread> #include <QDebug>class mythread : public QThread {Q_OBJECT public:mythread(QObject* …...
【LeetCode 热题 100】438. 找到字符串中所有字母异位词 | python 【中等】
继续学!嗨起来!!!(正确率已经下30%了,我在干什么) 题目: 438. 找到字符串中所有字母异位词 给定两个字符串 s 和 p,找到 s 中所有 p 的子串,返回这些子串的…...
博查搜索API日调用量突破3000万次,达到Bing API的1/3。
根据第三方机构统计,2024年Bing Search API 全球日均调用量为1.1亿次。截至2025年3月,博查 Search API日均调用量已达到3000万次(约为Bing的1/3),承接着国内AI应用60%的联网搜索请求。...
【蓝桥杯集训·每日一题2025】 AcWing 5539. 牛奶交换 python
AcWing 5539. 牛奶交换 Week 3 3月6日 题目描述 农夫约翰的 N N N 头奶牛排成一圈,使得对于 1 , 2 , … , N − 1 1,2,…,N−1 1,2,…,N−1 中的每个 i i i,奶牛 i i i 右边的奶牛是奶牛 i 1 i1 i1,而奶牛 N N N 右边的奶牛是奶牛 …...
[内网安全] Windows 本地认证 — NTLM 哈希和 LM 哈希
关注这个专栏的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01:SAM 文件 & Windows 本地认证流程 0x0101:SAM 文件简介 Windows 本地账户的登录密码是存储在系统本地的 SAM 文件中的,在登录 Windows 的时候&am…...
输电线路杆塔倾斜智能监测:守护电网安全的智慧之眼
2023年夏,某超高压输电线路突发倒塔事故,导致三省市大面积停电,直接经济损失超2.3亿元。事后调查显示,杆塔倾斜角度早已超出安全阈值,但传统巡检未能及时发现。这个刺痛行业的案例,揭开了电力设施监…...
FastGPT 引申:奥运选手知识图谱构建与混合检索应用
目录 FastGPT 引申:奥运选手知识图谱构建与混合检索应用第一部分:数据构建流程1. 数据抽取与预处理2. 向量化处理3. 知识图谱构建4. 数据持久化 第二部分:混合检索应用1. 用户查询处理2. 混合检索技术细节3. 返回结果示例4. 性能指标 FastGPT…...
GitHub CI流水线
GitHub CI流水线 build.yml 路径:.github/workflows/build.yml name: Docker Image CIon:workflow_dispatch:jobs:build:runs-on: ubuntu-lateststeps:- uses: actions/checkoutv4- name: Set up JDK 8uses: actions/setup-javav4with:java-version: 8distributi…...
探索.NET 10 的新特性,开发效率再升级!
前言 最近,.NET 10 发布啦,作为长期支持(LTS)版本,接下来的 3 年里它会给开发者们稳稳的幸福。今天咱就来唠唠它都带来了哪些超实用的新特性。可在指定链接下载。 新特性 下面将介绍了.NET 10的新特性,其…...
算法·搜索
搜索问题 搜索问题本质也是暴力枚举,一般想到暴力也要想到利用回溯枚举。 排序和组合问题 回溯法 去重问题:定义全局变量visited还是局部变量visited实现去重? 回溯问题 图论中的搜索问题 与一般的搜索问题一致,只不过要多…...
