协作过滤添加新用户和项目

时间:2018-07-28 20:10:29

标签: machine-learning recommendation-engine collaborative-filtering

我正在为电影创建推荐引擎,并且已经阅读了很多很好的信息。我从未见过的一件事是如何为新用户和项目提出建议。正常过程是:建立模型并对其进行训练。然后,我输入一个用户以及要为其返回的前k条推荐。

现在,如果我要为不在初始稀疏评分矩阵中的用户执行此操作,该怎么办?如果我为这个新用户提供的电影评分阵列比较稀疏,是否有一种简便的方法可以将其合并到模型中,而无需从头开始重新训练整个模型?

我知道基于内容的过滤用于解决CF的“冷启动”问题。即使我已经对此新用户有了一些评价,这是我唯一的选择吗?

现在,我正在研究加权交替最小二乘(WALS),最终我也想对SGD进行此操作。

2 个答案:

答案 0 :(得分:1)

我认为您正在寻找的答案是如何插入新项目/用户以进行矩阵分解协作过滤。此处已对此进行了讨论:How can I handle new users/items in model generated by Spark ALS from MLlib?以及用于查找示例解决方案的地方(带有一些代码示例)。它用于Spark ALS实施,但主要思想保持不变。

答案 1 :(得分:0)

  

我从未见过的一件事是如何为新用户和项目提出建议。

这也是一项艰巨的任务。在完全用户冷启动的情况下,必须使用附加数据来预先设置与其他(已知)用户相关的用户。典型的方法是使用人口统计数据预先群集用户,例如:

Safoury, Laila, and Akram Salah. "Exploiting user demographic attributes for solving cold-start problem in recommender system." Lecture Notes on Software Engineering 1.3 (2013): 303-307.

基本上,尝试为新用户提供建议的技巧是根据算法在训练阶段所看到的功能来描述它们。完整的商品冷启动也是如此。请注意完全和部分冷启动问题之间的区别。后一种情况描述了有关用户/项目的“足够”信息必须可用的问题。

  

是否有一种简便的方法将其合并到模型中,而无需从头开始重新训练整个模型?

是的,实际上有尝试实现这一目标。但是,这在很大程度上取决于您使用的分解方法。例如,您可以考虑这篇论文:

Luo, Xin, Yunni Xia, and Qingsheng Zhu. "Incremental collaborative filtering recommender based on regularized matrix factorization." Knowledge-Based Systems 27 (2012): 271-280.

但是,据我所知,没有可用的Python解决方案。

  

即使我已经对此新用户有了一些评价,这是我唯一的选择吗?

如果您对单个用户的用户评分很少,则通常无需使用其他信息即可获得实际结果。但是,结果因方法而异。在这种情况下,基本矩阵分解模型(例如,Koren和Bell)的效果不佳。考虑使用基于排名的MF方法(例如LightFM-https://github.com/lyst/lightfm),该方法还可以考虑内容信息。