【问题标题】:How to use secondary user actions with to improve recommendations with Spark ALS?如何使用辅助用户操作来改进 Spark ALS 的推荐?
【发布时间】:2015-10-04 14:27:07
【问题描述】:

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

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

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

对于其他上下文,问题的关键在于 Spark ALS 是否可以对诸如 Mahout 的 spark 项目相似性作业之类的辅助操作进行建模。任何指针都会有所帮助。

【问题讨论】:

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


    【解决方案1】:

    免责声明:我使用 Mahout 的 Spark 项目相似性。

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

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

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

    Mahout 的 Spark Item Similarity 所做的是将视图与购买关联起来——实际上,它将一个主要操作(您清楚了解用户意图的操作)与有关用户的其他操作或信息关联起来。它建立了一个相关矩阵,实际上清除了那些与购买无关的观点。然后我们就可以使用这些数据了。这是一个非常强大的想法,因为现在几乎任何用户属性或操作(实际上是整个点击流)都可以用于制作记录,因为始终会测试相关性。通常几乎没有相关性,但没关系,这是一种从计算中移除的优化,因为相关性矩阵对记录的增加很少。

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

    【讨论】:

    • 感谢帕特的回答。
    • 我想借此机会赞扬您维护的涵盖推荐人的内容丰富的博客。我还浏览了您关于实现多模式通用推荐器的博客文章,但正如您所猜测的,我对集成 Mahout 的 spark 项目相似性的前景感到畏惧。使用 Spark Mllib 确实让生活更轻松。当您说端到端的实现时,您是否打算捐赠一个涵盖整个 lambda 架构的实现?
    • 是的,PredictioIO 实现了 Lambda 架构,推荐器是使用该架构的模板。具体来说,它使用 Elasticsearch 来提供查询服务。全部在 Apache 许可下。
    • 太棒了!这绝对是我在生产中部署 mahout 的起点。再次感谢。
    猜你喜欢
    • 2017-05-05
    • 1970-01-01
    • 2017-07-09
    • 2015-05-21
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 2020-07-04
    相关资源
    最近更新 更多