极客时间已完结课程限时免费阅读

07 | Embedding进阶:如何利用图结构数据生成Graph Embedding?

07 | Embedding进阶:如何利用图结构数据生成Graph Embedding?-极客时间

07 | Embedding进阶:如何利用图结构数据生成Graph Embedding?

讲述:王喆

时长16:53大小15.46M

你好,我是王喆。
上一节课,我们一起学习了 Embedding 技术。我们知道,只要是能够被序列数据表示的物品,都可以通过 Item2vec 方法训练出 Embedding。但是,互联网的数据可不仅仅是序列数据那么简单,越来越多的数据被我们以图的形式展现出来。这个时候,基于序列数据的 Embedding 方法就显得“不够用”了。但在推荐系统中放弃图结构数据是非常可惜的,因为图数据中包含了大量非常有价值的结构信息。
那我们怎么样才能够基于图结构数据生成 Embedding 呢?这节课,我们就重点来讲讲基于图结构的 Embedding 方法,它也被称为 Graph Embedding。

互联网中有哪些图结构数据?

可能有的同学还不太清楚图结构中到底包含了哪些重要信息,为什么我们希望好好利用它们,并以它们为基础生成 Embedding?下面,我就先带你认识一下互联网中那些非常典型的图结构数据(如图 1)。
图1 互联网图结构数据
事实上,图结构数据在互联网中几乎无处不在,最典型的就是我们每天都在使用的社交网络(如图 1-a)。从社交网络中,我们可以发现意见领袖,可以发现社区,再根据这些“社交”特性进行社交化的推荐,如果我们可以对社交网络中的节点进行 Embedding 编码,社交化推荐的过程将会非常方便。
知识图谱也是近来非常火热的研究和应用方向。像图 1b 中描述的那样,知识图谱中包含了不同类型的知识主体(如人物、地点等),附着在知识主体上的属性(如人物描述,物品特点),以及主体和主体之间、主体和属性之间的关系。如果我们能够对知识图谱中的主体进行 Embedding 化,就可以发现主体之间的潜在关系,这对于基于内容和知识的推荐系统是非常有帮助的。
还有一类非常重要的图数据就是行为关系类图数据。这类数据几乎存在于所有互联网应用中,它事实上是由用户和物品组成的“二部图”(也称二分图,如图 1c)。用户和物品之间的相互行为生成了行为关系图。借助这样的关系图,我们自然能够利用 Embedding 技术发掘出物品和物品之间、用户和用户之间,以及用户和物品之间的关系,从而应用于推荐系统的进一步推荐。
毫无疑问,图数据是具备巨大价值的,如果能将图中的节点 Embedding 化,对于推荐系统来说将是非常有价值的特征。那下面,我们就进入正题,一起来学习基于图数据的 Graph Embedding 方法。

基于随机游走的 Graph Embedding 方法:Deep Walk

我们先来学习一种在业界影响力比较大,应用也很广泛的 Graph Embedding 方法,Deep Walk,它是 2014 年由美国石溪大学的研究者提出的。它的主要思想是在由物品组成的图结构上进行随机游走,产生大量物品序列,然后将这些物品序列作为训练样本输入 Word2vec 进行训练,最终得到物品的 Embedding。因此,DeepWalk 可以被看作连接序列 Embedding 和 Graph Embedding 的一种过渡方法。下图 2 展示了 DeepWalk 方法的执行过程。
图2 DeepWalk方法的过程
接下来,我就参照图 2 中 4 个示意图,来为你详细讲解一下 DeepWalk 的算法流程。
首先,我们基于原始的用户行为序列(图 2a),比如用户的购买物品序列、观看视频序列等等,来构建物品关系图(图 2b)。从中,我们可以看出,因为用户 Ui先后购买了物品 A 和物品 B,所以产生了一条由 A 到 B 的有向边。如果后续产生了多条相同的有向边,则有向边的权重被加强。在将所有用户行为序列都转换成物品相关图中的边之后,全局的物品相关图就建立起来了。
然后,我们采用随机游走的方式随机选择起始点,重新产生物品序列(图 2c)。其中,随机游走采样的次数、长度等都属于超参数,需要我们根据具体应用进行调整。
最后,我们将这些随机游走生成的物品序列输入图 2d 的 Word2vec 模型,生成最终的物品 Embedding 向量。
在上述 DeepWalk 的算法流程中,唯一需要形式化定义的就是随机游走的跳转概率,也就是到达节点 vi后,下一步遍历 vi 的邻接点 vj 的概率。如果物品关系图是有向有权图,那么从节点 vi 跳转到节点 vj 的概率定义如下:
其中,N+(vi) 是节点 vi所有的出边集合,Mij是节点 vi到节点 vj边的权重,即 DeepWalk 的跳转概率就是跳转边的权重占所有相关出边权重之和的比例。如果物品相关图是无向无权重图,那么跳转概率将是上面这个公式的一个特例,即权重 Mij将为常数 1,且 N+(vi) 应是节点 vi所有“边”的集合,而不是所有“出边”的集合。
再通过随机游走得到新的物品序列,我们就可以通过经典的 Word2vec 的方式生成物品 Embedding 了。当然,关于 Word2vec 的细节你可以回顾上一节课的内容,这里就不再赘述了。

