贝叶斯个性化排序(BPR)算法详细推导

1.前言

  在很多推荐场景中,我们都是基于现有的用户和商品之间的一些数据,得到用户对所有商品的评分,选择高分的商品推荐给用户,这是funkSVD之类算法的做法,使用起来也很有效。但是在有些推荐场景中,我们是为了在千万级别的商品中推荐个位数的商品给用户,此时,我们更关心的是用户来说,哪些极少数商品在用户心中有更高的优先级,也就是排序更靠前。也就是说,我们需要一个排序算法,这个算法可以把每个用户对应的所有商品按喜好排序。BPR就是这样的一个我们需要的排序算法。

2.问题引入

  假设U是用户集合,I是项目集合。在本模型中,隐式反馈 S ⊆ U × I S \subseteq U \times I SU×I 是可用的。比如购买行为,点击流等等。我们的目标是提供给用户一个个性化的推荐排序 > u ⊂ I 2 >_u \subset I^2 >uI2,其中 > u >_u >u必须满足如下性质:

  • 完 整 性 : ∀ i , j ∈ I : i ≠ j ⇒ i > u j ∪ j > u i 完整性:∀i,j∈I:i≠j⇒i>_{u}j∪j>_{u}i i,jI:i=ji>ujj>ui
  • 反 对 称 性 : ∀ i , j ∈ I : i > u j ∩ j > u i ⇒ i = j 反对称性:∀i,j∈I:i>_{u}j∩j>_{u}i⇒i=j i,jI:i>ujj>uii=j
  • 传 递 性 : ∀ i , j , k ∈ I : i > u j ∩ j > u k ⇒ i > u k 传递性:∀i,j,k∈I:i>_{u}j∩j>_{u}k⇒i>_{u}k i,j,kI:i>ujj>uki>uk

  同时,BPR也用了类似矩阵分解的模型,对于用户集 U U U和物品集 I I I对应的 U × I U×I U×I的预测排序矩阵,我们期望得到两个分解后的用户矩阵 W ( ∣ U ∣ × k ) W(|U|×k) W(U×k)和物品矩阵 H ( ∣ I ∣ × k ) H(|I|×k) H(I×k),满足:
X ‾ = W H T \overline{X}=WH^{T} X=WHT
  对于任意一个用户u,对应的任意一个物品i,我们预测得出的用户对该物品的偏好计算如下:
x ‾ = w u ⋅ h i = ∑ f = 1 k w u f h i f \overline{x}=w_{u}·h_{i}=\sum^{k}_{f=1}w_{uf}h_{if} x=wuhi=f=1kwufhif
  最终我们的目标,是希望寻找合适的矩阵 W W W H H H,让 X ‾ \overline{X} X X X X最相似。

3.BPR的算法原理

  BPR 基于最大后验估计 P ( W , H ∣ > u ) P(W,H|>u) P(W,H>u)来求解模型参数 W W W, H H H,这里我们用 θ θ θ来表示参数 W W W H H H, > u >_{u} >u代表用户 u u u对应的所有商品的全序关系,则优化目标是 P ( θ ∣ > u ) P(θ|>_{u}) P(θ>u)。根据贝叶斯公式,我们有:
P ( θ ∣ > u ) = P ( > u ∣ θ ) P ( θ ) P ( > u ) P(θ|>_{u})=\frac{P(>_{u}|θ)P(θ)}{P(>_{u})} P(θ>u)=P(>u)P(>uθ)P(θ)
  由于我们求解假设了用户的排序和其他用户无关,那么对于任意一个用户u来说,P(>u)对所有的物品一样,所以有:
P ( θ ∣ > u ) ∝ P ( > u ∣ θ ) P ( θ ) P(θ|>_{u})∝P(>_{u}|θ)P(θ) P(θ>u)P(>uθ)P(θ)
  公式中 P ( θ ∣ > u ) P(θ|>_{u}) P(θ>u)是后验, P ( > u ∣ θ ) P(>_{u}|θ) P(>uθ)是似然, P ( θ ) P(θ) P(θ)是先验;其中theta为所求模型,具体包括:表示用户的隐含因子矩阵P,及表达物品的隐含因子矩阵Q。

  这个优化目标转化为两部分。第一部分和样本数据集D有关,第二部分和样本数据集D无关

