如何处理推荐中的隐式数据


9

推荐系统保留对特定用户做出了哪些推荐以及该用户是否接受该推荐的日志。就像是

user_id item_id result
1       4       1
1       7       -1
5       19      1
5       80      1

其中1表示用户接受了推荐,而-1表示用户未响应推荐。

问题:如果我要根据上述日志类型向一堆用户提出建议,并且想最大化MAP @ 3分数,该如何处理隐式数据(1或-1)?

我的想法是将1和-1视为等级,并使用分解机类型算法预测等级。但是,鉴于隐式数据的不对称性,这似乎并不正确(-1并不意味着用户不喜欢该建议)。

编辑1 让我们在矩阵分解方法的上下文中考虑它。如果我们将-1和1视为评分,则会出现一些问题。例如,用户1喜欢电影A,其在潜在因素空间中在一个因素(例如具有光荣的背景音乐)中得分较高。系统会推荐在“光彩夺目的背景音乐”中得分也很高的电影B,但是由于某种原因,用户1太忙而无法查看推荐,因此我们将电影B评为-1。如果我们将1或-1均等对待,则可能不鼓励系统向用户1推荐具有光荣BGM的电影,而用户1仍然喜欢具有光荣BGM的电影。我认为这种情况应该避免。


-1并不意味着不喜欢是没有问题的。这只是区分某人看到该物品的一种方法。从这个意义上讲,它承载的信息多于缺少的值。它实际上可能会提高您的建议的准确性。根据建议中的距离度量标准,可以考虑将其从-1更改为较小的度量标准值,以免对距离产生太大影响。
cwharland 2014年

1
关于隐性反馈的规范论文是Hu,Koren和Volinsky。那里有很多好的建议,包括估计您对-1表示不喜欢或只是“看不见”的信心。
Trey 2014年

Answers:


5

您的系统不仅接受了推荐的培训,对吗?如果是这样,您的反馈回路就会很大。我希望您想从所有点击/观看中学习。

您建议不看项目是一个消极信号。我强烈建议您不要那样对待。不与某些事物进行交互几乎总是最好地视为无信息。如果您有明确表示不喜欢的信号,例如投反对票(或者观看了10秒钟的视频并停止播放),则可能是正确的。

我不会将此输入解释为类似评分的数据。(尽管在您的情况下,您可能还是会避开它。)而不是将它们视为权重,而这正是@Trey在评论中提到的Hu Koren Volinsky关于ALS的论文中的处理方法。这使您可以记录正向/负向交互的相对强度。

最后,我要指出的是,尽管很可能是您要找的这篇论文,但本文并没有提供负的权重。以这种方式扩展很简单。如果您能做到这一点,我可以为您提供一个简单的扩展,该扩展已经存在于我所知道的两个实现中,即SparkOryx


2
我认为,对已经被多次查看但从未选择过的项目施加轻微的负值是合理的。OP并不表示他们有权访问限定这些负面推论的数据,但我不会完全排除这种策略。负值的最佳大小可以从数据中确定。在recsys场景中,我从中获益匪浅。无论如何...您是否会建议用其他方法来区分一次看过和未选择过的项目与N次看过且从未选择过的项目(除了负归因)?
cwharland
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.