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



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

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

_itemSimilarity = new TanimotoCoefficientSimilarity(dataModel);

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

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

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

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

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

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

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

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

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

对于这种任务,您可以查看Apache Mahout(用于推荐)。

这些是简单的步骤…

相关内容

  • 没有找到相关文章

最新更新