在同质性和结构性间权衡的方法,Node2vec

2016 年,斯坦福大学的研究人员在 DeepWalk 的基础上更进一步,他们提出了 Node2vec 模型。Node2vec 通过调整随机游走跳转概率的方法,让 Graph Embedding 的结果在网络的同质性(Homophily)和结构性(Structural Equivalence)中进行权衡,可以进一步把不同的 Embedding 输入推荐模型,让推荐系统学习到不同的网络结构特点。
我这里所说的网络的“同质性”指的是距离相近节点的 Embedding 应该尽量近似,如图 3 所示,节点 u 与其相连的节点 s1、s2、s3、s4的 Embedding 表达应该是接近的,这就是网络“同质性”的体现。在电商网站中,同质性的物品很可能是同品类、同属性,或者经常被一同购买的物品。
“结构性”指的是结构上相似的节点的 Embedding 应该尽量接近,比如图 3 中节点 u 和节点 s6都是各自局域网络的中心节点,它们在结构上相似,所以它们的 Embedding 表达也应该近似,这就是“结构性”的体现。在电商网站中,结构性相似的物品一般是各品类的爆款、最佳凑单商品等拥有类似趋势或者结构性属性的物品。
图3 网络的BFS和 DFS示意图
理解了这些基本概念之后,那么问题来了,Graph Embedding 的结果究竟是怎么表达结构性和同质性的呢?
首先,为了使 Graph Embedding 的结果能够表达网络的“结构性”,在随机游走的过程中,我们需要让游走的过程更倾向于 BFS(Breadth First Search,宽度优先搜索),因为 BFS 会更多地在当前节点的邻域中进行游走遍历,相当于对当前节点周边的网络结构进行一次“微观扫描”。当前节点是“局部中心节点”,还是“边缘节点”,亦或是“连接性节点”,其生成的序列包含的节点数量和顺序必然是不同的,从而让最终的 Embedding 抓取到更多结构性信息。
而为了表达“同质性”,随机游走要更倾向于 DFS(Depth First Search,深度优先搜索)才行,因为 DFS 更有可能通过多次跳转,游走到远方的节点上。但无论怎样,DFS 的游走更大概率会在一个大的集团内部进行,这就使得一个集团或者社区内部节点的 Embedding 更为相似,从而更多地表达网络的“同质性”。
那在 Node2vec 算法中,究竟是怎样控制 BFS 和 DFS 的倾向性的呢?
其实,它主要是通过节点间的跳转概率来控制跳转的倾向性。图 4 所示为 Node2vec 算法从节点 t 跳转到节点 v 后,再从节点 v 跳转到周围各点的跳转概率。这里,你要注意这几个节点的特点。比如,节点 t 是随机游走上一步访问的节点,节点 v 是当前访问的节点,节点 x1、x2、x3是与 v 相连的非 t 节点,但节点 x1还与节点 t 相连,这些不同的特点决定了随机游走时下一次跳转的概率。
图4 Node2vec的跳转概率
这些概率我们还可以用具体的公式来表示,从当前节点 v 跳转到下一个节点 x 的概率 ,其中 wvx 是边 vx 的原始权重, 是 Node2vec 定义的一个跳转权重。到底是倾向于 DFS 还是 BFS,主要就与这个跳转权重的定义有关了。这里我们先了解一下它的精确定义,我再作进一步的解释:
里的 dtx是指节点 t 到节点 x 的距离,比如节点 x1其实是与节点 t 直接相连的,所以这个距离 dtx就是 1,节点 t 到节点 t 自己的距离 dtt就是 0,而 x2、x3这些不与 t 相连的节点,dtx就是 2。
此外, 中的参数 p 和 q 共同控制着随机游走的倾向性。参数 p 被称为返回参数(Return Parameter),p 越小,随机游走回节点 t 的可能性越大,Node2vec 就更注重表达网络的结构性。参数 q 被称为进出参数(In-out Parameter),q 越小,随机游走到远方节点的可能性越大,Node2vec 更注重表达网络的同质性。反之,当前节点更可能在附近节点游走。你可以自己尝试给 p 和 q 设置不同大小的值,算一算从 v 跳转到 t、x1、x2和 x3的跳转概率。这样一来,应该就不难理解我刚才所说的随机游走倾向性的问题啦。
Node2vec 这种灵活表达同质性和结构性的特点也得到了实验的证实,我们可以通过调整 p 和 q 参数让它产生不同的 Embedding 结果。图 5 上就是 Node2vec 更注重同质性的体现,从中我们可以看到,距离相近的节点颜色更为接近,图 5 下则是更注重结构性的体现,其中结构特点相近的节点的颜色更为接近。
图5 Node2vec实验结果
毫无疑问,Node2vec 所体现的网络的同质性和结构性,在推荐系统中都是非常重要的特征表达。由于 Node2vec 的这种灵活性,以及发掘不同图特征的能力,我们甚至可以把不同 Node2vec 生成的偏向“结构性”的 Embedding 结果,以及偏向“同质性”的 Embedding 结果共同输入后续深度学习网络,以保留物品的不同图特征信息。

