需要澄清关于使用hadoop的mahout的用法

时间:2014-05-16 02:28:44

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

我目前在mahout中使用内存推荐apis实现推荐器。但是,我想使用hadoop转移到分布式解决方案,以便计算离线建议。这是我第一次使用hadoop,我正在寻找有关一些概念和用法的澄清。

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

  • 使用apache drill之类的东西,以便用用户和项目数据填充hdfs。

  • 使用mahout列车中的推荐作业来处理来自hdfs的数据。

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

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

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

  1. 我如何以内存实时推荐中使用的方式使用rescorer?

  2. 调用推荐职位的最佳方式是什么?

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

1 个答案:

答案 0 :(得分:2)

您可能正在谈论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组成。所以query =“item223 item344 item445 ......”。针对旧指标矩阵值的字段进行查询。您将获得物品ID的有序列表
  2. 一种可能对您有用的更简单的方法是使用Mahout 1.0-SNAPSHOT的/ examples文件夹中的工具或此处:https://github.com/pferrel/solr-recommender。它接收具有用户和项ID的唯一字符串的原始日志文件。它完成Hadoop上的所有工作,输出可由Solr直接索引或加载到DB中的CSV,如上所述。
  3. 我做演示网站(https://guide.finderbots.com)的方式是使用我的Solr网络应用程序集成,将指标矩阵放入数据库中,将类似的项目列表附加到我的项目集合中。所以item123在其指标字段中得到item223 item643 item293 item445 ....索引集合之后,查询是=“item223 item344 item445 ...” - 用户的首选项目。

    以下是三种重新校正的方法:

    1. 将元数据与查询混合。所以你可以针对指标字段进行查询=“item223 item344 item445 ...”并针对“流派”字段进行“SciFi”。这为您提供了查询中的混合协同过滤和元数据,您可以想象,recs基于用户的首选项,但偏向于“SciFi”。将item + indicators + metadata添加到索引中后,还有很多其他有趣的事情可以做。
    2. 按元数据过滤回复。如果你愿意,你可以得到没有偏差但是过滤的recs。使用Solr query =“item223 item344 item445 ...”对指示符字段和“SciFi”作为针对“流派”字段的过滤器。在这种情况下,除了“SciFi”之外你什么都没有,#1你将主要获得“SciFi”
    3. 根据您了解的有关用户,上下文或项目的其他内容,获取有序的recs列表并以您喜欢的任何方式对其进行重新排序。通常这些可以编码为Solr查询并使用一个查询完成,但是也可以在返回recs之后进行重新排序和过滤。您必须编写该代码,它不是内置的。
    4. 有趣的是,您可以将过滤器,元数据字段和用户首选项与Solr称为“增强”值的内容混合,以获得各种重新分配。 Solr甚至可以使用位置来查询,倾斜或过滤。

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