07 | Embedding进阶:如何利用图结构数据生成Graph Embedding?
该思维导图由 AI 生成,仅供参考
互联网中有哪些图结构数据?
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了图结构数据生成Graph Embedding的方法,重点介绍了基于随机游走的Graph Embedding方法Deep Walk和Node2vec。Deep Walk通过随机游走产生物品序列,再输入Word2vec进行训练,得到物品的Embedding。Node2vec在Deep Walk的基础上调整了随机游走跳转概率,权衡了网络的同质性和结构性,进一步应用于推荐系统学习不同网络结构特点。文章详细解释了Node2vec算法中如何控制BFS和DFS的倾向性,以及如何通过节点间的跳转概率来表达网络的“同质性”和“结构性”。此外,文章还介绍了Graph Embedding在推荐系统中的特征工程应用方式,包括“直接应用”、“预训练应用”和“End2End应用”。 文章总结了Graph Embedding的两种主要方法,Deep Walk和Node2vec,并总结了Embedding技术在深度学习推荐系统中的应用方法。Deep Walk方法通过随机游走产生物品序列,再输入Word2vec模型进行训练,而Node2vec在此基础上增加了随机游走过程中跳转概率的倾向性,体现了“结构性”和“同质性”。此外,文章还介绍了Embedding技术在深度学习推荐系统中的三种应用方法,“直接应用”、“预训练”和“End2End训练”。这些方法各有特点,是业界主流的应用方法。文章内容详实,为读者提供了生成Graph Embedding的基本概念和方法,以及在推荐系统中的应用方式。
《深度学习推荐系统实战》,新⼈⾸单¥68
全部留言(37)
- 最新
- 精选
- 浣熊当家王喆老师!我刚刚问了那个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好。 这次的实践经验推荐其他的同学参考,赞!
2020-12-11482 - 微波王老师,对于深度学习这块儿我是个新手,查找网上的东西真是太多了,好像说的都有道理,真是不知道该看些啥,能否推荐一些经典papers作为进一步学习的资料吗?十分感谢!
作者回复: 推荐关注我的推荐系统paper list吧,经典的不能再经典了。https://github.com/wzhe06/Reco-papers
2020-10-1644 - 张弛 ConorEmbedding预训练的优点:1.更快。因为对于End2End的方式,Embedding层的优化还受推荐算法的影响,这会增加计算量。2.难收敛。推荐算法是以Embedding为前提的,在端到端的方式中,在训练初期由于Embedding层的结果没有意义,所以推荐模块的优化也可能不太有意义,可能无法有效收敛。 Embedding端到端的优点:可能收敛到更好的结果。端到端因为将Embedding和推荐算法连接起来训练,那么Embedding层可以学习到最有利于推荐目标的Embedding结果。
作者回复: 赞,标准正确答案。
2020-10-17442 - 轩老师您好,关于课后思考题有些疑惑,预训练emb和end2end emb: 首先 预训练emb实现了模型和emb的解耦,解耦之后,模型只需要关注emb即可,emb就是物品的本征表示,线上服务也就是查redis拿emb完成推断。缺点么,感觉有风险?假如emb是由上游提供,上游重train之后,每一维的隐含意义就变化了,下游模型必须重新train,否则不就出错了? end2end的训练的话,对emb可以finetune,理论性能更高,但是总感觉不甚灵活?对于新的物品不停更新发布,岂不是nn.embedding的vocab需要不停的扩充,模型也需要不停的再次训练? 嗯,感觉在工程落地时,面对非静态的物品集,要么不灵活要么有风险?
作者回复: 非常非常好的思考,推荐给其他同学。我觉得你说的都没错。 我想进一步讨论的是第一点,到底模型需不需要重新训练。 我觉得对于有些上层模型是不用的,比如这些上层模型只接受embedding的similarity,不直接接收emb本身。 那么对于接收emb本身直接到网络结构里的,我觉得确实是需要重新训练的。 当然欢迎大家继续就这个问题讨论,很好的insight
2021-01-0623 - 张弛 Conor请问老师,有两个问题有点疑惑,第一个问题是采用Node2Vec算法时,当前节点v到下一个节点x的概率在经过进出参数和返回参数调整后是否需要做概率的归一化操作,使节点v到所有下一节点的概率为1呢?第二个问题是既然我们希望网络要么体现“同质性”要么体现“结构性”的特点,那么为什么一定要设定两个参数p和q,而不是仅用一个参数m(打比方)来实现,当m小,就是同质性强,结构性弱,当m大,就是同质性弱,结构性强?
作者回复: 非常好的问题: 1、需要归一化。注意我们在原文中一直强调我们要计算的是跳转“权重”,而不是跳转“概率”,既然是权重,我们就需要通过归一化转换成跳转概率。 2、设置两个参数,是因为与一个点相连的点有三类,dtx=0,1,2。我们固定一类点的权重为1,就需要分别给另外两类点不同的控制参数,就是p和q,这样更灵活。如果只用一个参数,当然也可以,但灵活性就差一点。
2020-10-2929 - Dikiwi直观理解,预训练的emb本身因为是有一定意义的,所以喂给mlp之后理论上可以加速收敛,但因为这个emb是通过其他方法训练出来的,本身不是对该模型服务的,所以很可能走到局部最优解?
作者回复: 这个点非常好。e2e训练的好处之一就是能够找到embedding层在这个模型结构下的最优解。预训练可能损失一些效果。 但好处你也说过了,可以大幅加快收敛的速度。
2020-10-2138 - 远方蔚蓝老师后面会介绍一下GraphSAGE和GAT在推荐的应用与实践吗,业界现在用的挺多。
作者回复: 会讲GraphSAGE的原理和细节。
2020-10-1627 - Geek_63ee39“首先,为了使 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
2020-10-1657 - inkachenko老师,我想问一下deep-walk随机选择起始点的时候,是所有节点等概率选取呢?还是像HMM一样,以原始行为序列中节点出现次数为权重建立一个初始状态概率分布,再随机选取呢?感觉后一种更加合理。。
作者回复: 我在sparrow里的实现是后一种,我觉得更合理,否则会改变数据的分布。
2021-02-245 - 雪焰🐻🥑对于文中的:"“预训练应用”指的是在我们预先训练好物品和用户的 Embedding 之后,不直接应用,而是把这些 Embedding 向量作为特征向量的一部分,跟其余的特征向量拼接起来" 请问老师,比如对文本的embedding x和图像的embedding y会是得到不同的维度,这种情况下怎么把x和y拼接起来输入DL 模型呢?直接concatenate么?不知道下节课会不会涉及到具体操作,谢谢老师!
作者回复: 最直接的方式是直接concatenate 再交由后续多层神经网络处理。 为了实现一些重点embedding之间的交叉,也可以进行多embedding之间的element wise交叉,或者一些乘积操作后输入后续mlp。 基于emb的操作非常多,这里没有统一的答案,也是各种模型层出不穷的原因。
2020-10-1625