深度学习推荐系统实战
王喆
Roku 推荐系统架构负责人,前 hulu 高级研究员,《深度学习推荐系统》作者
33298 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 44 讲
深度学习推荐系统实战
15
15
1.0x
00:00/00:00
登录|注册

08 | Embedding实战:如何使用Spark生成Item2vec和Graph Embedding?

通过随机游走产生长度为sampleLength的样本
根据物品出现的概率,随机选择起始点
求取转移概率矩阵
统计影片对的数量
利用flatMap操作把观影序列打碎成一个个影片对
把每个用户的评分记录处理成一个字符串的形式
定义一个自定义操作sortUdf,用它实现每个用户的评分记录按照时间戳进行排序
用groupBy userId操作聚合每个用户的评分记录
用where语句过滤评分低的评分记录
读取ratings原始数据到Spark平台
对用户的观影序列按时间戳排序
过滤评分低的电影
从MovieLens数据集中获取评分和评分时间
改变随机游走采样过程的代码
理解通过随机游走生成训练样本过程
理解生成物品间的转移概率矩阵的方法
注意训练Word2vec模型的参数
通过随机游走产生样本
生成转移概率矩阵
保存模型
训练模型
设置模型参数
实现过程
准备训练用的序列数据
实现Node2vec
Deep Walk的实现
Item2vec的Spark实现
随机游走采样过程
数据准备
训练Item2vec模型
序列数据的处理
课后思考
小结
Graph Embedding
模型训练
Item2vec
如何使用Spark生成Item2vec和Graph Embedding?

该思维导图由 AI 生成,仅供参考

你好,我是王喆。
前面两节课,我们一起学习了从 Item2vec 到 Graph Embedding 的几种经典 Embedding 方法。在打好了理论基础之后,这节课就让我们从理论走向实践,看看到底如何基于 Spark 训练得到物品的 Embedding 向量
通过特征工程部分的实践,我想你已经对 Spark 这个分布式计算平台有了初步的认识。其实除了一些基本的特征处理方法,在 Spark 的机器学习包 Spark MLlib 中,还包含了大量成熟的机器学习模型,这其中就包括我们讲过的 Word2vec 模型。基于此,这节课我们会在 Spark 平台上,完成 Item2vec 和基于 Deep Walk 的 Graph Embedding 的训练。
对其他机器学习平台有所了解的同学可能会问,TensorFlow、PyTorch 都有很强大的深度学习工具包,我们能不能利用这些平台进行 Embedding 训练呢?当然是可以的,我们也会在之后的课程中介绍 TensorFlow 并用它实现很多深度学习推荐模型。
但是 Spark 作为一个原生的分布式计算平台,在处理大数据方面还是比 TensorFlow 等深度学习平台更具有优势,而且业界的很多公司仍然在使用 Spark 训练一些结构比较简单的机器学习模型,再加上我们已经用 Spark 进行了特征工程的处理,所以,这节课我们继续使用 Spark 来完成 Embedding 的实践。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
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-20
    5
    29
  • fsc2016
    老师,筛选出来的高分电影有900多部,随机游走出来的序列embdding后,只有500多部,这应该和序列数量,序列长度有关,比如序列数量不够,导致没有覆盖到全部高分电影。实际工作中,像序列数量,序列长度是不是要经过筛选,来保证所有item都会被embdding?

    作者回复: 非常好的观察,推荐所有的同学都能好好观察数据并得出这样有用的结论。 确实是这样,由于一些长尾,冷门电影的存在(毕竟热门电影还是极少数的),导致概率转移矩阵中游走到冷门电影的概率其实非常小,所以在游走次数比较小的时候,很容易覆盖不到。 因为课程的示例程序采用了比较小的采样次数和游走长度,所以这个问题比较严重,工作中肯定要在算力允许的前提下,尽量增加采样次数,适当增加游走长度,来保证生成结果的稳定性和覆盖率。

    2020-10-31
    3
    26
  • Huntley
    想请教下老师,user embedding 也可以用相同的方法获得吗?如何构建用户关系图呢?是不是看过同一部电影的两个用户之间由一条无向边进行连接?和item embedding相比,有什么区别或注意事项吗?

    作者回复: 在项目中用最简单的average pooling的方法生成了user embedding。也就是把用户评价过的高分高分电影的embedding进行平均。 user embedding的其他生成方式也很多,像你说的,也可以根据历史行为构建用户-物品的关系图,然后直接在其上进行随机游走,直接一同生成user 和item emb。 或者采用其他双塔结构的模型生成item和user emb等等。

    2020-10-19
    11
  • 白夜
    老师,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-29
    2
    9
  • 浣熊当家
    老师请教下,我对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-20
    3
    9
  • 聪聪呀
    老师,我最近在研究使用graph embedding ,根据网上的git 代码跑了item2vec,EGES代码,我的推荐场景是视频推荐,同样的训练数据,我发现item2vec 推荐效果较好,但我发现EGES推荐效果不好(只用了ID,没有加其他特征)推荐结果相似度很低。所以想请教您,您觉得可能是什么原因引起的呢,您有没有EGES的demo

    作者回复: EGES是希望融合更多side information,只用id信息并不是它的意义所在。而且除了这些原理上的分析外,我不主张给任何人模型效果好坏的建议,决定的因素太多了。 但总的来说,如果你只有id类的历史行为信息,使用EGES的意义不大。

    2020-10-21
    2
    6
  • W
    老师你好,不知道我是不是哪里理解错了T_T,新手入门。我的问题是:评分低于3.5的电影被过滤了,相当于电影库里没有低于3.5分的电影,那么也就不会有对应低于3.5分的电影的embedding向量,为什么BatMan的推荐结果里还有低于3.5分的推荐结果呢?

    作者回复: 这是个简单的脑筋急转弯问题吧。电影的3.5是平均分,你再想想。

    2021-06-29
    5
  • 梁栋💝
    综上,随机游走因为需要完整转移概率矩阵的原因,受限于转移概率矩阵规模能否容纳到内存中。

    作者回复: 是这样,内存问题是工程实现中最大的限制。我没有深入研究过spark的graphX,以及一些图计算的分布式引擎。如果有经验的同学可以谈谈如何进行分布式的转移矩阵处理。

    2021-01-06
    5
  • 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-05
    5
  • 王发庆
    老师,您好,请教您一个问题,在生成Embedding的时候我们都是全量生成的,在生产环境下我们能增量的去生成新节点的Embedding么?

    作者回复: 不可以。Embedding冷启动的问题大家问的比较多,我找时间统一回复一下。 简单来说生成环境下对于冷启动物品需要指定一个默认embedding,或者基于一些其他的相似条件取相似embedding的平均。

    2020-10-22
    5
收起评论
显示
设置
留言
63
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部