Graph Embedding基础 图表示学习 什么是Graph Embedding
本文包括 DeepWalk LINE SDNE Node2vec Struc2vec等几个重要的Graph Embedding 方法
先说下不同embedding的区别是什么:
- DeepWalk:采用随机游走,形成序列,采用skip-gram方式生成节点embedding。
- node2vec:不同的随机游走策略,形成序列,类似skip-gram方式生成节点embedding。
- LINE:捕获节点的一阶和二阶相似度,分别求解,再将一阶二阶拼接在一起,作为节点的embedding
- struc2vec:对图的结构信息进行捕获,在其结构重要性大于邻居重要性时,有较好的效果。
- SDNE:采用了多个非线性层的方式捕获一阶二阶的相似性。
基本知识
为了更好的理解不同图编码机制,首先要了解一些基础知识。
图的基础知识/什么是Graph Embedding
图:Graph=(V,E)
v:顶点(数据元素)的有穷非空集合;
E:边的有穷集合。

在上图中v1-v5都可以编码成一个d维的embedding向量。只要给定d维度,而由神经网络自动图中节点的embedding这一过程,就叫做Graph Embedding
随机游走
基本思想
从一个或一系列顶点开始遍历一张图。在任意一个顶点,遍历者将以概率1-a游走到这个顶点的邻居顶点,以概率a随机跳跃到图中的任何一个顶点,称a为跳转发生概率,每次游走后得出一个概率分布,该概率分布刻画了图中每一个顶点被访问到的概率。用这个概率分布作为下一次游走的输入并反复迭代这一过程。当满足一定前提条件时,这个概率分布会趋于收敛。收敛后,即可以得到一个平稳的概率分布。
最经典的一维随机游走问题有赌徒输光问题和酒鬼失足问题。
(1)赌徒在赌场赌博,赢的概率是p,输的概率1-p,每次的赌注为1元,假设赌徒最开始时有赌金1元,赢了赌金加1元,输了赌金减1元。问赌徒输光的概率是多少?
(2)一个醉鬼行走在一头是悬崖的道路上,酒鬼从距离悬崖仅一步之遥的位置出发,向前一步或向后退一步的概率皆为1/2,问酒鬼失足掉入悬崖的概率是多少?
图的随机游走

上图中的random walk 就是形成了一条随机游走链(N1,N2,N3,N4),其中N1的又有本身的编码,N1=(a1, a2, a3),即一个3维的embedding.

在上图中发Φ表示embedding, |V|xd即v个节点乘以d维编码,例如,上文提到的N1节点 N1=(a1, a2, a3)就是3维编码。
SkipGram
SkipGram就是给定一个中心词,去预测它的上下文
假设在我们的文本序列中有5个词,[“the”,“man”,“loves”,“his”,“son”]。
假设我们的窗口大小skip-window=2,中心词为“loves”,那么上下文的词即为:“the”、“man”、“his”、“son”。这里的上下文词又被称作“背景词”,对应的窗口称作“背景窗口”。
跳字模型能帮我们做的就是,通过中心词(target word)“loves”,生成与它距离不超过2的背景词(context)“the”、“man”、“his”、“son”的条件概率,用公式表示即:

进一步,假设给定中心词的情况下,背景词之间是相互独立的,公式可以进一步得到

用概率图表示为:

可以看得出来,这里是一个一对多的情景,根据一个词来推测2m个词,(m表示背景窗口的大小),上图窗口大小为2.

DeepWalk
DeepWalk 是network embedding的开山之作,它将NLP中词向量的思想借鉴过来做网络的节点表示,提供了一种新的思路.了解了随机游走后DeepWalk算法就变得简单了,DeepWalk最主要的贡献就是他将Network Embedding与自然语言处理中重要的Word Embedding方法Word2Vec联系了起来,使得Network Embedding问题转化为了一个Word Embedding问题。
转化方法其实很简单,就是随机游走。如下图所示,DeepWalk通过从每个结点出发n_walks次,每一步都采取均匀采样的方式选择当前结点的邻接结点作为下一步的结点随机游走。当游走的路径长度达到walk_length后,停止一次游走。这样就生成了一个个游走的序列,每个序列都称为一个walk。每个walk都被当成Word2Vec中的一个句子,而每个结点都是Word2Vec中的一个词。 下图中每一个圆都代表一个d维向量。

