在工作中,我正在尝试基于Mahout的基于项目的CF包构建基于项目的推荐系统。这是我们正在处理的问题:
用户数:6,000,000 项目数量:200,000 偏好:10,000,000,000
如果我们的Hadoop集群中有数百台计算机,我们可以在几个小时内完成RecommenderJob。然而,问题是因为我们是一个小型创业公司,我们的Hadoop集群在这个阶段只有大约10台机器。理想情况下,我们希望每两天运行一次推荐工作。
为了理解问题的规模,我们在一小部分数据上应用了Mahout的基于项目的CF:
用户数:100,000 项目数:80,000 偏好:3,000,000
在我们的Hadoop集群上,RecommenderJob所需的时间约为10分钟。
我的问题是,鉴于我们的硬件限制(短期内不太可能改变),我们可以做些什么来加快Mahout基于物品的CF的速度?
答案 0 :(得分:0)
您似乎有推荐系统的标准缩放问题。在您的情况下,您应该将分析分成多个部分。
关键是,具有大量评级的项目之间的相似性不会发生很大变化。而这正是代价高昂的部分。这意味着您只能计算一次它们的相似度,并在很长一段时间后(几周,几个月?)再次进行计算。您可以评估他们在一周,两周等后的变化情况。然后您只需要计算每天评分较少的项目的项目 - 项目相似度 - 如果他们当然有新的评级!评价太少是推荐引擎领域的问题。我现在不会谈到这一点。
因此,当您拥有始终最新的项目 - 项目相似性列表时,您可以根据它们执行用户项目推荐。如果您的物品数量变化不大,那么这是一个恒定的时间操作。这可以在用户访问应用程序时实时完成。因此,无需为永远不会回来的用户计算建议。用户项目的预测评级基本上是由该项目相似性得分加权的该用户评定的所有项目的总和。您需要检查mahout是否提供