Embedding 是如何应用在推荐系统的特征工程中的?

到这里,我们已经学习了好几种主流的 Embedding 方法,包括序列数据的 Embedding 方法,Word2vec 和 Item2vec,以及图数据的 Embedding 方法,Deep Walk 和 Node2vec。那你有没有想过,我为什么要在特征工程这一模块里介绍 Embedding 呢?Embedding 又是怎么应用到推荐系统中的呢?这里,我就来做一个统一的解答。
第一个问题不难回答,由于 Embedding 的产出就是一个数值型特征向量,所以 Embedding 技术本身就可以视作特征处理方式的一种。只不过与简单的 One-hot 编码等方式不同,Embedding 是一种更高阶的特征处理方法,它具备了把序列结构、网络结构、甚至其他特征融合到一个特征向量中的能力。
而第二个问题的答案有三个,因为 Embedding 在推荐系统中的应用方式大致有三种,分别是“直接应用”“预训练应用”和“End2End 应用”。
其中,“直接应用”最简单,就是在我们得到 Embedding 向量之后,直接利用 Embedding 向量的相似性实现某些推荐系统的功能。典型的功能有,利用物品 Embedding 间的相似性实现相似物品推荐,利用物品 Embedding 和用户 Embedding 的相似性实现“猜你喜欢”等经典推荐功能,还可以利用物品 Embedding 实现推荐系统中的召回层等。当然,如果你还不熟悉这些应用细节,也完全不用担心,我们在之后的课程中都会讲到。
预训练应用”指的是在我们预先训练好物品和用户的 Embedding 之后,不直接应用,而是把这些 Embedding 向量作为特征向量的一部分,跟其余的特征向量拼接起来,作为推荐模型的输入参与训练。这样做能够更好地把其他特征引入进来,让推荐模型作出更为全面且准确的预测。
第三种应用叫做“End2End 应用”。看上去这是个新的名词,它的全称叫做“End to End Training”,也就是端到端训练。不过,它其实并不神秘,就是指我们不预先训练 Embedding,而是把 Embedding 的训练与深度学习推荐模型结合起来,采用统一的、端到端的方式一起训练,直接得到包含 Embedding 层的推荐模型。这种方式非常流行,比如图 6 就展示了三个包含 Embedding 层的经典模型,分别是微软的 Deep Crossing,UCL 提出的 FNN 和 Google 的 Wide&Deep。它们的实现细节我们也会在后续课程里面介绍,你这里只需要了解这个概念就可以了。
图6 带有Embedding层的深度学习模型

