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

How to use secondary user actions with to improve recommendations with Spark ALS?

在使用 Spark Mllib ALS 时,有没有办法使用从用户点击流派生的辅助用户操作来改进推荐?

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

这是否意味着我需要为每个次要用户操作在具有 RDD(user,item,action) 的同一模型对象上调用 trainImplicit()?或者训练多个模型,根据每个动作检索建议,然后将它们线性组合?

对于其他上下文,问题的症结在于 Spark ALS 是否可以模拟辅助操作,例如 Mahout 的 spark 项目相似性作业。任何指针都会有所帮助。

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

一般情况下,ALS 不适用于多项操作。先上个图。我们在 ALS 中消耗多个动作的方式是将一个动作置于另一个之上。例如购买 = 5,查看 = 3。ALS 是在评级似乎很重要并且预测评级成为问题的时代设计的。我们现在知道排名更重要。在任何情况下,ALS 使用预测 ratings/weights 对结果进行排名。这意味着视图实际上没有告诉 ALS 任何东西,因为等级 3 意味着什么?像?不喜欢? ALS 试图通过添加正则化参数来解决这个问题,这将有助于确定 3 是否相似。

但问题比这更根本,它是用户意图之一。当用户查看产品时(使用上面的电子商务类型示例)涉及多少 "buy" 意图?根据我自己的经验,可能有none,也可能有很多。该产品是新产品,或者具有华而不实的图像或其他点击诱饵。或者我正在购物,在购买前先看 10 件东西。我曾经用一个大型 ecom 数据集对此进行了测试,发现没有正则化参数(与 ALS trainImplicit 一起使用)和动作权重的组合可以击败 "buy" 单独使用 事件的离线精度 .

因此,如果您正在使用 ALS,请先检查您的结果,然后再假设组合不同的事件会有所帮助。将两个模型与 ALS 一起使用也不能解决问题,因为从购买事件中你建议一个人买东西,从视图(或二级数据集)中你建议一个人查看一些东西。意图的基本性质没有解决。 recs 的线性组合仍然混合了意图,很可能会导致质量下降。

Mahout 的 Spark Item Similarity 所做的是将浏览量与购买相关联——实际上,它将主要操作(您明确了解用户意图的操作)与其他操作或有关用户的信息相关联。它建立了一个相关矩阵,实际上消除了那些与购买无关的观点。然后我们就可以使用数据了。这是一个非常强大的想法,因为现在几乎所有用户属性或操作(实际上是整个点击流)都可以用于制作推荐,因为相关性始终经过测试。通常几乎没有相关性,但没关系,这是一种从计算中删除的优化,因为相关性矩阵对 recs 的影响很小。

顺便说一句,如果您发现 Mahout 的 Spark Item Similarity 的集成与使用 MLlib ALS 相比令人望而生畏,我将捐赠一个端到端实现作为 Prediction.io, 的模板,所有这些都是 Apache 许可的开源。