【问题标题】:How to write recommendation on Mahout Spark如何在 Mahout Spark 上写推荐信
【发布时间】:2018-02-04 19:28:58
【问题描述】:

Mahout 0.13.0 / java 8

我是 Mahout 的新手,并试图了解如何使用 Mahout 实现推荐引擎。到目前为止我知道..

Mahout 提供 3 种类型的过滤 -

  1. 协同过滤(非基于 Hadoop)
  2. 分类(基于 Hadoop)
  3. 集群(基于 Hadoop)
  4. 基于内容的过滤

为了开始实施我的第一个建议,我从无需 Hadoop 即可轻松实施的协作过滤开始。

协同过滤 -

  1. 基于用户的推荐
  2. 基于项目的推荐
  3. 倾斜一个
  4. 还有更多...

Mahout 接口:

1.数据模型 2. 用户相似度 3.项目相似度 4. 用户邻里 5. 推荐人

我了解它的组成部分,并使用相似性和邻域的多种组合编写了基于用户和项目的推荐。

问题:

  1. 由于基于 Map-Reduce 的协同过滤,Mahout 是否在 0.13.0 版本中完全弃用 Map-Reduce?所有协同过滤算法都被弃用了吗?那有什么选择呢?是因为 Map-Reduce 的性能比 Spark 慢吗?
  2. 我检查了,Mahout 还通过SparkFlink 提供支持。 Mahout spark 提供 2 种类型的过滤 -> spark 项目相似度spark 行相似度。 但我还没有找到任何基于 java 的示例来在 java 中创建推荐。
  3. 可能 Mahout Spark 与 Scala 的兼容性更好,但是我们可以在 Java 中编写基于 spark 项相似度和 spark 行相似度的推荐引擎吗?也推荐一些例子。
  4. Mahout Spark 可以在没有 Hadoop 的情况下独立运行吗?到目前为止,我知道 Spark 是 Hadoop 的替代品,我们可以在其中进行实时处理。除了 ma​​hout-spark_2.10-0.13.0.jarma​​hout-spark_2.10-0.13.0-dependency-reduced.jar 之外,我需要添加哪些库?
  5. Mahout spark 与独立的 Apache Spark 不同?我也在考虑使用独立的 Apache Spark。

谁能帮我解释一下。

【问题讨论】:

    标签: java hadoop apache-spark mahout mahout-recommender


    【解决方案1】:

    实际上,@rawkintrevo 谈到的新推荐算法存在于一个基于 Apache PredictionIO 的端到端交钥匙系统中,称为 Universal Recommender。 PIO 带有一个 Java SDK。一些链接:

    Apache Mahout、Apache PredictionIO、Spark 和 Universal Recommender 都是用 Scala 编写的。 UR 有一个 Java 端口,但它没有维护,也不是真正需要的,因为您可能需要的所有选项都作为配置参数公开,并且有很好的文档记录。

    通过实时发送数据和进行实时查询进行通信的方式是通过简单的 REST 调用或使用 PIO SDK 之一,其中包括 Java。

    UR 支持基于用户、基于项目、购物车(基于项目集)、基于多模态数据的推荐(使用许多不同的用户指标或事件)。它还支持一组丰富的业务规则。

    除了输入数据并决定配置,无需编写任何内容,剩下的就是安装和设置。

    【讨论】:

    • 谢谢@pferrel。我有一个与推荐相关的通用问题。在任何推荐框架中,我们是否需要一次又一次地用训练数据训练机器,如果是,那么在这里训练机器有什么意义。我假设一旦机器在训练集上足够成熟,我们可以简单地要求新的推荐,而无需在一段时间内再次训练。
    • 除非重新训练模型,否则模型无法考虑添加到目录中的新项目。一般来说,训练周期与添加项目的频率成正比。对于新闻培训可能每天进行几次,对于固定库存,可能只是随着新用户的口味变化而增加,因此每隔几个月。对于一个典型的电子商务推荐者来说,它可能会每周一次为新项目留出一些时间来获得一些互动(购买、阅读、浏览等)。
    【解决方案2】:

    1) Map Reduce 已在 0.10.0 中完全弃用。 “新 Mahout”是一种数学表达的 Scala DSL,它从引擎中抽象出来——例如相同的 Scala 代码应该能够为 Flink/Spark/Other Engines 编译。是的,这是基于性能。

    2) Java API 没有做太多的工作,但是我听说有人在做这方面的工作。

    3.) 我想您是在问是否可以用 Java 编写 Spark 推荐引擎。答案是肯定的。但实际上,我的意思是,我没有在 scala / Java 之间进行大量移植,但理论上你应该能够将 Scala 函数/类导入到你的 Java 代码中? This Link 展示了更多关于从头开始编写推荐程序的内容——尽管它是在 Scala 中,但您需要将其移植到 Java(如果您这样做,请随时打开 PR,我们会将其作为示例包含在内) )。

    4.) 是的,它可以。 This Link 描述了如何在 Zeppelin 中使用 Mahout 设置 Spark,但任何设置的原则都相同(例如,您需要哪些 jar 以及您需要调整哪些 SparkConf) iirc,你需要 mahout-spark、mahout-math、mahout-math-scala。 (减少了 spark-dependency,您只需要使用本地 shell 程序,例如 Zeppelin 或 Mahout Spark Shell)。

    5.) 是的,Mahout 是一个在 Spark 或其他分布式引擎上运行的库。

    【讨论】:

    • 感谢@rawkintrevo 的回答。能否请您告诉我是否可以在 Spark 中使用 Solr 作为数据源?
    • 如果您编写自己的推荐器,您可以使用任何东西作为数据源,Solr 提供了 Spark 读/写库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 2017-11-14
    • 2014-06-06
    • 1970-01-01
    相关资源
    最近更新 更多