1

我正在尝试使用 Mahout 向我们的电子商务网站添加推荐。我决定使用基于项目的推荐器,我有大约 60K 产品、200K 用户和 4M 用户产品偏好。我正在寻找一种通过离线计算项目相似度来提供推荐的方法,以便推荐器.recommend() 方法可以在 100 毫秒内提供结果。

DataModel dataModel = new FileDataModel("/FilePath");

_itemSimilarity = new TanimotoCoefficientSimilarity(dataModel);

_recommender = new CachingRecommender(new GenericBooleanPrefItemBasedRecommender(dataModel,_itemSimilarity));

我希望有人能指出一种方法或博客,以帮助我理解通过离线计算项目相似性的过程和挑战。另外,存储项目相似性的预先计算结果的推荐过程是什么,它们应该存储在单独的数据库中还是内存缓存中?

PS - 我计划在 10-12 小时内刷新用户-产品偏好数据。

4

2 回答 2

4

MAHOUT-1167在 Mahout 0.8 主干中引入(即将发布)一种在单台机器上并行计算相似度的方法。我只是提到它,所以你记住它。

如果您只是打算每 10-12 小时刷新一次用户产品偏好数据,那么最好有一个批处理过程,将这些预先计算的推荐存储在某个地方,然后从那里将它们交付给最终用户。我无法提供详细的信息或建议,因为这会根据许多因素而有很大差异,例如您当前的架构、软件堆栈、网络容量等。换句话说,在您的批处理过程中,只需遍历所有用户并为每个用户请求 10 条建议,然后将结果存储在某个地方以交付给最终用户。

于 2013-06-13T09:58:41.707 回答
1

如果您需要在 100 毫秒内响应,最好在服务器的后台进行批处理,其中可能包括以下作业。

  1. 从您自己的用户数据库(60K 产品、200K 用户和 4M 用户产品偏好)中获取数据。
  2. 根据数据的性质(参数数量、数据大小、偏好值等)准备数据模型。这可能是重要的一步。
  3. 在数据模型上运行算法(需要根据您的要求选择正确的算法)。推荐数据可在此处获得。
  4. 可能需要根据要求处理结果数据。
  5. 将此数据存储到数据库中(在我所有的项目中都是 NoSQL)

上述步骤应作为批处理过程定期运行。

Whenever a user requests for recommendations, your service provides a response by reading the recommendation data from the pre-calculated DB.

You may look at Apache Mahout (for recommendations) for this kind of task.

These are the steps in brief...Hope this helps !

于 2013-06-18T11:37:54.167 回答