我正在尝试使用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小时内刷新用户产品偏好数据。
答案 0 :(得分:4)
MAHOUT-1167引入了(即将发布的)Mahout 0.8主干,这是一种在一台机器上并行计算相似性的方法。我只是提到它,所以你记住它。
如果您只是每10-12小时刷新一次用户产品偏好数据,那么您最好只需要一个批处理过程,在某处存储这些预先计算好的建议,然后将它们发送到来自那里的最终用户。我无法提供详细信息或建议,因为这会因许多因素而有很大差异,例如您当前的架构,软件堆栈,网络容量等。换句话说,在您的批处理过程中,只需遍历所有用户,并为每个用户请求10条建议,然后将结果存储在某个地方以便交付给最终用户。
答案 1 :(得分:1)
如果您需要在100毫秒内响应,最好在服务器后台进行批处理,这可能包括以下作业。
上述步骤应作为批处理定期运行。
每当用户请求推荐时,您的服务都会通过读取预先计算的数据库中的推荐数据来提供响应。
您可以查看Apache Mahout(获取建议)来完成此类任务。
这些是简单的步骤...希望这有帮助!