BPR是基于用户的隐式反馈,为用户提供物品的推荐,并且直接对排序进行优化。
形式定义
:user集合;
:item集合;
:用户的隐式反馈 如下图所示,只要用户对某个物品产生过行为,就标记为+,未观察到的数据(即用户没有产生行为的数据)标记为?.
>表示用户在物品和物品之间更偏向于物品
={(,)}代表了用户产生过行为的物品集合
={(,)}代表了对物品产生过行为的用户集合
问题提出
以前的Rec方法通常通过给对(,)∈一个正的类标签和(×)中的所有其他组合一个负类的来创建训练数据(见图1)。然后用一个模型对这些数据进行拟合。这意味着模型经过优化,可以预测S中元素的值为1,其余元素的值为0。
在填零的情况下,我们的优化目标变成了希望在预测时观测到的数据预测为1,其余的均为0. 于是产生的问题是,我们希望模型在以后预测的缺失值,在训练时却都被认为是负类数据。因此,如果这个模型训练的足够好,那么最终得到的结果就是这些未观察的样本最后的预测值都是0。
BPR
BPR采用了pairwise的方式。
如 下图,基于观察到的数据构建数据集 : 对用户来说,如果对物品产生过行为, 而没有对物品产生过行为,则得到了一个偏好对(,,)。表示为 . 如果一个用户对两个物品同时产生过行为,或者同时没有产生过行为,则无法构建偏好对。接着,对每个用户,就可以构建×的偏好矩阵。所有用户的偏好对构成了训练集:××.
左侧显示了观察到的数据。我们的方法在一对项目之间创建特定于用户的成对偏好>。在右侧,加号(+)表示用户更喜欢项而不是项;减号(–)表示他更喜欢而不是。
BPR-OPT
BPR 基于最大后验估计(,|)来求解模型参数,,这里我们用θ来表示参数和, 代表用户对应的所有商品的全序关系,则优化目标是P(θ|)。根据贝叶斯公式,我们有:
寻找所有项目的正确个性化排序的贝叶斯公式是最大化以下后验概率,其中Θ表示任意模型类的参数向量(例如矩阵分解)。
这里,是用户潜在的偏好结构,所有用户都被假定为相互独立的行为。我们还假设特定用户的每对项目(,)的排序独立于其他每对的排序。因此,上述用户特定的似然函数(> |Θ)可以首先重写为单密度的乘积,然后对所有用户∈组合。
似然概率
独立性假设:
- 所有用户之间的行为相互独立
- 同一用户任意一对物品的偏序关系相互独立
于是可以将似然概率表示为:
即分解为每一个正样本的概率之积,即希望对每一个正样本(,,)∈, (>∣θ)最大。这里不考虑负样本。
定义:
其中
是个实值函数,返回的是用户, 物品, 物品之间的关系。这个函数可以通过矩阵分解或者KNN等方法实现。
先验概率
假设参数的先验概率服从正态分布
对于正态分布,其对数和∣∣θ∣∣ 成正比。因此计算ln(θ)时,得到:
所以得到后验概率,取对数即为优化目标:BPR-OTP:
更新
梯度下降
基于矩阵分解的BPR
矩阵分解的作用主要就是为了得到上述的实值函数:
对于用户集和物品集对应的×的预测的排序矩阵Xˆ , 我们期望分解得到用户矩阵W(∣U∣×k)和物品矩阵H (∣I∣×k), 满足:
这里的是自己定义的,对于用户矩阵, 我们实际上就是为每一个用户学出一个维向量作为该用户的隐向量,同理,对于物品矩阵, 我们实际上就是为每一个物品学出一个维向量作为该物品的隐向量.因此,这里的(W,H)实际上就是我们需要求出的实值函数的参数θ.
当得到W和H矩阵后,对于任意一个用户u,对应的任意一个物品i, 得到的实值向量即为两个隐向量之积
x^是预测出的用户u对物品i的评分。
但是BPR中是三元组形式的
因此BPR将三元组形式分解为二元组的形式,定义为:
代入后验概率模型,得到:
根据上节梯度下降更新梯度,得到
参考博客:https://www.cnblogs.com/pinard/p/9128682.html#commentform
https://blog.csdn.net/ddydavie/article/details/84331584