LINE
LINE不再采用随机游走的方法。相反,他在图上定义了两种相似度——一阶相似度与二阶相似度。
一阶相似度:一阶相似度就是要保证低维的嵌入中要保留两个结点之间的直接联系的紧密程度,换句话说就是保留结点之间的边权,若两个结点之间不存在边,那么他们之间的一阶相似度为0。例如下图中的6、7两个结点就拥有很高的一阶相似度。
二阶相似度:二阶相似度用一句俗话来概括就是“我朋友的朋友也可能是我的朋友”。他所比较的是两个结点邻居的相似程度。若两个结点拥有相同的邻居,他们也更加的相似。如果将邻居看作context,那么两个二阶相似度高的结点之间拥有相似的context。这一点与DeepWalk的目标一致。例如下图中的5、6两点拥有很高的二阶相似度。

总而言之,一阶:局部的结构信息;二阶:节点的邻居。共享邻居的节点可能是相似的。
下面给出求一阶相似性的方法:

下面是求二阶相似性的方法:

一阶二阶embedding训练完成之后,如果将first-order和second-order组合成一个embedding,即直接拼接的方法。
Node2vec
Node2Vec是一份基于DeepWalk的延伸工作,它改进了DeepWalk随机游走的策略。
Node2Vec认为,现有的方法无法很好的保留网络的结构信息,例如下图所示,有一些点之间的连接非常紧密(比如u, s1, s2, s3, s4),他们之间就组成了一个社区(community)。网络中可能存在着各种各样的社区,而有的结点在社区中可能又扮演着相似的角色(比如u与s6)。

那么如何达到这样的两种随机游走策略呢,这里需要用到两个超参数p和q用来控制深度优先策略和广度优先策略的比重,如下图所示:
其中d(t, x)代表t结点到下一步结点x的最短路,最多为2。
当d(t, x)=0时,表示下一步游走是回到上一步的结点;
当d(t, x)=1时,表示下一步游走跳向t的另外一个邻居结点;
当d(t, x)=2时,表示下一步游走向更远的结点移动。

而Node2Vec同时还考虑了边权w的影响,所以最终的偏置系数以及游走策略为:

其具体算法如下所示:


DFS,即q值⼩,探索强。会捕获homophily同质性节点,即相邻节点表示类似
BFS,即p值⼩,保守周围。会捕获结构性,即某些节点的图上结构类类似
Struc2vec
之前的node embedding的方式,都是基于近邻关系,但是有些节点没有近邻,但也有相似的结构性。deepwalk和node2vec 可以成功应用于分类任务,但在结构相关任务中往往失败, 主要原因在于:大多数真实网络中的许多节点特征表现出很强的同质性, 具有给定特征的节点的邻域更有可能具有相同的特征,而我们提出的struc2vec的关键思想是:
1、 评估独立于节点和edge的节点之间的结构相似性,以及它们在网络中的位置。(即struc2vec不依赖于节点互相接近);
2、 建立一个层次结构来衡量结构相似性,允许对结构相似性的含义有越来越严格的定义, 特别是在这个层次结构的底部,节点之间的结构相似性仅取决于它们的度, 而在层次结构的顶部,相似性取决于整个网络,
3、 为节点生成随机上下文,这些节点是通过遍历多层图(而不是原始网络)的加权随机游走得到,因此,经常出现在相似上下文中的两个节点可能具有相似的结构。 这种上下文可以通过语言模型来学习节点的潜在表示;(这里的意思应该对原图做了另一种层次的表示,然后在新的层次图结构上做加权随机游走)



DTW动态时间规划
具体而言是一种计算距离的公式:

举个例子:
a=(1,2,3), b=(2,1,2)
那么:
d(a,b) = max((1,2,3), (2,1,2)) / min((1,2,3), (2,1,2)) = 3 / 1 = 3

