大型数据库的实用协同过滤应用

机器算法验证 机器学习 大数据 推荐系统
2022-04-09 12:30:13

我正在为一个包含超过 100,000 个项目的大型数据库设计一个基于项目的协同过滤。

我的问题是整个过程在实践中是如何工作的,因为该算法需要很长时间来评估整个效用矩阵并找到最近的邻居。另一方面,用户不断评估(和重新评估)项目并要求实时推荐。

我采用的策略是以一定的周期离线运行算法,同时为每个项目使用一组固定的 NN。这种方法的问题在于,推荐总是基于项目之间过时的关系,这可能导致不精确的推荐,尤其是在用户评价非常动态变化的情况下。

这是一个好策略吗?这个问题一般是怎么解决的?

1个回答

一个简单的方法是:

假设您有 5 个可以训练的项目和 3 个您推荐的项目:

1)在活动项目和训练项目之间创建一个similarity matrix,因此您的相似度矩阵为 5 x 3。相似度可以仅基于项目属性或/和其他用户在这些项目上的活动。

2) 每次用户访问该站点时,您都​​会获取他们的评价,假设它们的范围从 1 到 10,并且看起来像这样:[10,4,10,3,1].

3) 将评估分解为二进制矩阵,例如:

eval_10 => [1,0,1,0,0] 

4)item_scores = eval_10 * similarity

项目分数现在是 1 x 3,其中分数表示:与用户排名 10 的项目相似的项目,你可以这样做 9 并赋予较小的权重,1 并赋予负权重。并总结分数。

如果您能够快速处理用户操作(我知道这可能很棘手),那么您的建议是非常好的实时代理。关键是您不必一遍又一遍地重新计算相似度矩阵。也许 24 小时一次就足够了。

这是一种非常简单的方法,但我已经非常成功地使用了它。希望这可以帮助。