BPR 贝叶斯个性化排序

显式反馈:用户对物品的评分,如电影评分
隐式反馈:用户对物品的交互行为,如浏览,购买等,现实中绝大部分数据属于隐式反馈,可以从日志中获取。
BPR是基于用户的隐式反馈,为用户提供物品的推荐,并且是直接对排序进行优化。

定义

UU代表所有的用户user集合;

II代表所有的物品item集合;

SS代表所有用户的隐式反馈,SU×IS \subseteq U \times I. 如下图所示,只要用户对某个物品产生过行为,就标记为++, 所有++样本构成了SS。那些未观察到的数据(即用户没有产生行为的数据)标记为??.

1542680747292

i>uji>_uj表示用户u在物品i和物品j之间更偏向于物品i

Iu+={iI:(u,i)S}I_u^+=\{i \in I: (u,i) \in S\} 代表了用户u产生过行为的物品集合

Ui+={uU:(u,i)S}U_i^+=\{u \in U: (u,i) \in S\} 代表了对物品i产生过行为的用户集合

传统解决方式

在使用隐式反馈的情况下,我们会发现观察到的数据均为正例(因为用户对物品交互过才会被观察到),而那些没有被观察到的数据(即用户还没有产生行为的物品),分为两种情况,一种是用户确实对该物品没有兴趣(负类),另一种则是缺失值(即用户以后可能会产生行为的物品)。

传统的个性化推荐通常是计算出用户u对物品i的个性化分数x^ui\hat{x}_{ui},然后根据个性化分数进行排序。为了得到训练数据,通常是将所有观察到的隐式反馈(u,i)S(u,i) \in S作为正类,其余所有数据作为负类,如下图所示,左图为观察到的数据,右图为填充后的训练数据:

1542682051420

在填零的情况下,我们的优化目标变成了希望在预测时观测到的数据预测为1,其余的均为0. 于是产生的问题是,我们希望模型在以后预测的缺失值,在训练时却都被认为是负类数据。因此,如果这个模型训练的足够好,那么最终得到的结果就是这些未观察的样本最后的预测值都是0。

BPR的解决方式

BPR采用了pairwise的方式。

如 下图,基于观察到的数据S构建数据集DSD_S: 对用户u来说,如果对物品i产生过行为(即(u,i)S(u,i) \in S), 而没有对物品j产生过行为,则得到了一个偏好对(u,i,j)(u,i,j)。如对用户u1u_1来说,对物品i2i_2产生过行为,而没有对物品i1i_1产生过行为,则得到了用户u1u_1的一个偏好对(u1,i2,i1)(u_1, i_2, i_1), 或者表示为i2>u1i1i_2>_{u1}i_1. **如果一个用户对两个物品同时产生过行为,或者同时没有产生过行为,则无法构建偏好对。**接着,对每个用户,就可以构建I×II \times I的偏好矩阵。所有用户的偏好对构成了训练集DS:U×I×ID_S: U \times I \times I

DS={(u,i,j)iIu+jI\Iu+}D_S=\{(u,i,j)|i \in I_u^+ \land j \in I \backslash I_u^+\}

注意,对每个三元组样本(u,i,j)(u,i,j), i必然是产生过行为的物品,j必然是未被产生过行为的物品,因此DSD_S只包括下图右边分解后为++的数据,不包含-的数据。

1542704322044

BPR-OPT

BPR基于最大后验概率, 对每一个用户u而言,后验概率正比于似然概率乘上先验概率:

p(θ>u)p(>uθ)p(θ)p(\theta|>_u) \propto p(>_u|\theta)p(\theta)

其中,>u>_u表示了用户u对所有物品的偏好关系。下面从分解后的似然概率和先验概率做出解释。

似然概率

独立性假设:

  1. 所有用户之间的行为相互独立
  2. 同一用户任意一对物品的偏序关系相互独立

于是可以将似然概率表示为(这里跳过了包含负例部分的分解,原论文这部分关于负例的表示让我有些疑惑,有兴趣的可以参见下这篇博客的讨论部分):

ΠuUp(>uθ)=Π(u,i,j)DSp(i>ujθ)\Pi_{u\in U}p(>_u|\theta)=\Pi_{(u,i,j) \in D_S}p(i>_uj|\theta)

即分解为每一个正样本的概率之积,即我们希望对每一个正样本(u,i,j)DS(u,i,j) \in D_S, p(i>ujθ)p(i>_uj|\theta)最大。这里不考虑负样本。

这里定义:

p(i>ujθ):=σ(x^uij(θ))p(i>_uj|\theta):=\sigma(\hat{x}_{uij}(\theta))

