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

1 recommendation-engine bigdata apache-spark-mllib

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

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

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

小智 5

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

  • 如果您必须坚持使用 Spark 和 2D(用户 x 项目)推荐器:然后进行上下文后/预过滤。由于您已经有了带有 ALS 求解器的 MF,您可以通过两种方式将其用作模型库推荐器来实现您想要实现的目标:(1/预过滤)根据您的上下文(例如年龄范围、国家/地区)对您的数据进行分组在为每个组创建 2D MF-ALS 推荐器或(2/后过滤)在单个 2D 用户项目推荐器上创建之前,然后在从模型中获得推荐后根据您的上下文信息进行后过滤。在第二个选项中,您不仅可以尝试布尔过滤,还可以尝试基于上下文匹配提高分值,例如基于 avg(观察者的年龄)的提高。
  • 将上下文信息直接用于基于模型的推荐。这个不能直接应用于 core/MLlib Spark 矩阵分解方法。这是为 2D 用户项操作准备的。但是要克服这个问题,您可以使用不同的基于模型的方法。我建议使用 Factorization Machines,因为它是上下文感知推荐的成功模型,并且非常直观,尤其是在数据准备方面。您可以在此处查看我的幻灯片中的介绍调频幻灯片介绍。有一个用于 Apache Spark 的包 - Spark libFM Package,但不能说明它 - 它真的有效还是仍在维护(?)。但肯定可以建议主要libfm.org,python - fastFM和非常相似的+快速实现来自 Lyst 的 lightfm,这对您的问题很有用。
  • 做 kNN 推荐器,在比较 user2user 的同时引入自己的相似性度量。这是启发式基础,您可以在其中提高关于两个用户匹配的上下文信息的相似度得分 - 例如使用诸如:abs(u1.age - u2.age)/(max(age) - min(age), country, city or u1 和 u2 之间的区域距离。

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

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