松子鱼眼中的BPR。

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.

你可能感兴趣的:(松子鱼眼中的BPR。)