其中σ\sigma是sigmoid函数,σ(x)=11+ex\sigma(x)=\frac{1}{1+e^{-x}}

x^uij(θ)\hat{x}_{uij}(\theta)是个实值函数,返回的是用户u, 物品i, 物品j之间的关系。这个函数可以通过矩阵分解或者KNN等方法实现。

先验概率

这里假设了参数的先验概率服从正态分布

p(θ)N(0,λθI)p(\theta) \sim N(0, \lambda_\theta I)

对于正态分布,其对数和θ2||\theta||^2成正比。因此计算lnp(θ)lnp(\theta)时,得到:

lnp(θ)=λθ2lnp(\theta)=\lambda||\theta||^2

后验概率

得到似然概率和先验概率后,最终得到后验概率。取对数得到优化目标。

1542719676423

先验概率相当于正则项,由于假设了高斯分布,因此变为L2正则。

梯度下降

由于优化函数可微,因此采用梯度下降法。

1542719861418

采用随机梯度下降:

1542719926063

基于矩阵分解的BPR

矩阵分解的作用主要就是为了得到上述的实值函数x^uij(θ)\hat{x}_{uij}(\theta).

对于用户集UU和物品集II对应的U×IU \times I的预测的排序矩阵X^\hat{X}, 我们期望分解得到用户矩阵W(U×k)W (|U|\times k)和物品矩阵H(I×k)H (|I| \times k), 满足:

X^=WHT\hat{X}=WH^T

这里的k是自己定义的,对于用户矩阵W, 我们实际上就是为每一个用户u学出一个k维向量wuw_u作为该用户的隐向量,同理,对于物品矩阵H, 我们实际上就是为每一个物品i学出一个k维向量hih_i作为该物品的隐向量。

因此,这里的(W,H)(W, H)实际上就是我们需要求出的参数θ\theta. 为方便,下面式子不再写θ\theta

当得到W和H矩阵后,对于任意一个用户u,对应的任意一个物品i, 得到的实值向量即为两个隐向量之积:

x^ui=wuhi=f=1kwufhif\hat{x}_{ui}=w_u \cdot h_i=\sum_{f=1}^kw_{uf}h_{if}

x^ui\hat{x}_{ui}的物理意义可以理解为是预测出的用户u对物品i的评分。

但是BPR中是三元组形式的x^uij\hat{x}_{uij},因此BPR将三元组形式分解为二元组的形式,定义为:

x^uij=x^uix^uj\hat{x}_{uij}=\hat{x}_{ui}-\hat{x}_{uj}

同时,上面这个式子满足了:当i>uji>_uj时,x^uij>0\hat{x}_{uij}>0;当j>uij>_ui时,x^uij<0\hat{x}_{uij}<0.

代入后验概率模型,得到:

lnp(θ>u)=(u,i,j)DSlnσ(x^uix^uj)+λθ2lnp(\theta|>_u)=\sum_{(u,i,j)\in D_S}ln\sigma(\hat{x}_{ui}-\hat{x}_{uj})+\lambda||\theta||^2

根据上节梯度下降更新梯度,得到:

θθ+α(11+ex^uix^ujθ(x^uix^uj)+λθ)\theta \leftarrow \theta + \alpha(\frac{1}{1+e^{\hat{x}_{ui}-\hat{x}_{uj}}} \cdot \frac{\partial}{\partial \theta}(\hat{x}_{ui}-\hat{x}_{uj})+\lambda\theta)

其中:

x^uix^uj=f=1kwufhiff=1kwufhjf\hat{x}_{ui}-\hat{x}_{uj}=\sum_{f=1}^kw_{uf}h_{if}-\sum_{f=1}^kw_{uf}h_{jf}

于是,可以得到:

1542778789080

接下来就可以更新参数了。

当然,除了采用矩阵分解的方式实现,也可以使用KNN的方式去实现x^uij\hat{x}_{uij}, 具体可参见论文。

尽管BPR采用的仍然是矩阵分解的方式,但传统的矩阵分解主要是去尝试拟合x^ui\hat{x}_{ui}, BPR的优化角度是直接对排序进行优化,相当于对差值x^uix^uj\hat{x}_{ui}-\hat{x}_{uj}进行分类,因此更加有效。

参考:

Rendle, et.al., BPR: Bayesian Personalized Ranking from Implicit Feedback

刘建平博客:https://www.cnblogs.com/pinard/p/9128682.html#commentform

其他:

在上传这篇博客到hexo时,由于公式太多,导致了网上公式渲染出现问题,非常感谢在Hexo中渲染MathJax数学公式提出的方法.

发布了42 篇原创文章 · 获赞 103 · 访问量 11万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览