我们现在有什么?- 我们正在使用 Mahout 的 GenericItemBasedRecommender 为使用 TanimotoCoefficientSimilarity 作为 ItemSimilarity 的用户获取推荐产品列表。
我们想从这里去哪里?- 当我们不关心产品类别但我们想知道的是产品类别特定的建议时,上述工作正常,即说如果用户一直在购买、浏览、喜欢等,特别是在男士和小工具类别中,我会然后想要在该特定类别中显示此用户推荐,并在 [X] 中为您推荐,在这种情况下,X 将被替换为男士或小工具。我们正在考虑以下几个选项来实现这一目标,我们需要一些线索/意见/反馈等,以确保我们朝着正确的方向前进。选项:
- 首先,我们必须转移到非tanimoto 版本来计算项目相似度,以便我们考虑用户购买、喜欢等,而不仅仅是查看/浏览数据。
找出特定用户的产品类别(这是我们需要指导的地方) - 我们的产品类别层次结构基本上是一棵树,我们需要知道我们将向用户展示树中哪些前 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)
第一类推荐产品:Item1(分数=2)、Item2(分数=4)
第二类推荐产品:Item3(分数=1)、Item4(分数=4)第二种选择:为每个类别创建一个基于用户行为(喜欢、购买、查看等)的用户集群,然后找出用户所属的前 4 个类别。不确定我们是否可以在 Mahout 中使用集群来实现这一点,但我认为我们可以离线进行。
请提供您的反馈/建议/线索/想法。
提前致谢!