0

在工作中,我正在尝试基于 Mahout 的基于 Item 的 CF 包构建基于 Item 的推荐系统。这是我们正在处理的问题:

用户数量: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 的基于 Item 的 CF 的速度?

4

1 回答 1

0

您似乎遇到了推荐系统的标准扩展问题。在您的情况下,您应该将分析分成多个部分。

  1. item-item相似度计算部分。
  2. 使用项目-项目相似度值的用户-项目推荐部分。

关键是,具有很多评分的项目之间的相似性并没有太大变化。而这正是代价高昂的部分。这意味着您可以只计算一次它们的相似度,并在很长一段时间(几周、几个月?)后再次计算。您可以评估一周、两周等后它们的变化量。然后,您只需要每天计算评分较少的项目的项目相似度——当然,如果它们有新的评分!在推荐引擎领域,评级太少本身就是一个问题。我现在不会讨论这个。

因此,当您拥有始终保持最新的 item-item-similarity 列表时,您可以根据它们进行 user-item 推荐。如果您的项目数量没有太大变化,那么这是一个恒定时间操作。这可以在用户访问应用程序时实时完成。因此,无需为永远不会回来的用户计算推荐。用户项目的预测评分基本上是该用户评分的所有项目的总和,按项目相似度得分加权。您需要检查 mahout 是否提供

于 2014-01-07T17:26:50.347 回答