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

Collaborative Filtering adding new users and items

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

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

我知道基于内容的过滤是用来解决CF的"cold-start"问题的。这是我唯一的选择吗,即使我已经对这个新用户有了一些评分?

现在我正在研究加权交替最小二乘法 (WALS),最终我想对 SGD 也这样做。

我认为您正在寻找的是如何折叠 一个新的item/user 用于矩阵分解协同过滤的答案。这已经在这里讨论过: 以及可以找到示例解决方案的地方(带有一些代码示例)。它用于 Spark ALS 实施,但主要思想保持不变。

One thing I never see mentioned is how to make recommendations for new users and items.

这也是一项艰巨的任务。在完全用户冷启动的情况下,必须使用额外的数据来提前设置用户与其他(已知)用户的关系。例如,典型的方法使用人口统计数据来提前对用户进行聚类:

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.

基本上,尝试为完整的新用户提出建议时的技巧是根据算法在训练阶段看到的特征来描述他们。这同样适用于完整的项目冷启动。请注意完全冷启动问题和部分冷启动问题之间的区别。后一种情况描述了 "sufficient" 关于 user/item 的信息必须可用的问题。

is there an easy way of incorporating it into the model without re-training the whole model again from scratch?

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

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

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

Is that my only option even if I have some ratings for this new user already?

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