假设你刚刚当上一个大型社区的物业主任,手下有上千名居民和一张巨大的“谁认识谁”关系网。你想让AI帮你认识每个人——谁和谁经常混在一起?谁在社区里人缘最好?哪些人可能是骗子?但电脑不认人脸,只认数字。于是你想到一个主意:给每位居民制作一张“数字名片”,上面不是姓名和照片,而是一串数字,这些数字能精确概括他在社交网络中的角色。图嵌入(Graph Embedding),就是自动制作这种名片的技术。本文用“社区漫步”这个比喻贯穿全程,带你理解两大主流算法:Node2Vec靠“随机游走”挨家挨户收集情报,GraphSAGE靠“当场询问邻居”快速绘制肖像。
图嵌入是图机器学习的基石。掌握Node2Vec和GraphSAGE,你就拥有了把任意图结构“翻译”给机器学习模型的能力——这是知识图谱、社交推荐、生物网络分析等AI应用的基本功,也是走向图神经网络的第一块跳板。
可视化演示
展示Node2Vec有偏随机游走策略、GraphSAGE邻居采样聚合机制,以及两种算法在归纳能力上的核心差异。
本节配有交互动效(进入视口后自动加载,约 3KB)。
Node2Vec随机游走 BFS模式:偏向近邻,捕捉结构等价性 DFS模式:偏向远游,捕捉同质性 p,q参数控制游走策略 有偏随机游走生成节点序列后用SkipGram训练嵌入
图嵌入概述
你刚接手一个小区,面对几千位居民和一张复杂的“谁认识谁”关系网。为了快速和每个人打交道,你设计了一份“数字名片”——上面不是照片和年龄,而是几十个维度的小数:这个人社交活跃度如何?他跟什么样的人走得近?他的朋友网络覆盖多大?图嵌入要做的,就是根据这张巨大的关系网,自动给每位居民算出这样的名片。
在图论里,这张关系网叫“图”,每位居民叫“节点”,认识关系叫“边”。传统上,计算机用邻接矩阵存储图,就是一张n乘n的大表格,n是节点数,表格里标记每两个节点是否相连。但真实网络的邻接矩阵极其稀疏:一个千万级节点的社交网络,绝大多数格子都是0。直接把这个巨型矩阵喂给机器学习模型,既浪费算力,又难以捕捉深层结构。
图嵌入(Graph Embedding)的任务,是学到一个映射函数f,把每个节点u映射成一个低维向量f(u),向量的维度d通常取64到512,远小于节点数量n。这个向量要尽可能保留原图的结构信息:在图上位置相近、关系密切的节点,它们的向量在空间中也应该彼此靠近。
就这样,图嵌入把一张海量链接的关系网,浓缩成一份份便携的数字名片。下一节要回答的问题是:什么样的名片算“好”?邻居相似的人,名片也该相似。
- 节点集合V图里所有节点构成的总集合,是名片生成器的输入范围。
- 映射函数f负责把节点变成向量的函数,对应社区里的名片生成器,输入节点ID,输出向量。
- d维空间所有可能的d维向量构成的空间,d是名片上特征维度的个数,维度越多承载信息越丰富。
嵌入基础概念
做名片之前,你得先想明白:什么样的两位居民应该被写成“相似”?是“住在同一条巷子”算相似,还是“有相同数量的朋友”算相似?这个标准没有绝对答案,完全取决于你后续想干什么。如果目的是推荐好友,那么“朋友圈高度重叠”的人就该相似;如果目的是找“意见领袖”,那么“连接了很多小圈子”的结构特征才重要。
在图上,这个问题的术语叫“节点相似度定义”。最直观的相似度是看邻居集合的重叠程度:如果甲的熟人几乎也是乙的熟人,那他们俩的社交角色一定非常接近。这种思路用一个经典指标来衡量,叫Jaccard系数。它计算两个集合的交集大小除以并集大小,得到的数值落在0到1之间,越接近1意味着朋友圈重合度越高。
理解了“相似度”这面镜子,就可以去看两种主流算法的解题思路了:Node2Vec靠“走街串巷”把相似的人串在一起,GraphSAGE靠“就地取材”问邻居来定义自己。先来看看最基础的随机游走是怎么回事。
- 邻居集合N(u)与节点u直接相连的所有节点,对应居民的熟人圈。
- 交集大小u和v共同认识的人数。分子越大,两个人越“臭味相投”。
- 并集大小u认识的人加上v认识的人,去掉重复后的人数,用来做归一化的分母。
- 相似度比值共同朋友占两人全部熟人盘子的比例,范围在0到1之间。
随机游走原理
为了给全社区几千人做名片,你派出一批访客分头出发。访客没有固定路线:每到一户人家,就从这家的门槛出发,随机选择敲响一位邻居的门;到了邻居家,再从他家出发,随机敲下一位……就这样走出一条长长的“串门日记”。这条日记上记录的居民顺序,就是最朴素的随机游走序列。
在图上,这条“串门日记”叫随机游走(Random Walk)。每次游走从某个节点出发,每一步均匀随机地走到当前节点的一个邻居,走T步就得到一个长度为T加1的节点序列,比如0到1到5再到6。这个序列的妙处在于:序列里相邻出现的节点,在图上是“几步可达”的,它们构成了一个天然的上下文,就像一句话里的相邻单词。
游走序列生成后,训练目标变得非常像NLP中的Word2Vec:把每个节点当作“词”,把一条条游走序列当作“句子”,用Skip-gram模型训练,让出现在同一上下文窗口里的节点拥有相似的向量。原本抽象的结构相似性,就这样转化成了统计共现概率,而共现概率可以高效地用随机梯度下降优化。
均匀随机游走像“闭着眼乱串门”,能反映全局的亲疏远近,但还不够聪明。Node2Vec的高明之处,就是在敲门的规则上装了旋钮,让访客能根据任务调整自己的逛街风格。
- 当前位置v_{i-1}游走序列中当前所在的节点,接下来要决定往哪个邻居走。
- 邻居数量当前节点有多少个邻居,邻居越多,选择范围越大。
- 均匀转移概率每个邻居被选中的概率均等,所以概率等于邻居数的倒数。
Node2Vec算法
现在你发现,不同的任务需要不同的名片侧重点。你想找“和小明社会角色相似的人”,访客就该在小明家附近反复转悠,摸清他每天打交道的是谁;你想找“小明这人的深层性情”,访客就得沿着一条巷子深入走下去,看看他的远亲都混什么圈子。Node2Vec给访客装了两个旋钮:返回参数p和进出参数q。
标准随机游走每一步都是均匀的,Node2Vec则把它改成“二阶有偏”的:访客下一步往哪里走,取决于“下一步节点x”与“上一步节点t”之间的拓扑距离。假设访客刚从t走到当前节点v,它要决定下一步走到x。如果x恰好是t本身,说明访客想回头;如果x是t和v的共同邻居,属于正常走动;如果x离t更远,说明访客想探索新地盘。这三个档位的偏好分别由p和q控制。
具体地说,p越小,访客越爱回头,游走风格接近BFS,在局部反复打转,捕捉“角色相似的节点”;q越小,访客越爱往外冲,风格接近DFS,沿一条路走深走远,捕捉“同质化的群体”。收集到一批游走序列后,再套用Skip-gram模型训练,让同一上下文窗口里的节点向量彼此靠近,这就是Node2Vec的完整链路。
有了p和q两个旋钮,访客既能当“社区八卦收集者”,在附近反复串门,也能当“远足探险家”,沿人脉一路深挖。游走序列的质量直接决定名片质量,这正是Node2Vec的核心贡献。但它的短板也随之而来:每来一位新居民,都要重新走一遍全城访查。
- 回到上一步d=0下一步节点正好是刚才来时的节点,访客掉头回去,返回权重由p控制,p越小越爱回头。
- 共同邻居d=1下一步节点与上一步节点直接相连,属于普通走动,权重保持基准值1。
- 更远节点d=2下一步节点离上一步距离更远,权重由q控制,q越小越爱探索远方。
- 概率归一化把非归一化权重除以所有候选邻居的权重之和,变成真正的转移概率,方便采样。
GraphSAGE算法
Node2Vec的做法像“先集中采集情报,再统一洗照片”。可社区里每天都在进新人,你没法每次都跑遍全城。GraphSAGE换了个思路:新人来了不用怕,我只敲开他家里几面邻居墙,把邻居们的特征凑一凑,就能现场画出一张不错的临时名片。这就是“采样加聚合”的思想。
GraphSAGE的全称是Graph Sample and Aggregation,它要解决的是归纳式学习问题:训练时只见过部分节点,推理时遇到完全陌生的节点,也能生成它的嵌入。做法分两步。第一步是邻居采样:对目标节点v,从它的所有邻居中随机抽取固定数量S个节点。第二步是分层聚合:从第1层开始,逐层把邻居的信息汇聚到v身上,更新自己的表示。
第k层更新时,节点v的新表示由两部分拼成:上一层的自身表示,加上上一层邻居表示的聚合结果。两者拼接后经过一个线性变换和一个非线性激活函数。聚合函数AGG有三种常见选择:Mean对邻居向量逐维度取平均,LSTM把采样邻居按随机序当序列处理,Pooling则对邻居向量的每个维度取最大或平均。所有节点共享同一套参数,因此新节点也能被这套规则当场画出来。
GraphSAGE就像“当场速写”的画家:不需要翻阅全城档案,只要扫一眼邻居的脸,就能画出你的大致轮廓。这让它在动态图上大显身手。但速写终究比不过精修,Node2Vec在某些精细任务上依然有优势。
- 第k层表示节点v经过k轮邻居信息交换后的特征向量,k越大,聚合的邻居范围越远。
- 采样邻居集合从v的全部邻居中随机抽取固定数量S个节点,保证每轮计算量恒定。
- Mean聚合函数把邻居向量逐维度取平均,是最直观的聚合方式,相当于听一圈邻居意见再取折中。
- 线性变换与激活聚合结果乘以权重矩阵再加偏置,用ReLU等激活函数引入非线性表达能力。
两相对比
现在你手上有两位名片师:Node2Vec是“全局档案派”,必须翻完全城档案才能出名片;GraphSAGE是“现场速写派”,看一眼邻居就能画像。谁更厉害?要分场合。
学术上把这种差异称为转导式(Transductive)与归纳式(Inductive)学习。Node2Vec是转导式方法:训练时所有节点已经在图上,模型直接为每个节点学一个静态向量,学完就固定;新节点来了没有现成的向量,只能重新训练。GraphSAGE是归纳式方法:它学的是“如何聚合邻居信息”的共享规则,而不是某个具体节点的编号,所以从没见过的新节点也能用同一套规则现算现得。
表达能力上,Node2Vec通过随机游走能把长距离的结构信息编码进序列,因此在同质性和结构等价性的精细刻画上往往更胜一筹。GraphSAGE的表达能力受限于采样邻居的数量和聚合层数,但它天然支持节点特征,推理速度快,适合超大图。训练效率上,GraphSAGE用固定规模采样避免全图计算;Node2Vec需要对大量节点对做负采样训练,全图开销更大。选择哪一种,本质是“精度优先还是泛化优先”的权衡。
两位名片师各有所长,选谁不选谁,得回到具体的社区任务里看需求。下一节给出具体的决策框架。
- 转导式查表Node2Vec为每个训练节点维护一行参数,向量就是查表结果,新节点不在表中自然查不到。
- 归纳式函数GraphSAGE用共享参数网络计算嵌入,输入是邻居特征,任何节点都能传入。
- 关键差异新节点在转导式里没有对应参数行,但在归纳式里可以立刻计算嵌入。
选择策略
回到物业办公室:今天的任务是给100位新注册居民速画名片,还是深入分析老住户里的核心圈层?选错名片师,工作会非常尴尬。Node2Vec和GraphSAGE各有主场,判断标准可以归纳为三个维度。
第一,图是静态还是动态。如果节点不断新增,比如社交平台上每分钟都有新账号,GraphSAGE的归纳能力就是刚需;如果图基本不变,且你要的是最高质量的离线分析,Node2Vec更稳。第二,图的规模。几十万节点的小图,Node2Vec还能应对;几亿节点的大图,GraphSAGE用固定规模采样把每轮开销控制在常数级别,才能跑得动。第三,任务类型。链路预测对嵌入向量的精细程度要求高,Node2Vec往往表现更好;节点分类若有丰富的节点特征,GraphSAGE可以直接把特征融进聚合过程。
工程上的标准套路是:嵌入方法生成向量后,再接一个下游任务头。以节点分类为例,把每个节点的嵌入z_u喂进一个softmax分类器,预测它的类别,用交叉熵损失作为最终优化目标。这个“嵌入加分类器”的管线对两种方法都成立,选型的最终判据是下游任务在验证集上的精度与线上推理延迟。
选人标准摆在桌上:动态性、规模、精度,三个维度综合权衡。没有银弹,只有合适的工具。名片做出来之后,具体能干哪些实事?来看应用实践。
- 嵌入向量z_u由Node2Vec或GraphSAGE生成的节点向量,是整个管线的输入特征。
- Softmax分类器对嵌入做线性变换后转成各类别的概率分布,参数W_c和b_c需要从数据中学习。
- 交叉熵损失衡量预测概率分布与真实标签的差距,取全图平均后作为最终优化的目标函数。
应用实践
名片做出来后,社区工作一下子轻松了。打开电脑,你能用向量做三件大事:给居民分类、给陌生人牵线、找山头。这分别对应图嵌入的三大经典下游任务:节点分类、链路预测、社区发现。
节点分类,是预测某个节点属于哪一类,比如判断一个用户是不是高价值客户、一篇论文属于哪个研究方向。由于嵌入向量已经浓缩了节点的结构信息,只需要在向量上套一层分类器即可。链路预测,是预测两个节点之间是否可能产生一条边,社交平台的“你可能认识的人”就是这个场景。社区发现,是把节点聚成若干簇,找出暗中抱团的圈子,向量之间的距离天然可以作为聚类依据。
链路预测的实践最为直观。对任意两个节点u和v,用它们嵌入向量的点积作为连边得分,得分越高越可能产生边。训练时,从图中采样正样本(真实存在的边)和负样本(不存在的边),优化得分函数的排序损失。Node2Vec生成的嵌入天生适合这个任务:在游走序列中共现过的节点,它们的向量点积本来就被训练得更大。
从名片制作到社区运营,图嵌入的完整流程就此闭环:嵌入是地基,下游任务是高楼。无论选Node2Vec还是GraphSAGE,做出好名片才是硬道理。下面看看这套技术在实际AI业务中是怎么落地的。
- 嵌入转置把节点u的d维向量转置成行向量,便于与v的列向量做矩阵乘法。
- 点积运算对应位置相乘后累加,得到一个实数,衡量两个向量在同一方向上的共鸣程度。
- 得分含义分数越高,两节点在嵌入空间中越接近,在图上的连边倾向也越强。
AI 应用场景
社交平台“你可能认识的人”
阶段:特征表示学习
解决的问题:传统好友推荐靠共同好友计数,数据稀疏且无法捕捉复杂的多跳社交链条。用Node2Vec在用户关系图上随机游走生成嵌入,再用点积做链路预测,能发现“朋友的朋友的朋友”这类潜在关系,同时计算开销可控。
具体案例:某电商社交App有2亿用户、30亿条关系边。算法团队用Node2Vec训练用户64维嵌入向量,召回阶段用近似最近邻检索百万量级候选用户,再精排引入业务规则。上线后好友推荐通过率提升18%,新用户次日留存提升5个百分点。
风控场景中的“黑产团伙发现”
阶段:图数据挖掘
解决的问题:黑产用户会刻意伪装成正常个体,但它们的社交关系高度聚集,单点规则很难识别。用GraphSAGE聚合邻居的行为特征(注册时长、设备指纹、交互频率),让每个用户的表示天然携带“朋友圈”的风险信号。
具体案例:某支付平台每天新增数百万交易节点。反欺诈团队用GraphSAGE对交易图做归纳式嵌入,两层聚合,每层采样25个邻居,输出32维向量接异常检测分类器。新注册的欺诈账号在第一笔交易时就能被“现场速写”识别,风险命中率提升3倍,推理延迟控制在10毫秒内。
学术引用网络的领域发现
阶段:数据分析和聚类
解决的问题:论文引用图中,研究者希望自动发现研究前沿和新兴交叉学科。传统聚类只看关键词共现,忽略了引用网络拓扑中隐含的范式亲缘关系。
具体案例:某科研情报团队用Node2Vec在包含500万篇论文的引用网络上生成128维嵌入,再用KMeans聚类,对照领域专家标注,成功识别出6个新兴交叉学科方向。针对每年新增论文,改用GraphSAGE快速将新论文归入已有领域,准确率比单纯基于文本分类的方法高出9个百分点。
Python 演示
import randomimport numpy as np class SimpleGraph: def __init__(self, edges): self.adj = {} for a, b in edges: self.adj.setdefault(a, []).append(b) self.adj.setdefault(b, []).append(a) def random_walk(self, start, length): walk = [start] node = start for _ in range(length - 1): neighbors = self.adj.get(node, []) if not neighbors: break node = random.choice(neighbors) walk.append(node) return walk class MiniNode2Vec: def __init__(self, graph, dim=2, lr=0.03): self.graph = graph self.dim = dim self.lr = lr self.emb = {n: np.random.randn(dim) * 0.1 for n in graph.adj} def _sigmoid(self, x): return 1.0 / (1.0 + np.exp(-x)) def train(self, walks, epochs=100): for _ in range(epochs): for walk in walks: for i, center in enumerate(walk): context = walk[max(0, i - 2): i] + walk[i + 1: i + 3] for c in context: if c == center: continue score = np.dot(self.emb[center], self.emb[c]) p = self._sigmoid(score) grad = p - 1.0 self.emb[center] -= self.lr * grad * self.emb[c] self.emb[c] -= self.lr * grad * self.emb[center] def main(): edges = [(0, 1), (1, 2), (2, 3), (0, 4), (4, 5), (1, 5), (5, 6), (2, 6), (6, 7), (3, 7)] graph = SimpleGraph(edges) walks = [] for _ in range(200): start = random.choice(list(graph.adj.keys())) walks.append(graph.random_walk(start, 6)) model = MiniNode2Vec(graph) model.train(walks, epochs=100) for node in sorted(model.emb): vec = np.round(model.emb[node], 3) print("node {}: {}".format(node, vec)) if __name__ == "__main__": main()
self.adj.setdefault(a, []).append(b)用邻接表建图,若a还没有邻居列表就先初始化空列表再追加b。node = random.choice(neighbors)随机游走的核心一步,从当前节点邻居中均匀随机挑一个继续走。walk = [start]记录游走序列,序列中相邻的节点构成“上下文”。self.emb = {n: np.random.randn(dim) * 0.1 for n in graph.adj}为每个节点初始化一个小的随机向量作为初始名片。context = walk[max(0, i - 2): i] + walk[i + 1: i + 3]取游走序列中当前节点左右各2个节点作为上下文窗口。score = np.dot(self.emb[center], self.emb[c])点积计算中心节点与上下文节点的相似度分数。p = self._sigmoid(score)把点积分数压缩到0到1之间,作为“共现概率”。grad = p - 1.0对正样本希望p接近1,所以梯度方向是让p增大。self.emb[center] -= self.lr * grad * self.emb[c]随机梯度下降更新中心节点向量,让相似节点靠得更近。
常见误区
误区我刚开始学Node2Vec时,以为它和GCN一样是深度神经网络,层数越多效果越好,结果调参调得一头雾水。
正解Node2Vec的灵魂是“随机游走 + Skip-gram”,它借用的是Word2Vec的浅层嵌入训练思路,并没有多层图卷积结构。所谓“深度”只是潜在维度意义上的浅层嵌入。真正的深度图模型是GraphSAGE这类。如果拿深度网络的思路去调Node2Vec,会处处别扭。
为何常见:名字带"2Vec"容易让人联想到Word2Vec的神经网络,且训练也用随机梯度下降,初学者自然会往深度网络方向联想。
误区GraphSAGE能处理新节点、速度还快,所以它肯定全面比Node2Vec优秀,直接用它就完事了。
正解GraphSAGE的归纳能力来自局部邻居聚合,但也因此牺牲了对全局细粒度结构的刻画。在静态小型图上,Node2Vec通过充分随机游走能保存更精细的同质性信号,精度往往更高。选型要看动态性、规模、精度三个维度,没有绝对优劣。
为何常见:教程总是强调GraphSAGE的泛化与可扩展优势,让读者产生了“新的一定更好”的错觉。
误区为了捕捉更多结构信息,我把游走长度设成100,结果嵌入效果反而变差了,明明数据更多了呀?
正解游走序列过长会让同一上下文窗口里的节点距离起点太远,把它们当成共现邻居会引入大量噪声。实践里游走长度一般取10到80,窗口大小取3到10。长距离游走的远端节点与起点的相关性指数衰减,硬塞进上下文只会模糊名片。
为何常见:“更多数据更好”的直觉在随机游走中失效,因为游走本质是马尔可夫采样,远端节点的信息已经被稀释了。
误区既然GraphSAGE靠采样邻居聚合信息,那把采样数设成512,能聚合更多信息,效果一定更好。
正解采样数过多不仅计算开销陡增,还会让聚合结果被“平均化”洗掉关键细节。经典实验显示,每层采样20到30个邻居已足够覆盖有效信息,继续增大收益递减甚至带来噪声。固定小批量采样正是为了在信息量和方差之间取平衡。
为何常见:把“更多信息等于更好”的直觉套在聚合操作上,忽略了聚合是压缩操作,输入太杂反而失真。
面试题
Q1. 图嵌入的主要目标是什么?
- A.将图压缩为单一数字编号
- B.将节点映射为低维稠密向量← 正确答案
- C.删除图中冗余的边和节点
- D.将整张图编码成字符串
答案:B。图嵌入的核心是把每个节点变成固定维度的向量,使结构相似的节点向量相近。压缩成编号、删除边、编码成字符串都不是嵌入的目标。
Q2. Node2Vec中控制游走倾向的两个参数是?
- A.学习率以及批大小数值
- B.返回参数p与进出参数q← 正确答案
- C.激活函数和Dropout数值
- D.上下文窗口和嵌入的维度
答案:B。Node2Vec的核心创新就是引入返回参数p和进出参数q,让随机游走可以根据任务偏置。学习率、激活函数是通用训练配置,上下文窗口和维度是超参数但不是“控制游走倾向”的旋钮。
Q3. 在Node2Vec中,较小的p值会使游走更倾向于?
- A.回到上一步所在的节点← 正确答案
- B.跳到图中距离很远的节点
- C.只朝一个方向不断向前移动
- D.忽略邻居直接随机传送到远处
答案:A。p是返回参数,p越小则返回权重1/p越大,游走更爱回头,从而在上一步附近反复探索,形成BFS风格。B、C、D描述的是DFS或其他行为,与p的作用不符。
Q4. GraphSAGE相比Node2Vec的核心优势是?
- A.训练速度一定快于Node2Vec
- B.具备归纳式学习泛化能力← 正确答案
- C.无需设计任何聚合操作器
- D.能处理完全没有结构的图
答案:B。GraphSAGE学的是邻居聚合规则而非节点本身,因此新节点也能生成嵌入,这是归纳式能力。训练速度不一定快,聚合器需要设计,完全没有结构的图任何图嵌入方法都无能为力。
Q5. GraphSAGE中Mean聚合器具体做了什么?
- A.对邻居向量求平均再与自身拼接← 正确答案
- B.对全图节点向量求全局平均化
- C.只随机取一个邻居向量作为结果
- D.把邻居向量相乘后取平方根结果
答案:A。Mean聚合器把采样到的邻居向量逐维度取平均,与自身表示拼接后再做线性变换。B是全局平均,C是随机采样,D是乘法操作,都不符合Mean聚合器的定义。
Q6. 以下哪种场景最适合用GraphSAGE?
- A.静态社交网络一次性离线分析
- B.新用户不断注册的在线推荐系统← 正确答案
- C.小型固定引用网络结构的精研
- D.需要全图最短路径计算的场景
答案:B。GraphSAGE的归纳式能力让它可以为不断涌现的新用户当场生成嵌入。A和C是静态场景,Node2Vec更合适;最短路径计算不是嵌入方法能直接解决的。
Q7. 随机游走产生的节点序列在训练时被当作?
- A.类比于自然语言句子中的词序列← 正确答案
- B.类比于图像中的像素矩阵结构
- C.类比于每个节点的标签类别编号
- D.类比于分类任务中的输出概率值
答案:A。随机游走序列被当作“句子”,节点被当作“词”,用Word2Vec的Skip-gram思路训练嵌入。图像像素、标签、概率都不是随机游走序列的类比对象。
Q8. 下列属于GraphSAGE聚合函数的是?
- A.取均值聚合← 正确答案
- B.LSTM聚合← 正确答案
- C.取最大池化← 正确答案
- D.随机丢弃法
答案:ABC。GraphSAGE论文中提出的聚合器包括Mean、LSTM和Pooling三种。随机丢弃是正则化手段,不属于聚合函数。
Q9. 关于节点相似度,正确的说法包括?
- A.相似节点嵌入向量距离更近← 正确答案
- B.Jaccard系数可衡量邻居重叠← 正确答案
- C.嵌入学习需要保留相似关系← 正确答案
- D.图嵌入完全忽略节点相似性
答案:ABC。图嵌入的目标就是让相似节点向量靠近,Jaccard系数是衡量邻居重叠的经典指标。D与嵌入的基本思想完全相反。
Q10. 关于Node2Vec游走策略,下列说法正确的是?
- A.小的p值促进BFS式的游走← 正确答案
- B.小的q值促进DFS式的游走← 正确答案
- C.BFS式游走偏好结构等价性← 正确答案
- D.DFS式游走偏好结构等价性
答案:ABC。p小则易回头,游走偏好局部,类似BFS,捕捉结构等价性;q小则易远走,类似DFS,捕捉同质性。D把DFS说成偏好结构等价性是错误的,DFS偏好的应该是同质性。