【问题标题】:Mahout: Recommending Items for a user in particular product categoryMahout:为特定产品类别的用户推荐商品
【发布时间】:2013-08-26 21:02:01
【问题描述】:

到目前为止我们有什么? - 我们正在使用 Mahout 的 GenericItemBasedRecommender 为使用 TanimotoCoefficientSimilarity 作为 ItemSimilarity 的用户获取推荐产品列表。

我们想从这里去哪里? - 当我们不关心产品类别但我们想知道的是产品类别特定的推荐时,上面的工作正常,即假设用户一直在购买、浏览、喜欢等,特别是在男士和小工具类别中,然后我想在该特定类别中显示此用户推荐,在 [X] 中为您推荐,在这种情况下,X 将被男士或小工具替换.我们正在考虑以下几个选项来实现这一目标,我们需要一些线索/意见/反馈等,以确保我们朝着正确的方向前进。选项:

  1. 首先,我们必须迁移到非tanimoto 版本来计算商品相似度,以便我们考虑用户的购买、喜欢等,而不仅仅是查看/浏览数据。
  2. 确定特定用户的产品类别(这是我们需要指导的地方) - 我们的产品类别层次结构基本上是一棵树,我们需要知道我们将向用户展示树中哪些前 4 个节点(具有最佳推荐) .此外,如果我们说节点 X 是我们向用户显示的类别,节点 Y 是节点 X 的父节点,那么我们不希望在类别 Y 或任何父节点中显示用户产品。实现这一目标的几种方法:

    • 为每个用户计算叶级节点的项目相似度得分值的总和,并递归计算父节点直到根节点。现在在每个节点我们有 A = 相似性分数的总和 & B = 推荐的项目数,所以我们在每个节点也有 A/B=Value (V)。现在我们从树中挑选前 4 V 值并推荐给用户。这里的挑战是,如果我们尝试在请求期间在线计算此时间,我们将很难将整个请求的时间限制在 150 毫秒以下。一个例子:

       Root Level   -     Category12 (A=11, B=4) (category1 + category2)
                                              |
                         _____________________|_________________________
                       /                                                \
                      /                                                  \ 
      Leaf Level - category1 (A=6, B=2)                          category2 (A=5, B=2)
      

      类别 1 中的推荐产品:Item1(得分 = 2)、Item2(得分 = 4)
      第二类推荐产品:Item3(得分=1)、Item4(得分=4)

    • 第二个选项:为每个类别创建一个基于用户行为(喜欢、购买、查看等)的用户集群,然后找出用户所属的前 4 个类别。不确定我们是否可以在 Mahout 中使用集群来实现这一点,但我认为我们可以离线做到这一点。

请提供您的反馈/建议/线索/想法。

提前致谢!

【问题讨论】:

    标签: categories product mahout recommendation-engine mahout-recommender


    【解决方案1】:
    1. 如果您想对数据中的多个事物进行建模,我建议您使用 SVD 推荐器,而不是将 ALSWR 分解器设置为隐式反馈。完成后,您可以在数据中包含user,item,preferencepreference 值将是您的用户与项目的关联程度。您可以使用数字,例如购买是20,而视图只是2。我只是在这里抛出数字,我不知道什么最适合您的数据,因为您还可以按比例对事物进行建模,如果购买发生的可能性是视图的 30 倍,那么购买应该是比视图强 30 倍。

    2. Mahout 提供了一种通过 IDRescorer 影响推荐的方法。您在这里实现自己的逻辑并决定如何影响建议。例如,IDRescorer 将检查推荐候选人是否属于同一类别,如果是,则将分数提高 X。这里有一个来自Mahout in Action Book 的示例(link)(您一定要阅读) ,显示一个记分员。

    希望对你有帮助

    【讨论】:

    • Julian - 同意我们应该两者都做,但我们不确定用户如何知道向用户推荐哪些类别。我们实际上需要关于“实现此目标的几种方法”下的要点的帮助:谢谢。
    • 对于您的问题,我无能为力。我想说的是,向推荐者引入自定义逻辑的唯一方法是通过 IDRescorer 类的实现。另一件事,虽然有点 hacky,但会为每个用户生成 100-150 条建议,然后在特定给定点过滤掉你不需要的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 2021-07-22
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多