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

nee*_*aji 5 mahout-recommender apache-spark apache-spark-mllib

有没有办法在使用Spark Mllib ALS时使用从用户点击流派生的次要用户操作来改进建议?

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

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

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

pfe*_*rel 12

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

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

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

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

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

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