1、根据不同距离的邻居信息分别算出每个节点对的结构相似度,这涉及到了不同层次的结构相似度的计算,到这里就可以较好的理解层次化结构具体是什么意思了;
2、构造一个加权多层图,其中网络中的所有节点都存在于每一层中(完全同一张图),并且每一层都对应于测量结构相似性时的层次结构存在级别上的差异。 此外,每一层中每个节点对之间的edge权重与其结构相似度成反比;
3、 使用多层图为每个节点生成上下文。 特别是,多层图上的有偏随机游走(edge带权,不是完全随机游走的)用于生成节点序列,这个 序列中很可能包括在结构上更相似的节点。
4、使用word2vec的方法对采样出的随机游走序列学习出每个节点的节点表示。


SDNE (Structural Deep Network Embedding)
SDNE中的相似度定义和LINE是一样的。简单来说,1阶相似度衡量的是相邻的两个顶点对之间相似性。2阶相似度衡量的是,两个顶点他们的邻居集合的相似程度。
之前的Deepwalk,LINE,node2vec,struc2vec都使用了浅层的结构,浅层模型往往不能捕获高度非线性的网络结构。即产生了SDNE方法,使用多个非线性层来捕获node的embedding

一阶公式:

二阶公式:


将一阶相似性与二阶相似性合并:

