如何根据多个参数推荐内容(比如电影)

时间:2017-06-23 19:12:35

标签: apache-spark-mllib recommendation-engine bigdata

我是Spark ML的新手。我想向使用Apache Spark ML的用户推荐电影。我了解到here我们可以根据用户的评分来推荐电影。

我的问题是我们是否可以包含推荐的其他功能,比如他的年龄,国家,电影类型,喜欢等。 例如,我们有用户'U1','U2','U3'和'U4',他们都在观看电影'M'。住在美国的22岁的U1也观看了生活在澳大利亚的电影M1,M2和M3以及50岁的U2观看了电影M1,M4和M5。 现在,我想推荐一位居于美国电影M1,M2和M3的24岁的U3。同时推荐生活在澳大利亚的电影M1,M4和M5至21岁的U4。

基本上,我想为年龄和国家提供一些权重。 我们怎样才能用Spark ml(比如使用ALS)实现这个目标?

2 个答案:

答案 0 :(得分:4)

引入上下文信息的这个问题可以通过几种不同的方式解决:

  • 如果您必须坚持Spark和2D(用户x项目)推荐者:那么请进行上下文后期/预过滤。由于您已经在那里使用了具有ALS解算器的MF,您可以通过两种方式将其用作模型基础推荐器,以实现您想要实现的目标:(1 /预过滤)按您的上下文对数据进行分组(例如年龄范围,国家/地区)在为每个组创建2D MF-ALS推荐器或(2 /后过滤)创建单个2D用户项目推荐器之前,然后在从模型获得推荐后,根据您的上下文信息进行后过滤。在第二个选项中,您不仅可以尝试布尔过滤,还可以尝试根据上下文匹配来提升分数值,例如:根据平均值(观察者的年龄)提升。
  • 将上下文信息直接用于基于模型的推荐器。这个不能直接应用core / MLlib Spark矩阵分解方法。这个准备用于2D用户项操作。但要克服这一点,您可以使用不同的基于模型的方法。我建议使用分解机器,因为它是上下文感知建议的成功模型,它非常直观,特别是在数据准备方面。您可以在此处查看我的幻灯片中的介绍:Intro to FM slides。 Apache Spark有一个软件包 - Spark libFM Package,但对它没有任何说明 - 它是否真的有效或仍在维护(?)。但肯定可以建议主libfm.org,python - fastFM和非常相似的+快速实施lightfm from Lyst,这对你的问题很有帮助。
  • 执行kNN推荐程序,在比较user2user时引入自己的相似性度量。它是启发式基础,您可以在其中提升相似性得分,其中关于两个用户的上下文信息匹配 - 例如使用类似:abs(u1.age - u2.age)/(最大(年龄) - 最小(年龄),国家,城市或地区距离u1和u2。

我还建议阅读推荐系统手册[6]中关于向推荐系统引入上下文信息的章节。当然还有整本书!

[6]:Kantor,Paul B.推荐系统手册。编辑。 Francesco Ricci,Lior Rokach和Bracha Shapira。柏林,德国::施普林格,2015年。

答案 1 :(得分:0)

我使用Apache Spark MLlib制作了一个关于电影推荐系统的项目。我得到了编码员的帮助。您可以找到教程here