使用Mahout实现基于离线项目的推荐

时间:2013-06-12 18:08:24

标签: mahout recommendation-engine mahout-recommender

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

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

_itemSimilarity = new TanimotoCoefficientSimilarity(dataModel);

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

我希望有人可以指出方法或博客,以帮助我了解项目相似性的离线计算过程和挑战。另外,建议的程序是存储项目相似性的预先计算结果,它们是存储在单独的数据库中还是存储在内存中?

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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

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

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

    每当用户请求推荐时,您的服务都会通过读取预先计算的数据库中的推荐数据来提供响应。

    您可以查看Apache Mahout(获取建议)来完成此类任务。

    这些是简单的步骤...希望这有帮助!