在过去的几天中,我一直在与Mahout合作,以创建推荐引擎。
我正在处理的项目具有以下数据:

  • 1200万用户
  • 2M项目
  • 18M用户项 bool 建议

  • 我现在正在尝试使用我们所拥有全套产品的1/3(即1800万个建议中的600万个)。在我尝试的任何配置下,Mahout都提供了令人失望的结果。一些建议花了1.5秒,而另一些花了一分钟。我认为建议的合理时间应该在100毫秒左右。

    Mahout为什么工作这么慢?
    我正在使用以下JVM参数在Tomcat上运行应用程序(即使添加它们并没有多大区别):
    -Xms4096M -Xmx4096M -da -dsa -XX:NewRatio=9 -XX:+UseParallelGC -XX:+UseParallelOldGC
    

    以下是我的实验的代码段:

    用户相似度1:
    DataModel model = new FileDataModel(new File(dataFile));
    UserSimilarity similarity = new CachingUserSimilarity(new LogLikelihoodSimilarity(model), model);
    UserNeighborhood neighborhood = new NearestNUserNeighborhood(10, Double.NEGATIVE_INFINITY, similarity, model, 0.5);
    recommender = new GenericBooleanPrefUserBasedRecommender(model, neighborhood, similarity);
    

    用户相似度2:
    DataModel model = new FileDataModel(new File(dataFile));
    UserSimilarity similarity = new CachingUserSimilarity(new LogLikelihoodSimilarity(model), model);
    UserNeighborhood neighborhood = new CachingUserNeighborhood(new NearestNUserNeighborhood(10, similarity, model), model);
    recommender = new GenericBooleanPrefUserBasedRecommender(model, neighborhood, similarity);
    

    项目相似度1:
    DataModel dataModel = new FileDataModel(new File(dataFile));
    ItemSimilarity itemSimilarity = new LogLikelihoodSimilarity(dataModel);
    recommender = new GenericItemBasedRecommender(dataModel, itemSimilarity);
    

    最佳答案

    在Mahout社区的邮件列表的慷慨帮助下,我们找到了解决我的问题的方法。与解决方案有关的所有代码都提交给Mahout 0.6。可以在相应的JIRA ticket中找到更多详细信息。

    使用VisualVM,我发现性能瓶颈在于项目-项目相似度的计算中。 @Sean使用非常简单但有效的修复方法解决了此问题(有关更多详细信息,请参见SVN commit)

    此外,我们已经讨论了如何改进SamplingCandidateItemsStrategy以便更好地控制采样率。

    最后,使用上述修复程序对我的应用程序进行了一些测试。所有建议均用时不到1.5秒,绝大多数建议用时不到500毫秒。 Mahout每秒可以轻松处理100条建议(我没有试图强调它多于此)。

    关于performance - Apache Mahout性能问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8240383/

    10-16 21:29