08 | Embedding实战:如何使用Spark生成Item2vec和Graph Embedding?
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
本文详细介绍了如何使用Spark生成Item2vec和Graph Embedding的方法。首先,作者介绍了Item2vec的训练数据准备过程,包括对观影序列的处理和样本处理的思路。然后,详细解释了在Spark上实现Item2vec的训练过程,包括读取原始数据、过滤评分低的记录、对用户评分记录进行排序等关键步骤。接着,作者展示了如何在Spark中训练Item2vec模型,包括设置模型参数、训练模型和提取Embedding向量。随后,文章介绍了Graph Embedding的实现方法,包括生成转移概率矩阵和随机游走采样过程。最后,总结了实践中应该注意的几个要点,并鼓励读者根据实际情况优化结果。整体来说,本文以实际案例为基础,结合代码示例,详细介绍了在Spark平台上生成Item2vec和Graph Embedding的方法,对于想要在大数据环境下进行推荐系统模型训练的技术人员具有一定的参考价值。
《深度学习推荐系统实战》,新⼈⾸单¥68
全部留言(63)
- 最新
- 精选
- 你笑起来真好看transitionMatrixAndItemDis 在生成中这样定义的话,会不会造成dirver端oom?
作者回复: 非常非常好的问题。细心的话可以发现transitionMatrixAndItemDis这个矩阵完全是在driver端。 难点在于如何分布式地处理转移概率矩阵,解决方案确实是业界的难点。另外在随机游走的时候因为肯定要访问全部的转移矩阵,所以理论上来讲需要把这个矩阵broadcast到所有节点,这又是一个容易oom的问题。 有好的思路可以欢迎分享!但不是一个短时间能够解决的业界难题。
2020-10-20529 - fsc2016老师,筛选出来的高分电影有900多部,随机游走出来的序列embdding后,只有500多部,这应该和序列数量,序列长度有关,比如序列数量不够,导致没有覆盖到全部高分电影。实际工作中,像序列数量,序列长度是不是要经过筛选,来保证所有item都会被embdding?
作者回复: 非常好的观察,推荐所有的同学都能好好观察数据并得出这样有用的结论。 确实是这样,由于一些长尾,冷门电影的存在(毕竟热门电影还是极少数的),导致概率转移矩阵中游走到冷门电影的概率其实非常小,所以在游走次数比较小的时候,很容易覆盖不到。 因为课程的示例程序采用了比较小的采样次数和游走长度,所以这个问题比较严重,工作中肯定要在算力允许的前提下,尽量增加采样次数,适当增加游走长度,来保证生成结果的稳定性和覆盖率。
2020-10-31326 - Huntley想请教下老师,user embedding 也可以用相同的方法获得吗?如何构建用户关系图呢?是不是看过同一部电影的两个用户之间由一条无向边进行连接?和item embedding相比,有什么区别或注意事项吗?
作者回复: 在项目中用最简单的average pooling的方法生成了user embedding。也就是把用户评价过的高分高分电影的embedding进行平均。 user embedding的其他生成方式也很多,像你说的,也可以根据历史行为构建用户-物品的关系图,然后直接在其上进行随机游走,直接一同生成user 和item emb。 或者采用其他双塔结构的模型生成item和user emb等等。
2020-10-1911 - 白夜老师,randomWalk这部在60核的机器上跑的很慢,,慢到无语,可以优化下吗,transitionMatrixAndItemDis._1与_2的size都是300000
作者回复: 300000的物品规模单机环境肯定比较吃力了,代码中的实现也是单机下的随机游走,不管再如何优化都比较困难。 生产环境请关注spark的图计算api graphX https://spark.apache.org/graphx/ 我认为比较好的教程 https://endymecy.gitbooks.io/spark-graphx-source-analysis/content/ 其实期待更多的同学能参与到项目的维护中来,我们不仅是一个课程,更是一个业界交流的平台,期待能看到新的进展。
2020-10-2929 - 浣熊当家老师请教下,我对item2vec和Graph Embedding的联系理解是否正确: 1. 联系:item2vec和Graph Embedding 都是为了下一步的相关性矩阵,而一段物品序列 2. 不同: item2vec使用同一用户历史时间序列下的滑动窗口, 而Graph embedding在同一用户的时间序列之上,还应用了不同用户,同一物品之间的图联系,所以说graph embedding可以生成更全面的物品与物品的连接。 所以是否可理解为graph embedding比item2vec的复杂,更完善?业界更流行的是不是想deep walk这种graph embedding的算法?
作者回复: 理解非常正确。 而且针对graph embedding方法,不要认为所有的图数据都是由序列数据生成的,有一些天然的图数据,比如知识图谱,是只能使用graph embedidng方法,不能使用item2vec的。所以graph embedding应用范围更广,保存的信息也更多。
2020-10-2039 - 聪聪呀老师,我最近在研究使用graph embedding ,根据网上的git 代码跑了item2vec,EGES代码,我的推荐场景是视频推荐,同样的训练数据,我发现item2vec 推荐效果较好,但我发现EGES推荐效果不好(只用了ID,没有加其他特征)推荐结果相似度很低。所以想请教您,您觉得可能是什么原因引起的呢,您有没有EGES的demo
作者回复: EGES是希望融合更多side information,只用id信息并不是它的意义所在。而且除了这些原理上的分析外,我不主张给任何人模型效果好坏的建议,决定的因素太多了。 但总的来说,如果你只有id类的历史行为信息,使用EGES的意义不大。
2020-10-2126 - W老师你好,不知道我是不是哪里理解错了T_T,新手入门。我的问题是:评分低于3.5的电影被过滤了,相当于电影库里没有低于3.5分的电影,那么也就不会有对应低于3.5分的电影的embedding向量,为什么BatMan的推荐结果里还有低于3.5分的推荐结果呢?
作者回复: 这是个简单的脑筋急转弯问题吧。电影的3.5是平均分,你再想想。
2021-06-295 - 梁栋💝综上,随机游走因为需要完整转移概率矩阵的原因,受限于转移概率矩阵规模能否容纳到内存中。
作者回复: 是这样,内存问题是工程实现中最大的限制。我没有深入研究过spark的graphX,以及一些图计算的分布式引擎。如果有经验的同学可以谈谈如何进行分布式的转移矩阵处理。
2021-01-065 - tuomasiii想问一下在item2vec和graph embedding里面ttl都设置成了24小时,也就是说24小时候后这些embedding就会从redis里面evict掉吗? 还有就是如果有new user和new item我们都是需要train from scratch吗?还是说可以增量训练?
作者回复: 非常细心。 1、是的,ttl会让emb在24小时候失效,这一般是生产环境的做法,避免一些过期的错误emb留存。 2、emb几乎没有办法增量训练,需要重新训练生成new emb
2021-01-055 - 王发庆老师,您好,请教您一个问题,在生成Embedding的时候我们都是全量生成的,在生产环境下我们能增量的去生成新节点的Embedding么?
作者回复: 不可以。Embedding冷启动的问题大家问的比较多,我找时间统一回复一下。 简单来说生成环境下对于冷启动物品需要指定一个默认embedding,或者基于一些其他的相似条件取相似embedding的平均。
2020-10-225