参考论文

https://arxiv.org/ftp/arxiv/papers/1205/1205.2618.pdf

背景介绍

在常规的推荐系统统计算法中,我们通常是通过现有数据集去计算获取用户对所有商品的得分,但大多情况下我们只需要关系极少数的商品的优先级,而不是所有的商品的排序,并且一些基于矩阵分解和KNN的推荐算法,是没有对排序方法进行优化的,而BPR损失函数能够满足我们的需求。

分类

显式反馈:用户对物品的评分,如电影评分
隐式反馈:用户对物品的交互行为,如浏览,购买等,现实中绝大部分数据属于隐式反馈,可以从日志中获取。
BPR是基于用户的隐式反馈,为用户提供物品的推荐,并且是直接对排序进行优化。隐式反馈的优点是从用户的一系列行为中去隐式地挖掘出用户的偏好,相比于显式数据能过够发现隐含的关系并且对数据集的要求更低。

思想

BPR Loss 的思想很简单,就是让正样本和负样本的得分之差尽可能达到最大,是一种个性化推荐。利用矩阵分解和用户商品评分矩阵,通过贝叶斯最大后验概率进行优化。

其训练的数据集是多个三元组的的条目,其含义表示的是用户u对i的选择优先级要高于j。在BPR算法中,我们将任意用户u对应的物品进行标记,如果用户u在同时有物品i和j的时候点击了i,那么我们就得到了一个三元组,它表示对用户u来说,i的排序要比j靠前。

如果对于用户u来说我们有m组这样的反馈,那么我们就可以得到m组用户u对应的训练样本。其中用到了如下假设(完整性,反对称性,传递性):

根据提供数据所形成的用户物品评分矩阵往往是稀疏的,即有很多未知项目,通过矩阵分解的方法分解出用户矩阵W和物品矩阵H,根据这两个矩阵得到未知项目的评分:

由于BPR是基于用户维度的,所以对于任意一个用户u,对应的任意一个物品i我们期望有:

最终我们的目标,是希望寻找合适的矩阵W和H,让相似。

参数学习

根据贝叶斯后验概率来估计参数,如下:

其中可以认为是一个排序,用户对商品偏好的排序。由于数据集是由三元组组成的,所以我们可以将

其中:

获取数据集即通过自举(bootstrap)的方式获取数据集,先从用户做出过交互的条目中选取一件商品作为正例,然后随机从其他为交互的商品中选取反例(这里认为有过交互的商品为正例,否则为负例)。

此外,我们假设

由此我们可以得到对数形式的BPR-OPT的公式为:

将该公式作为损失函数进行梯度下降的训练:

其中:

效果评估

AUC

相比于典型的基于用户的随机梯度下降方法和BPR,BPR的收敛速度和效果都要更优。

对于X_{uij}的结果也可使使用其它的方法,这里使用最简单的直接相减,我们可以看出是用对i的兴趣分数减去j的兴趣分数,由于i为正例,j为负例,直接相减是有效的。

总结

(1)BPR的出发点是优化用户对商品的偏好排序,这使得它可以和其他推荐系统方法合并使用。

(2)通过用户商品评分矩阵的分解实现类似于embedding的操作,从而获取用户的隐式评分。

(3)通过贝叶斯最大后验概率估计进行参数学习。

(4)使用bootstrap的方法sample数据集。

(5)隐式的协同过滤推荐算法。