【问题标题】:Need clarification about usage of mahout with hadoop需要澄清有关在 hadoop 中使用 mahout
【发布时间】:2014-07-04 16:41:54
【问题描述】:

我目前使用内存推荐 API 在 mahout 中实现了推荐器。但是,我想转向使用 hadoop 的分布式解决方案,以便计算离线推荐。这是我第一次使用 hadoop,我正在寻找关于一些概念和 api 用法的说明。

目前,我对hadoop的了解很少,我认为正确的做法如下:

  • 使用 apache Drill 之类的东西来使用用户和项目数据填充 hdfs。

  • 在 mahout train 中对来自 hdfs 的数据使用推荐作业。

  • 将 hdfs 中的结果数据转换为 solr 使用的索引分片

  • 使用 solr 向用户群提供建议

但是,我正在寻找有关此设计的几个方面的说明:

  1. 如何以内存实时推荐中使用的方式使用记分器?

  2. 调用推荐作业的最佳方式是什么?

除了这两个之外,我还有其他问题,但这些问题的答案将是一个巨大的帮助。

【问题讨论】:

    标签: hadoop machine-learning bigdata mahout mahout-recommender


    【解决方案1】:

    您可能在谈论 Mahout + Hadoop + Solr 推荐器。此方法以几种不同的方式处理重新评分。

    基本的推荐器可以用两种方式组合起来:

    1. 将数据以(用户 ID、项目 ID、偏好权重)的形式输入 HDFS 后,对数据运行 ItemSimilarityJob(使用 LLR 相似度,这通常是最好的)。它将创建所谓的指标矩阵。这将是一个项目 id 到项目 id 的稀疏值矩阵,指示任何两个项目之间的相似度大小。然后,您必须将其转换为 Solr 可以索引的值。这意味着将内部 Mahout 整数 ID 转换为一些唯一的字符串表示形式,这可能是它们一开始的样子。这看起来像 (item123,item223 item643 item293 item445...) 作为 CSV。所以两个 Solr 字段,第一个是项目 id,第二个是相似项目的列表。所有 id 必须是文本标记。然后,推荐查询是一个 Solr 查询,由特定用户表现出偏好的项目 id 组成。所以查询=“item223 item344 item445 ...”。针对旧指标矩阵值的字段进行查询。您将返回一个有序的项目 ID 列表
    2. 可能对您有用的更简单的方法是使用 Mahout 1.0-SNAPSHOT 的 /examples 文件夹中的工具或此处:https://github.com/pferrel/solr-recommender。它接收具有用户和项目 ID 的唯一字符串的原始日志文件。它在 Hadoop 上完成所有工作以输出 CSV,这些 CSV 可以由 Solr 直接索引或加载到如上所述的数据库中。

    我创建演示站点 (https://guide.finderbots.com) 的方式是使用我的 Solr Web 应用程序集成,将指标矩阵放入数据库中,将类似的项目列表附加到我的项目集合中。所以 item123 在其指标字段中得到了 item223 item643 item293 item445...。为集合建立索引后,查询为 = "item223 item344 item445..." -- 用户的首选项目。

    以下是重新评分的三种方法:

    1. 将元数据与查询混合。因此,您可以对指标字段执行 query = "item223 item344 item445..." 对“流派”字段执行“SciFi”。这使您可以在查询中混合协同过滤和元数据,并且您可以想象,recs 基于用户的偏好,但偏向于“SciFi”。将 item+indicators+metadata 放入索引后,您还可以做很多其他有趣的事情。
    2. 按元数据过滤记录。如果需要,您可以获得不倾斜但过滤的记录。使用 Solr 查询 = "item223 item344 item445..." 针对指标字段和 "SciFi" 作为针对 "genre" 字段的过滤器。在这种情况下,您只会得到“SciFi”,而 #1 您会得到大部分“SciFi”
    3. 取回您的有序记录列表,并根据您对用户、上下文或项目的了解以任何您喜欢的方式对其进行重新评分。通常这些可以编码到 Solr 查询中并使用一个查询完成,但也可以在返回 recs 后完成重新排序和过滤。您必须编写该代码,它不是内置的。

    有趣的是,您可以将过滤器、元数据字段和用户偏好与 Solr 所谓的“提升”值混合在一起,以获得各种重新评分。 Solr 甚至可以使用位置来查询、倾斜或过滤。

    注意:您不必担心 Solr 分片。 Solr 将直接索引大多数 DB 和 HDFS,但只有 index 被分片。如果您有一个非常大的索引,则对索引进行分片,如果每秒有很多查询(或用于故障转移),则复制它。 Solr 查询通常非常快,所以在您拥有一个正常运行的系统之后我会担心这一点,因为它是一个配置,不应该受到您工作流程的其余部分的影响。

    【讨论】:

    • 考虑到应用程序的要求,我认为最适合我的方法是选项 1 和选项 3。您对我应该如何调用推荐流程有任何想法吗?是否应该将其设置为 cron 作业?
    • 使用 Solr 和 Mahout,您有两个过程,1) 通过创建指标矩阵来训练推荐器。如果您有将用户首选项放入日志文件的后台任务,则可以使用 cron 作业来“重新训练”,但这比您想象的时间紧迫。一旦你有了 Mahout 的输出,就有 Solr 索引它。除非指标矩阵中有使用数据,否则您无法推荐某项内容。 2)查询的是用户偏好。这甚至可以实时收集。当用户喜欢、购买、评价时,无论您认为是什么指标,都会进入您的查询。获取最新数据。
    猜你喜欢
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 2012-07-18
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多