BPR,Bayesian Personalized Ranking,即贝叶斯个性化排序。虽然BPR是在2009年提出的算法,站在2018年的尾巴上看,似乎有些老古董了,但这丝毫不妨碍它活跃在推荐领域的舞台上。
最近阅读的一些文献中频繁出现基于BPR的优化方法,在求知欲的驱使下,看到了它的原文,即参考文献[1],下文为记录对该算法的学习过程和相关学习心得。
BPR利用的是用户的隐式反馈来表达关于基于当前用户的项目偏序关系。这种偏序关系的构建思想可简要概括为:若用户对物品
有交互记录(点击或评分等),而对于物品
没有记录,那么基于用户
的历史记录,可以得出这样一种偏序关系:
。依照这种思想可将数据集处理成三元组的形式
,其表达的含义为,相对于物品
,用户
更喜欢物品
。
BPR构建偏序关系需要以下假设的支撑:
1. 用户对物品的偏好不受其他用户的影响,即用户之间偏好是独立的。
2. 用户对不同物品的偏好不受其它物品的影响,即用户对每个物品的偏好独立。
依照上述思想将数据集重构成一系列三元组的形式
用于模型训练。
下面介绍BPR模型的输入输出以及计算过程。
BPR的计算方法与矩阵分解在形式上比较类似,

如图所示,左边是用户-物品的偏序关系矩阵 ,其中也有很多缺失值,BPR训练的目的就是填补这些空白值。其处理思路与矩阵分解一致,将用户-物品矩阵分解为两个低秩的特征矩阵,分别为
,
。并假设它们都服从高斯分布(与矩阵分解相同)。则模型训练的意义就是在已知训练集的偏序关系,求解两个特征矩阵。用公式的表达如下:
其中代表的就是两个特征矩阵,上述式子就是求解极大后验概率,后续公式推导为:
对于,实际考虑训练集中关于所有用户的概率乘积,即:
论文中所定义的的计算公式为:
,其中
是Sigmoid函数。
则
对于,按照矩阵分解的方法,假设其服从高斯分布,即:
则其概率密度函数为:
之后取对数可得:
进一步代入可得:
上式=
最大化后验概率即最小化下式:
利用梯度下降的方法求得每次更新的梯度为:
则梯度下降的更新公式:
其中是学习率。模型训练完成后,将会输出
两个特征矩阵。
松子鱼眼中的BPR:
不可否认,BPR是基于矩阵分解思想的算法。初看与矩阵分解的方法非常类似,但细看又能发现其中的不同:BPR将推荐问题当作排序问题,用排序的思想去生成推荐列表,其主要目的是在只借助用户隐式反馈(如点击事件)给物品列表进行个性化排序。其重点是两个物品之间的相对关系。
但在学习完BPR算法后,又深刻感觉到它的鸡肋。可能是因为这是在09年出品的神作,年代很久远。它的排序目的还是对已知量进行排序,即要将用户访问过的物品排到未访问过的物品之前,而用户访问过的本就是一个小集合,大量的物品是未被访问过的,即BPR并不能够对那些未访问过的物品进行排序,故感觉鸡肋。
参考文献:
[1]Rendle S, Freudenthaler C, Gantner Z, et al. BPR: Bayesian personalized ranking from implicit feedback[C]//Proceedings of the twenty-fifth conference on uncertainty in artificial intelligence. AUAI Press, 2009: 452-461.
网友评论