参考文献:
【1】 https://zhuanlan.zhihu.com/p/64991884
【2】https://blog.csdn.net/qq_43186282/article/details/114585885
【3】https://zhuanlan.zhihu.com/p/162177874
相关文章:
Graph Embedding基础 图表示学习 什么是Graph Embedding
本文包括 DeepWalk LINE SDNE Node2vec Struc2vec等几个重要的Graph Embedding 方法 先说下不同embedding的区别是什么: DeepWalk:采用随机游走,形成序列,采用skip-gram方式生成节点embedding。node2vec:不同的随机游…...
某直聘tp_token解析
尊重版权,请勿盗版,不放代码。截至2023-02-23更新---------------------------------------检测windows属性总数大于150 改成大于15 > 150检测了document属性大于50检测了navigate属性检测了navigate.plugins 属性值检测moudle nodejs是否存在&#x…...
替代启攀微8按键触控八通道触摸芯片-GTC08L
能完美替代启攀微8按键触控八通道电触摸芯片-GTC08L芯片是一款非常适用于音响上超稳定超抗干扰低功耗八通道电容式触摸IC;可通过触摸实现各种逻辑功能控制;操作简单、方便实用;电压范围宽,可在2.7V~5.5V(单…...
Zabbix“专家坐诊”第182期问答汇总
问题一: Q:像烽火、浪潮这种没有ilo的设备怎么监控他们的硬件状态呢? A:如果没有ilo,可以使用其他硬件监控软件,例如HP Insight Manager、IBM Director、Dell OpenManage等。这些软件可以帮助您监控硬件状…...
PHP、Nginx、openssl ECC证书搭建
在一台Ubuntu中#!/bin/bash# 安装 Nginxsudo apt-get updatesudo apt-get install nginxsudo apt-get install libssl-devsudo apt-get install -y nginx# 配置 Nginxsudo ufw allow Nginx HTTPsudo systemctl start nginxsudo systemctl enable nginx# 安装 PHPsudo apt-get i…...
秒杀服务------技术点及亮点
大技术使用Redisson使用Redisson在秒杀服务中有两个作用,一个是作为分布式锁来确保多个秒杀服务同时在线时同时上架秒杀商品,只允许有一个秒杀服务成功上架秒杀商品,其他的上架失败。第二个作用是作为分布式信号量,每个秒杀商品在…...
【Python数据挖掘入门】一、数据挖掘概况
一、数据挖掘概况 数据挖掘是指从大量的数据中,通过统计学、人工智能、机器学习等方法,挖掘出未知的、具有价值的信息和知识的过程。 典型案例: 啤酒与尿布杜蕾斯与口香糖杜蕾斯与红酒 数据挖掘是一门交叉学科,覆盖了统计学、数…...
【python】anaconda 管理 python 环境
anaconda 管理虚拟环境anaconda 简介python 虚拟环境的安装查看当前 anaconda中所有的虚拟环境创建新的虚拟环境激活所创建的虚拟环境删除指定的虚拟环境退出当前虚拟环境查看当前虚拟环境中所有安装的库安装常用包pycharmpycharm 下环境配置pycharm 使用anaconda 简介 anacon…...
线上插画培训班有用吗,教你选靠谱的插画课程
线上插画培训班有用吗,教你选靠谱的插画课程,推荐5个靠谱的动漫插画培训课程,各有特色和优势,相信可以给大家一些参考! 一:5个靠谱的动漫插画网课 1、轻微课(五颗星) 主打课程有日…...
吃鸡用什么蓝牙耳机效果好?手游吃鸡公认最好的几款蓝牙耳机
蓝牙耳机的作用很多,几乎每个人都需要一副很棒的耳机在通勤或锻炼途中使用,并且玩游戏也少不了它,手游近几年十分的流行,下面整理了几款性能不错的蓝牙耳机。 第一款:南卡小音舱蓝牙耳机 蓝牙版本:5.3 发…...
四个步骤在CRM系统中设置游戏化机制
长期高强度的单一工作会让销售人员逐渐失去对工作的兴趣,导致销售状态缺少动力和激情,工作开展愈加困难。不少企业通过CRM销售管理系统设置游戏化竞赛,调动销售人员的工作积极性。那么,如何在CRM系统中设置游戏化机制?…...
2023年TikTok营销如何破局?品牌应做好这6点
转眼到了2023年,虽然过去的一年,国际市场风云变幻,但对TikTok来说,却是丰收的一年。2022年, TikTok的全球收入为35亿美元,同比增长60%。TikTok以6.72亿次下载量依旧位居榜首,短视频进一步风靡全…...
2023年CDGA考试-第5章-数据建模和设计(含答案)
2023年CDGA考试-第5章-数据建模和设计(含答案) 单选题 1.请从下列选项中选择关于企业数据模型描述准确的选项 A.企业模型包括继承关系模型、概念模型、主题域模型、逻辑模型 B.企业模型包括数据名称、数据属性和元数据定义、概念和逻辑实体关系以及业务规则 C.企业模型包括…...
蓝桥杯入门即劝退(二十)快乐数(我不快乐了)
欢迎关注点赞评论,共同学习,共同进步! ------持续更新蓝桥杯入门系列算法实例-------- 如果你也喜欢Java和算法,欢迎订阅专栏共同学习交流! 你的点赞、关注、评论、是我创作的动力! -------希望我的文章…...
Aspose.Imaging for .NET V23
Aspose.Imaging for .NET V23 Aspose.Imaging for.NET是帮助开发人员在自己的应用程序中创建、编辑、绘制或转换图像的类库。它包括在不安装Photoshop或任何其他图像编辑器的情况下以Adobe Photoshop原生格式保存的功能。Aspose.Imaging for.NET是一个灵活稳定的API,…...
通信算法复习题纲
通信算法复习题1、当信源发送信号满足以下哪一项条件时,接收端采用最小距离准则进行判决等价于采用最大后验概率准则进行判决?2、OFDM系统的正交性体现在哪个方面?3、模拟信号数字化过程中,哪一步会引入量化噪声?4、OF…...
交叉编译 MQTT/Mosquitto
交叉编译 MQTT/Mosquitto 概述 Eclipse Mosquitto 是一个开源(EPL/EDL许可)消息代理,它实现了 MQTT 协议版本 5.0、3.1.1 和 3.1。Mosquitto 重量轻,适用于从低功耗单板计算机到全服务器的所有设备。 MQTT 协议提供了一种使用发…...
无重复字符的最长子串的解法
class Solution {public int lengthOfLongestSubstring(String s) {// 哈希集合,记录每个字符是否出现过Set<Character> occ new HashSet<Character>();int n s.length();// 右指针,初始值为 -1,相当于我们在字符串的左边界的左…...
Apache Hadoop生态部署-zookeeper单机安装
目录 查看服务架构图-服务分布、版本信息 一:安装前准备 1:zookeeper安装包选择--官网下载 2:zookeeper3.5.7安装包--百度网盘 二:安装与常用配置 2.1:下载解压zk安装包 2.2:配置修改 2.3࿱…...
java面试题-IO流
基础IO1.如何从数据传输方式理解IO流?IO流根据处理数据的类型可以分为字节流和字符流。字节流字节流以字节(8位)为单位读写数据。字节流主要用于读写二进制文件,如图片、音频、视频等。Java中的InputStream和OutputStream就是字节…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
