5.2 Implicit Feedback and Ranking Models
到目前为止,我们对(基于模型的)推荐系统的讨论集中在使用通过均方误差来预测具有实际数值的互动,例如评分。我们用最小二乘误差来训练模型预测数据中的真实数值, 这些都是回归的方法。
正如我们在考虑点击、购买或评分数据(第 4.3 节)时, 基于相似度开发了单独的方法一样,本节我们考虑如何调整基于回归的方法来处理二分类问题(例如是否会点击,和是否会购买)。
一个朴素的想法是,就像我们在第 3 章中介绍的逻辑回归的时的那样, 将模型输出(eq. (5.10))传递给sigmoid 函数,正交互与高概率相关,负交互与低概率相关。
但是,在处理点击或购买数据时,我们应该考虑到未点击或未购买的商品不一定是负面交互——事实上,未点击或未购买的商品正是我们打算推荐的商品。
针对这个问题,已经有几种技术被提出, 来解决这种数据场景下的问题。 通常这种情景被称为 one-class 推荐, 意思是, 只有 positive (正向)行为可以被观察到 (点击,购买,浏览)。 这种场景也被称为 隐式反馈推荐 (implicit feedback recommendation)。 意思是负向反馈(不喜欢,不愿意购买) 只能被间接的观测到。
5.2.1 Instance Re-weighting Schemes
实在不知道怎么翻译这个标题
有一类方法通过给不同的反馈分配不同的权重, 来解决这类问题。 权重大小依据对positive 和 negative "信心" 来决定。
(Collaborative filtering for implicit feedback datasets. In: International Conference on Data Mining, 2008) 中对正向反馈进行了加权, 权重根据用户收听或者观看一个节目的次数来决定。 负向权重依旧全部设置为 0 ()。 最后, 任务的最终目标依旧是构建一个二元分类模型, 输出 :
模型目标和 (5.14)也很类似 (为了免得翻, 我直接把5.14 写到这里了),
也就是利用 用户和商品的隐式特征(latent featrue) 来预测 , 当然这里也加入了惩罚项 (regularized) 。 一个比较大的变化是, 这里对每条记录(observation) 根据对其信心 confident 做了赋权处理,赋权函数是 。
有时候会省略, 因为他就是个常数,对结果没有影响。
其中 权重函数, 作用在每条记录上,一般都是单调函数, 常见的形式有:
其中 和 都数据超参数 (hyperparameters)。 注意 会让负向实力有一个比较小, 但是非0 权重; 对于正向数据, 赋予它们的权重会根据“信心”而定, 比如点击次数, 观看次数等这些代表链接强度的变量。
(One-class collaborative filtering. In: International
Conference on Data Mining, 2008) 提供了类似的方法,但是它们是对负向记录加了权重。 他们提了多种方法, 其中两种是:
第一种方法(被称为“用户导向”赋权)建议: 当该用户和很多商品已经发生关系以时, 负向权重应该增加(符合直觉, 都选了很多商品, 就是不选你, 不喜欢你的概率就是大)。 第二个方法建议: 当该商品和较少的用户发生链接时, 负向权重增加 (无人问津的商品, 大概率是被嫌弃)
虽然上面的方法都数据启发式方法, 但是根据 (Collaborative filtering for implicit feedback datasets. In: International Conference on Data Mining, 2008) 和 ( One-class collaborative filtering. In: International Conference on Data Mining, 2008) 的实验, 这些简单的方法可以带来很好的效果提升。
5.2.2 基于贝叶斯的个性化排序 Bayesian Personalized Ranking
虽然上述重新加权方案证明了在隐式反馈场景下,仔细处理“负面”和“正面”反馈的重要性,但它们最终优化的是回归目标,因此仍然寻求将“负面”分数分配给未见过的样本。
对这种方法的有一类反对意见: 看不见的实例正是我们想要推荐的实例,因此我们不应该让模型给它们分配负分。 一个较弱的假设可能会使用另外一种假设: 虽然未见实例的分数应该低于正实例,但不一定有负分数。也就是说,我们知道用户喜欢的项目比未见过的项目“更正向”,但未见过的项目仍然可能有正向的分数。
(Bayesian personalized ranking from implicit feedback. In: Uncertainty in Artificial Intelligence) 2012 在排序的时候, 借用了上述思想。
类似的 贝叶斯个性化排序 (Bayesian Personalized Ranking, BPR) 背后的原则就是:生成一个有序列表, 比较正向的物品会排在前面。 这种方法目标是训练一个预测器 , 它代表了用户 对 物品 , 的喜爱程度 (有点像排序函数):
如果我们知道是正向的, 而物品 是负向或者未知的, 那么一个好的模型就会让 的值为正数。 这种基于两两对象之间比较结果的模型,称之为 pairwise 模型。 有很多模式, 其中最直接的一个选择是比较用户对两个物品喜爱程度, 也就是:
而 可以来自于隐变量模型, 比如之前我么说的模型分解:
注意, 这里我们并不在意 自身的正负性, 而是关注它和 的相对大小。
有了以上铺垫, 我们现在可以定义模型的目标: 当物品 为正向, 是一个没有见过的商品是, 应该输出正值. 当模型工作再整个数据集上时,我们希望统计模型的正确率, 对于任意一个特定用户, 我们可以使用 AUC (Area Under the ROC Curve, 参考 一图读懂 ROC Curve, AUC):
对于所有用户,我们使用 (5.26) 在所有用户上的均值:
AUC 值位于 0到1 之间。 当 AUC = 1 时, 意味着所有预测都是正确的,而ACU =0.5 意味着模型预测等于瞎猜。
在实际优化上面的等式时, 有2个问题。 首先, 不太可能把所有的 三元组都抽取出来。 一般来说,每个正向例子,都会配有固定个数的负向(没用交互的关系)例子, 负向例子通过随机采样的到。
其次, (5.26) 是一个阶梯函数(step function), 它的梯度是0 ,很难对齐进行梯度下降优化。 有个办法是把 阶梯函数 环境一个可微函数, 比如 sigmoid :
因为 , 所以我们可以将其解释为概率: 比起物品 用户 更喜欢物品 的概率。
经过变化以后, BPR 的目标函数可以写成:
其中 代表惩罚项, 可以使用二范数: 作为惩罚项, 。 对这个目标函数中 进行求导可得:
对于其他项的求解与此类似, 在实际工作中,一般使用专门的库函数进行求解。