第一部分:

  对于第一部分,由于我们假设每个用户之间的偏好行为相互独立,同一用户对不同物品的偏序相互独立,所以有:
∏ u ∈ U P ( > u ∣ θ ) = ∏ ( u , i , j ) ∈ ( U × I × I ) P ( i > u j ∣ θ ) δ ( ( u , i , j ) ∈ D ) ( 1 − P ( i > u j ∣ θ ) ) δ ( ( u , j , i ) ∉ D ) \prod_{u∈U}P(>_{u}|θ)=\prod_{(u,i,j)∈(U×I×I)}P(i>_{u}j|θ)^{δ((u,i,j)∈D)}(1−P(i>_{u}j|θ))^{δ((u,j,i)∉D)} uUP(>uθ)=(u,i,j)(U×I×I)P(i>ujθ)δ((u,i,j)D)(1P(i>ujθ))δ((u,j,i)/D)
  其中,
δ ( b ) = { 1 if b is true 0 else δ(b)= \begin{cases} 1& \text{if b is true}\\ 0& \text{else} \end{cases} δ(b)={10if b is trueelse
  根据上面说到的完整性和反对称性,优化目标的第一部分可以简化为:
∏ u ∈ U P ( > u ∣ θ ) = ∏ ( u , i , j ) ∈ ( U × I × I ) P ( i > u j ∣ θ ) \prod_{u∈U}P(>_{u}|θ)=\prod_{(u,i,j)∈(U×I×I)}P(i>_{u}j|θ) uUP(>uθ)=(u,i,j)(U×I×I)P(i>ujθ)
  而对于 P ( i > u j ∣ θ ) P(i>_{u}j|θ) P(i>ujθ)这个概率,我们可以使用下面这个式子来代替:
P ( i > u j ∣ θ ) = σ ( x ‾ u i j ( θ ) ) P(i>_{u}j|θ)=σ(\overline{x}_{uij}(θ)) P(i>ujθ)=σ(xuij(θ))
  其中 σ \sigma σ 是logistic sigmoid函数,为了满足BPR的完整性,反对称性和传递性并且方便优化计算:
σ ( x ) = 1 1 + e − x ​ σ(x)=\frac{1}{1+e^{−x}}​ σ(x)=1+ex1
  现在我们的重点就转换到了优化 x ‾ u i j ( θ ) \overline{x}_{uij}(θ) xuij(θ)上,而 x ‾ u i j ( θ ) \overline{x}_{uij}(θ) xuij(θ)可以看做用户 u u u i i i j j j偏好程度的差异,我们当然希望 i i i j j j的差异越大越好,这种差异如何体现,最简单的就是差值:
x ‾ u i j ( θ ) = x ‾ u i ( θ ) − x ‾ u j ( θ ) \overline{x}_{uij}(θ)=\overline{x}_{ui}(θ)−\overline{x}_{uj}(θ) xuij(θ)=xui(θ)xuj(θ)
  而 x ‾ u i ( θ ) \overline{x}_{ui}(θ) xui(θ) x ‾ u j ( θ ) \overline{x}_{uj}(θ) xuj(θ),就是我们的矩阵 x ‾ \overline{x} x 对应位置的值。这里为了方便,我们不写θ,这样上式可以表示为:
x ‾ u i j = x ‾ u i − x ‾ u j \overline{x}_{uij}=\overline{x}_{ui}−\overline{x}_{uj} xuij=xuixuj
  最终,我们的第一部分优化目标转化为:
∏ u ∈ U P ( > u ∣ θ ) = ∏ ( u , i , j ) ∈ D σ ( x ‾ u i − x ‾ u j ) \prod_{u∈U}P(>_{u}|θ)=\prod_{(u,i,j)∈D}σ(\overline{x}_{ui}-\overline{x}_{uj}) uUP(>uθ)=(u,i,j)Dσ(xuixuj)

第二部分

  假设这个概率分布符合正太分布,且对应的均值是0,协方差矩阵是λθI,即
P ( θ ) ∼ N ( 0 , λ θ I ) P(θ)∼N(0,λ_{θ}I) P(θ)N(0,λθI)
  对于上面假设的这个多维正态分布,其对数和 ∣ ∣ θ ∣ ∣ 2 ||θ||^{2} θ2成正比。即:
l n P ( θ ) = λ θ ∣ ∣ θ ∣ ∣ 2 lnP(θ)=λ_{θ}||θ||^{2} lnP(θ)=λθθ2

总结

  最终对于我们的最大对数后验估计函数:
        l n P ( θ ∣ > u ) lnP(θ|>_{u}) lnP(θ>u)

         ∝ l n P ( > u ∣ θ ) P ( θ ) ∝lnP(>_{u}|θ)P(θ) lnP(>uθ)P(θ)

         = l n ∏ ( u , i , j ) ∈ D σ ( x ‾ u i − x ‾ u j ) + l n P ( θ ) =ln\prod_{(u,i,j)∈D}σ(\overline{x}_{ui}−\overline{x}_{uj})+lnP(θ) =ln(u,i,j)Dσ(xuixuj)+lnP(θ)

         = ∑ ( u , i , j ) ∈ D ( l n σ ( x ‾ u i − x ‾ u j ) − λ θ ∣ ∣ θ ∣ ∣ 2 ) =∑_{(u,i,j)∈D}(lnσ(\overline{x}_{ui}−\overline{x}_{uj})-λ_{θ}||θ||^{2}) =(u,i,j)D(lnσ(xuixuj)λθθ2)

         = ∑ ( u , i , j ) ∈ D ( l n σ ( x ‾ u i − x ‾ u j ) − λ θ ∣ ∣ p u ∣ ∣ 2 − λ θ ∣ ∣ q i ∣ ∣ 2 − λ θ ∣ ∣ q j ∣ ∣ 2 ) =∑_{(u,i,j)∈D}(lnσ(\overline{x}_{ui}−\overline{x}_{uj})-λ_{θ}||p_{u}||^{2}-λ_{θ}||q_{i}||^{2}-λ_{θ}||q_{j}||^{2}) =(u,i,j)D(lnσ(xuixuj)λθpu2λθqi2λθqj2)

         = ∑ ( u , i , j ) ∈ D ( l n σ ( p u ⋅ q i − p u ⋅ q j ) − λ θ ∣ ∣ p u ∣ ∣ 2 − λ θ ∣ ∣ q i ∣ ∣ 2 − λ θ ∣ ∣ q j ∣ ∣ 2 ) =∑_{(u,i,j)∈D}(lnσ(p_{u}·q_{i}−p_{u}·q_{j})-λ_{θ}||p_{u}||^{2}-λ_{θ}||q_{i}||^{2}-λ_{θ}||q_{j}||^{2}) =(u,i,j)D(lnσ(puqipuqj)λθpu2λθqi2λθqj2)
  其中 λ θ λ_{θ} λθ 为正则系数。对应的最小化问题变为:
a r g m i n ∑ ( u , i , j ) ∈ D ( λ θ ∣ ∣ p u ∣ ∣ 2 + λ θ ∣ ∣ q i ∣ ∣ 2 + λ θ ∣ ∣ q j ∣ ∣ 2 − l n σ ( p u ⋅ q i − p u ⋅ q j ) ) arg min ∑_{(u,i,j)∈D}(λ_{θ}||p_{u}||^{2}+λ_{θ}||q_{i}||^{2}+λ_{θ}||q_{j}||^{2}-lnσ(p_{u}·q_{i}−p_{u}·q_{j})) argmin(u,i,j)D(λθpu2+λθqi2+λθqj2lnσ(puqipuqj))
  采用SGD求解上述最小化问题,分别针对 p u p_{u} pu q i q_{i} qi q j q_{j} qj求偏导如下:

      ∂ f ∂ p u = 1 1 + e p u ⋅ q i − p u ⋅ q j ( q j − q i ) + λ p u \frac{∂f}{∂p_{u}}=\frac{1}{1+e^{p_{u}·q_{i}−p_{u}·q_{j}}}(q_{j}-q_{i})+λp_{u} puf=1+epuqipuqj1(qjqi)+λpu

      ∂ f ∂ q i = − p u 1 + e p u ⋅ q i − p u ⋅ q j + λ q i \frac{∂f}{∂q_{i}}=\frac{-p_{u}}{1+e^{p_{u}·q_{i}−p_{u}·q_{j}}}+λq_{i} qif=1+epuqipuqjpu+λqi

      ∂ f ∂ q j = p u 1 + e p u ⋅ q i − p u ⋅ q j + λ q j \frac{∂f}{∂q_{j}}=\frac{p_{u}}{1+e^{p_{u}·q_{i}−p_{u}·q_{j}}}+λq_{j} qjf=1+epuqipuqjpu+λqj

  模型迭代求解的公式如下:
      p u = p u − α ( 1 1 + e p u ⋅ q i − p u ⋅ q j ( q j − q i ) + λ p u ) p_{u}=p_{u}-α(\frac{1}{1+e^{p_{u}·q_{i}−p_{u}·q_{j}}}(q_{j}-q_{i})+λp_{u}) pu=puα(1+epuqipuqj1(qjqi)+λpu)

      q i = q i − α ( − p u 1 + e p u ⋅ q i − p u ⋅ q j + λ q i ) q_{i}=q_{i}-α(\frac{-p_{u}}{1+e^{p_{u}·q_{i}−p_{u}·q_{j}}}+λq_{i}) qi=qiα(1+epuqipuqjpu+λqi)

      q j = q j − α ( p u 1 + e p u ⋅ q i − p u ⋅ q j + λ q j ) q_{j}=q_{j}-α(\frac{p_{u}}{1+e^{p_{u}·q_{i}−p_{u}·q_{j}}}+λq_{j}) qj=qjα(1+epuqipuqjpu+λqj)

  其中 α 为学习速率。

4.算法流程

  输入:训练集 D D D三元组,梯度步长 α α α, 正则化参数 λ λ λ,分解矩阵维度 k k k。          
  输出:模型参数,矩阵 W W W, H H H
  1. 随机初始化矩阵 W W W, H H H
  2. 迭代更新模型参数:
w u f = w u f + α ( ∑ ( u , i , j ) ∈ D 1 1 + e x ‾ u i − x ‾ u j ( h i f − h j f ) + λ w u f ) w_{uf}=w_{uf}+α(∑_{(u,i,j)∈D}\frac{1}{1+e^{\overline{x}_{ui}−\overline{x}_{uj}}}(h_{if}−h_{jf})+λw_{uf}) wuf=wuf+α((u,i,j)D1+exuixuj1(hifhjf)+λwuf)
h i f = h i f + α ( ∑ ( u , i , j ) ∈ D 1 1 + e x ‾ u i − x ‾ u j w u f + λ h i f ) h_{if}=h_{if}+α(∑_{(u,i,j)∈D}\frac{1}{1+e^{\overline{x}_{ui}−\overline{x}_{uj}}}w_{uf}+λh_{if}) hif=hif+α((u,i,j)D1+exuixuj1wuf+λhif)
h j f = h j f + α ( ∑ ( u , i , j ) ∈ D 1 1 + e x ‾ u i − x ‾ u j ( − w u f ) + λ h j f ) h_{jf}=h_{jf}+α(∑_{(u,i,j)∈D}\frac{1}{1+e^{\overline{x}_{ui}−\overline{x}_{uj}}}(−w_{uf})+λh_{jf}) hjf=hjf+α((u,i,j)D1+exuixuj1(wuf)+λhjf)
  3. 如果 W W W, H H H收敛,则算法结束,输出 W W W, H H H,否则回到步骤2.
  当我们拿到 W W W, H H H后,就可以计算出每一个用户u对应的任意一个商品的排序分: x ‾ u i = w u ∙ h i \overline{x}_{ui}=w_{u}∙h_{i} xui=wuhi,最终选择排序分最高的若干商品输出。

参考文献

1.https://www.datalearner.com/paper_note/content/300025
2.https://www.cnblogs.com/pinard/p/9128682.html
3.https://www.jianshu.com/p/ba1936ee0b69
4.https://blog.csdn.net/sigmeta/article/details/80517828

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值