小结

这节课我们一起学习了 Graph Embedding 的两种主要方法,分别是 Deep Walk 和 Node2vec,并且我们还总结了 Embedding 技术在深度学习推荐系统中的应用方法。
学习 Deep Walk 方法关键在于理解它的算法流程,首先,我们基于原始的用户行为序列来构建物品关系图,然后采用随机游走的方式随机选择起始点,重新产生物品序列,最后将这些随机游走生成的物品序列输入 Word2vec 模型,生成最终的物品 Embedding 向量。
而 Node2vec 相比于 Deep Walk,增加了随机游走过程中跳转概率的倾向性。如果倾向于宽度优先搜索,则 Embedding 结果更加体现“结构性”。如果倾向于深度优先搜索,则更加体现“同质性”。
最后,我们介绍了 Embedding 技术在深度学习推荐系统中的三种应用方法,“直接应用”“预训练”和“End2End 训练”。这些方法各有特点,它们都是业界主流的应用方法,随着课程的不断深入,我会带你一步一步揭开它们的面纱。
老规矩,在课程的最后,我还是用表格的方式总结了这次课的关键知识点,你可以利用它来复习巩固。
至此,我们就完成了所有 Embedding 理论部分的学习。下节课,我们再一起进入 Embedding 和 Graph Embedding 的实践部分,利用 Sparrow Recsys 的数据,使用 Spark 实现 Embedding 的训练,希望你到时能跟我一起动起手来!

课后思考

你能尝试对比一下 Embedding 预训练和 Embedding End2End 训练这两种应用方法,说出它们之间的优缺点吗?
欢迎在留言区分享你的思考和答案,如果这节 Graph Embedding 的课程让你有所收获,那不妨也把这节课分享给你的朋友们,我们下节课见!
分享给需要的人,Ta购买本课程,你将得20
生成海报并分享

赞 32

提建议

上一篇
06 | Embedding基础:所有人都在谈的Embedding技术到底是什么?
下一篇
08 | Embedding实战:如何使用Spark生成Item2vec和Graph Embedding?
 写留言

