如何使用辅助用户操作来改进Spark ALS的建议?

时间:2015-07-15 13:46:48

标签: apache-spark apache-spark-mllib mahout-recommender

使用Spark Mllib ALS时,是否可以使用从用户点击流派生的辅助用户操作来改进建议?

我已经完成了这里提到的显式和隐式反馈示例:https://spark.apache.org/docs/latest/mllib-collaborative-filtering.html对train()和trainImplicit()方法使用相同的评级RDD。

这是否意味着我需要在同一模型对象上使用RDD(用户,项目,操作)为每个辅助用户操作调用trainImplicit()?或者训练多个模型,根据每个动作检索推荐,然后线性组合它们?

对于其他背景,问题的关键是Spark ALS是否可以模拟像Mahout的火花项目相似性工作这样的辅助操作。任何指针都会有所帮助。

1 个答案:

答案 0 :(得分:12)

免责声明:我使用Mahout的Spark Item Similarity。

ALS一般不适用于多个操作。首先是一个例子。我们在ALS中使用多个动作的方式是将一个重量放在另一个之上。例如,buy = 5,view = 3. ALS是在评级看起来很重要的时候设计的,并且预测它们就是问题。我们现在知道排名更重要。在任何情况下,ALS使用预测的评级/权重来对结果进行排名。这意味着一个视图真的告诉ALS没什么,因为3的评级意味着什么?喜欢?不喜欢? ALS尝试通过添加正则化参数来解决这个问题,这将有助于确定3是否相似。

但问题比这更基本,它是用户意图之一。当用户查看产品时(使用上面的ecom类型示例)多少" buy"涉及意图?根据我自己的经验,可能没有,也可能有很多。该产品是新的,或有一个华丽的图像或其他clickbait。或者我在购物之前购物并看10件事。我曾经用大型ecom数据集对此进行了测试,发现没有正则化参数(与ALS trainImplicit一起使用)和动作权重的组合,这些权重将超过"购买"事件仅使用

因此,如果您使用的是ALS,请在假设组合不同事件有所帮助之前检查您的结果。使用ALS的两个模型并不能解决问题,因为购买活动时你建议一个人买东西,从视图(或辅助数据集)你建议一个人查看一些东西。意图的基本性质没有得到解决。 recs的线性组合仍然混合了意图,并且可能很好地导致质量下降。

Mahout的Spark项目相似性的作用是将视图与购买相关联 - 实际上它将主要操作(您清楚了解用户意图,与其他操作或有关用户的信息)相关联。它构建了一个相关矩阵,实际上可以清除那些与购买无关的视图。然后我们可以使用这些数据。这是一个非常强大的想法,因为现在几乎任何用户属性或动作(实际上是整个点击流)都可以用于制作rec,因为总是测试相关性。通常几乎没有相关性,但是没关系,它是从计算中删除的优化,因为相关矩阵对recs的添加非常少。

顺便说一句,如果你发现与使用MLlib ALS相比,整合Mahout的Spark项目相似性令人生畏,我即将捐赠一个端到端的实现作为Prediction.io,的所有模板。这是Apache许可的开源。