【问题标题】:How to speed up Mahout item-based Recommender system?如何加速 Mahout 基于项目的推荐系统?
【发布时间】:2015-06-29 19:04:56
【问题描述】:

我正在读取大约 700 万行数据,当我重新启动我的应用程序时,加载所有内容需要将近两分钟。我正在尝试找出加快速度的最佳方法,以便最多只需要几秒钟即可重新启动应用程序。以下是我希望加快速度的代码以及当前所需的时间:

// Creating data model - this takes about 1.77 minutes
DataModel datamodel = new FileDataModel(new File("datafile"));

// ItemSimilarity object - this takes about 1 millisecond
ItemSimilarity similarity = new TanimotoCoefficientSimilarity(datamodel);

// Recommender - this takes about 3 milliseconds
ItemBasedRecommender irecommender = new GenericBooleanPrefItemBasedRecommender(datamodel, similarity);

// List of Recommendations - this takes about 365 milliseconds
List<RecommendedItem> irecommendations = irecommender.mostSimilarItems(item, amount);

我想知道是否:

  • 有一种方法可以将DataModel 输出到另一个文件,这样我就可以直接读取它,而不必每次都创建它?
  • 如果可以的话,是否可以将ItemSimilarity 中的数据输出到另一个文件,然后将其读入,而不是每次都创建DataModel 并计算ItemSimilarity

【问题讨论】:

    标签: mahout recommendation-engine mahout-recommender


    【解决方案1】:

    你的第一个问题

    有一种方法可以将 DataModel 输出到另一个文件,这样我就可以 只需阅读它,而不必每次都创建它?

    是的,你可以序列化它。但请注意序列化的潜在问题(请参阅http://www.ibm.com/developerworks/library/j-5things1/)。您可能会发现有一些速度改进,但它们可能没有您想象的那么显着。

    另一种选择是创建一个数据库来存储您要加载的数据。一旦您存储了数据,您就可以在开始项目时将其加载到内存中。使用这种方法,您会看到应用程序的第一次运行很慢(因为您的函数从数据库中获取数据并将其存储在内存中)。由于数据在内存中,因此对数据的每个操作都会很快。

    您可以使用内存中的数据库,例如 HSQLDB、关系数据库或对象数据库——只要您满意。我可能会查看一个对象数据库 - 您可以将对象直接加载到内存中,这可能比将数据保存在关系数据库中更快,因为您必须在创建时将每个单独的字段映射到对象变量中。

    你的第二个问题

    如果可以,那么是否可以从 ItemSimilarity 到另一个文件,只需读取它而不是 每次都创建 DataModel 并计算 ItemSimilarity?

    您也可以将其序列化。同样,在使用序列化持久化数据时需要小心。还值得考虑将其保存到数据库中,然后在程序首次启动时将其加载到内存中。

    在不了解您的计划的情况下无法提供最佳选择。是为了生产,研究,还是只是搞砸。首先尝试序列化,但请注意在 db 或序列化中与磁盘的任何交互都很慢。

    希望对您有所帮助。

    【讨论】:

    • 感谢您的帮助!这将用于生产。自从我发布此内容以来,我一直在将所有内容插入数据库,然后按照您的建议将其读入内存。我正在尝试使用 ReloadFromJDBCDataModel 来查看它是否能满足我的需求。
    • 好吧,祝你好运,让我知道你如何使用 ReloadFromJDBCDataModel 方法
    猜你喜欢
    • 1970-01-01
    • 2011-09-09
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多