精选留言(37)

  • 浣熊当家
    2020-12-11
    王喆老师!我刚刚问了那个deepwalk在原本就是序列数据上的应用的问题,我说我能想到的优势就是扩充样本, 但是通过一系列的尝试,我觉得好像是恰恰相反!用deepwalk的时候生成比原序列样本少,才能降低噪音,抓住主要关联。特别想跟老师探讨一下这个结论。 具体是这样的, 我用我们公司的用户浏览网页的序列数据,来做网页的embedding,原本有 500k条序列,一开始我用deepwalk生成了原数据两倍的样本(1mm)的samples, 结果训练出来的embedding,网页之间的similarity很低 (每个网页跟最近网页的similarity值达到0.5左右, 如果直接用原样本可达0.7), 接着我试着降低deepwalk生成样本的数量,最后用了跟您同样的20k,通过随机抽查,效果特别的好(可以达到0.9以上,而且结果很make sense)。所以我觉得deepwalk的好处反而是去掉多余噪音信息,关注主要矛盾,所以一般要生成比原样本更少的样本量
    展开

    作者回复: 非常棒的实践。 所以我一直说实践出真知,从来都不是哪个算法比另外一个更好。我觉得你说的没错,deepwark的抽样过程保留了转移矩阵的“主要框架”,但同时当抽样次数不太高的时候,item embedding的覆盖率反而没有item2vec好。 这次的实践经验推荐其他的同学参考,赞!

    共 4 条评论
    77
  • 微波
    2020-10-16
    王老师,对于深度学习这块儿我是个新手,查找网上的东西真是太多了,好像说的都有道理,真是不知道该看些啥,能否推荐一些经典papers作为进一步学习的资料吗?十分感谢!

    作者回复: 推荐关注我的推荐系统paper list吧,经典的不能再经典了。https://github.com/wzhe06/Reco-papers

    43
  • 张弛 Conor
    2020-10-17
    Embedding预训练的优点:1.更快。因为对于End2End的方式,Embedding层的优化还受推荐算法的影响,这会增加计算量。2.难收敛。推荐算法是以Embedding为前提的,在端到端的方式中,在训练初期由于Embedding层的结果没有意义,所以推荐模块的优化也可能不太有意义,可能无法有效收敛。 Embedding端到端的优点:可能收敛到更好的结果。端到端因为将Embedding和推荐算法连接起来训练,那么Embedding层可以学习到最有利于推荐目标的Embedding结果。
    展开

    作者回复: 赞,标准正确答案。

    共 4 条评论
    42
  • 2021-01-06
    老师您好,关于课后思考题有些疑惑,预训练emb和end2end emb: 首先 预训练emb实现了模型和emb的解耦,解耦之后,模型只需要关注emb即可,emb就是物品的本征表示,线上服务也就是查redis拿emb完成推断。缺点么,感觉有风险?假如emb是由上游提供,上游重train之后,每一维的隐含意义就变化了,下游模型必须重新train,否则不就出错了? end2end的训练的话,对emb可以finetune,理论性能更高,但是总感觉不甚灵活?对于新的物品不停更新发布,岂不是nn.embedding的vocab需要不停的扩充,模型也需要不停的再次训练? 嗯,感觉在工程落地时,面对非静态的物品集,要么不灵活要么有风险?
    展开

    作者回复: 非常非常好的思考,推荐给其他同学。我觉得你说的都没错。 我想进一步讨论的是第一点,到底模型需不需要重新训练。 我觉得对于有些上层模型是不用的,比如这些上层模型只接受embedding的similarity,不直接接收emb本身。 那么对于接收emb本身直接到网络结构里的,我觉得确实是需要重新训练的。 当然欢迎大家继续就这个问题讨论,很好的insight

    22
  • 张弛 Conor
    2020-10-29
    请问老师,有两个问题有点疑惑,第一个问题是采用Node2Vec算法时,当前节点v到下一个节点x的概率在经过进出参数和返回参数调整后是否需要做概率的归一化操作,使节点v到所有下一节点的概率为1呢?第二个问题是既然我们希望网络要么体现“同质性”要么体现“结构性”的特点,那么为什么一定要设定两个参数p和q,而不是仅用一个参数m(打比方)来实现,当m小,就是同质性强,结构性弱,当m大,就是同质性弱,结构性强?

    作者回复: 非常好的问题: 1、需要归一化。注意我们在原文中一直强调我们要计算的是跳转“权重”,而不是跳转“概率”,既然是权重,我们就需要通过归一化转换成跳转概率。 2、设置两个参数,是因为与一个点相连的点有三类,dtx=0,1,2。我们固定一类点的权重为1,就需要分别给另外两类点不同的控制参数,就是p和q,这样更灵活。如果只用一个参数,当然也可以,但灵活性就差一点。

    共 2 条评论
    9
  • Dikiwi
    2020-10-21
    直观理解,预训练的emb本身因为是有一定意义的,所以喂给mlp之后理论上可以加速收敛,但因为这个emb是通过其他方法训练出来的,本身不是对该模型服务的,所以很可能走到局部最优解?

    作者回复: 这个点非常好。e2e训练的好处之一就是能够找到embedding层在这个模型结构下的最优解。预训练可能损失一些效果。 但好处你也说过了,可以大幅加快收敛的速度。

    共 3 条评论
    8
  • 远方蔚蓝
    2020-10-16
    老师后面会介绍一下GraphSAGE和GAT在推荐的应用与实践吗,业界现在用的挺多。

    作者回复: 会讲GraphSAGE的原理和细节。

    共 2 条评论
    7
  • Geek_63ee39
    2020-10-16
    “首先,为了使 Graph Embedding 的结果能够表达网络的“结构性”,在随机游走的过程中,我们需要让游走的过程更倾向于 BFS(Breadth First Search,宽度优先搜索)” 这里应该是DFS吧?并且同质性是使用BFS

    作者回复: 这是非常常见的一个问题,也推荐其他有疑问的同学关注。 推荐参考原文中的解释。 We observe that BFS and DFS strategies play a key role in producing representations that reflect either of the above equivalences. In particular, the neighborhoods sampled by BFS lead to embeddings that correspond closely to structural equivalence. The opposite is true for DFS which can explore larger parts of the network as it can move further away from the source node u (with sample size k being fixed). In DFS, the sampled nodes more accurately reflect a macro-view of the neighborhood which is essential in inferring communities based on homophily. 原文地址 https://github.com/wzhe06/Reco-papers/blob/master/Embedding/%5BNode2vec%5D%20Node2vec%20-%20Scalable%20Feature%20Learning%20for%20Networks%20%28Stanford%202016%29.pdf

    共 5 条评论
    7
  • inkachenko
    2021-02-24
    老师,我想问一下deep-walk随机选择起始点的时候,是所有节点等概率选取呢?还是像HMM一样,以原始行为序列中节点出现次数为权重建立一个初始状态概率分布,再随机选取呢?感觉后一种更加合理。。

    作者回复: 我在sparrow里的实现是后一种,我觉得更合理,否则会改变数据的分布。

    5
  • 雪焰🐻🥑
    2020-10-16
    对于文中的:"“预训练应用”指的是在我们预先训练好物品和用户的 Embedding 之后,不直接应用,而是把这些 Embedding 向量作为特征向量的一部分,跟其余的特征向量拼接起来" 请问老师,比如对文本的embedding x和图像的embedding y会是得到不同的维度,这种情况下怎么把x和y拼接起来输入DL 模型呢?直接concatenate么?不知道下节课会不会涉及到具体操作,谢谢老师!
    展开

    作者回复: 最直接的方式是直接concatenate 再交由后续多层神经网络处理。 为了实现一些重点embedding之间的交叉,也可以进行多embedding之间的element wise交叉,或者一些乘积操作后输入后续mlp。 基于emb的操作非常多,这里没有统一的答案,也是各种模型层出不穷的原因。

    共 2 条评论
    5
  • Wa
    2021-01-07
    一直没动手尝试item2vec和graph embedding相关算法,因为对于我们的业务,不同商品之间关系比较独立,不存在“先看了A明星新闻,再看与他有绯闻的B明星新闻,再看他们共同作品的新闻...”这种有时序关系的用户行为序列,所以不确定用类似word2vec这种作用于文本(文本天然具有强前后相关性)的模型是否有效。我们的用户依次点击A - B - C - D可能仅仅是因为展示列表时这个顺序,而不存在A离B近而离D远这种信息,不知道老师怎么看。
    展开

    作者回复: 用户依次点击虽然被你的展示顺序bias,但是仍然包含了用户共同的兴趣特点。所以完全可以使用item2vec。当然最终的效果要看你的实践结果,这里都是经验上的猜测。

    共 2 条评论
    4
  • 浣熊当家
    2020-12-02
    老师知道有什么sample code, 可以把转移概率矩阵(项目中的transitionMatrix 和itemDistribution )生成图5这种graph可视化图吗?感觉在做presentation的时候,人们就认图,没有图感觉说再多也没有热烈的反馈

    作者回复: 哈哈,这其实是个好问题。TensorBoard里其实是有embedidng可视化的工具的,可以研究一下。其他还有Embedding Projector之类的,可以自己研究一下。

    共 3 条评论
    4
  • 褚江
    2021-02-23
    王老师,我想请问, embedding层可以加入到树模型中吗?很多时候在比较小的样本上训练,感觉Lgbm会好很多,但好像没有人这样做是吗?

    作者回复: embedding层应该是没法跟树模型结合的。但是训练好的embedding也许可以放到树模型里面做进一步训练。仅作参考。

    共 3 条评论
    3
  • Dive
    2021-01-24
    王老师,好多论文里介绍完自己的深度学习推荐模型A都会加一个预训练嵌入的对比。我理解是将预训练得到的嵌入作为深度学习推荐系统模型A的嵌入的初始化;我其实很疑惑,实际中应该是情况①还是情况②呢?感谢老师~ ①这些嵌入在深度学习模型中就固定住,不会更新 ②这些嵌入仅仅是初始化作用,在模型中还会更新

    作者回复: 这两种情况都会存在,但业界第一种用的比较多。 后续课程还会讨论这个问题,可以继续学习。

    共 2 条评论
    3
  • 香格里拉飞龙
    2021-08-10
    老师,关于同质性和结构性及其表达,不知这样理解是否可行呢? 1.倾向于广度优先搜索时(p越小),节点更容易在起始点周围跳转,而且经常会返回前一节点,反应微观的、局部的关系。 比如起始点为图3中节点u,游走长度设为4。所以游走序列可能是u s1 u s1,u s1 u s2,u s1 s2 s1,u s1 s2 u,……,经过许多次游走后,会发现游走序列大部分都在u及其相邻点s1、s2、s3、s4之间转悠,而且其中会有一部分序列在转悠一圈后又回到u。于是可以稍微推断出u是中心节点,且s6的情况与之类似。 而如果起始点设为s9,虽然也有一部分游走序列中多次出现s9,但是若序列从s9到s6,之后又跳转到了s5或s7,就无法再回到s9。在广度优先中,s9为起始点无法返回自身的概率显然比u为起始点无法返回自身的概率大。 故广度优先倾向于表现结构性。 2.倾向于深度优先搜索时(q越小),节点更容易跳转至更远处节点,反应宏观的节点关系。 依然以起始点u举例,游走长度为4。深度优先下更能游走至更远更新的节点,游走序列可能是u s1 s2 s4,u s1 s3 s4,u s1 s2 u,u s1 s2 s5,……,游走序列在更大的概率上游走至s5、s6,并且因为s1和s3并没有外部的节点与之相连,会有一部分序列依然在u和其相邻节点中转悠。所以表现出同质性,与同一节点距离相近的,高度互联且属于相似社区。 还有一种理解。如果一个节点a及其四个相邻节点高度互联,与上图中u极其邻点相似,然而这四个邻点又各自与其他点相连,这些更远处点距离a点为2。于是在游走过程中,有一部分游走序列在a点及其邻点间转悠,也有一部分游走至更远点,不再回来。但是因为a与邻点高度互联,在a与邻点间游走的概率更大。此也能表达同质性。
    展开

    作者回复: 我觉得这个理解没问题,赞。

    共 2 条评论
    3
  • Geek_fdb832
    2021-04-25
    想求教一下王老师,graph embedding只是embedding了graph有关的信息 (node之间的关系) 吗?如果一个item有些其他的性质,比如price, name, category, 这方面的信息能也能在随机游走的过程中放在graph embedding里吗?

    作者回复: 一般不把这些属性信息直接放在graph里面游走,而是在主推荐模型中引入,或者是用GNN等方式来学习。

    2
  • DAMIAN
    2021-04-22
    课后思考: 1. pre-training 优点:embedding泛化能力强,即使后接不同的任务,也都可以work,bp的层数很少,收敛比较快 缺点:精度一般比较低,不能针对特定任务优化 2. end2end: 优点:一般精度比前者高,embedding可以针对特定任务优化 缺点:训练慢,embedding几乎不可能用来做其他的任务,泛化能力比较差 想请问老师,按照迁移学习的思路,将预训练的embedding放到end2end模型中fine-tuning会不会有好的效果呢?
    展开

    作者回复: 这两点都答的非常好。 最后的问题,当然是可行的,比如之前FNN就这么做过,可以有效的降低收敛所需的epoch数量。

    2
  • Sanders
    2021-02-03
    结合Word2Vec这样理解对不对? 1. Random Walk和Node2Vec实际上是构建语料-训练样本的过程,Graph Embedding结构和之前Word2Vec是一样的 2. Word2Vec中会将相邻词的label值设为1,Node2Vec会用跳转概率作为相邻节点的label值

    作者回复: 1.可以这样理解 2.也许可以等价,但node2vec跟label的值没有直接关系,还是先做采样,在做word2vec

    2
  • 范闲
    2020-11-23
    Node embedding 的最终结果看起来看起来更像聚类结果。 是否可以利用聚类算法来实现Node embedding的过程呢?

    作者回复: 你可以思考一下可不可以,类似kmeans这类方法是如何聚类的,能不能应用在图结构数据上。

    共 3 条评论
    2
  • Roy Liang
    2021-07-23
    老师,有基于地图的推荐系统案例介绍吗?

    作者回复: 跟uber的人随便聊过一些,主要特点是基于lbs的召回设计。其他没有本质的区别。

    1