BPR

1. BPR算法使用背景

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

2. 排序推荐算法背景介绍

排序推荐算法历史很悠久,早在做信息检索的各种产品中就已经在使用了。最早的第一类排序算法类别是点对方法(Pointwise Approach),这类算法将排序问题被转化为分类、回归之类的问题,并使用现有分类、回归等方法进行实现。第二类排序算法是成对方法(Pairwise Approach),在序列方法中,排序被转化为对序列分类或对序列回归。所谓的pair就是成对的排序,比如(a,b)一组表明a比b排的靠前。我们要讲到的BPR就属于这一类。第三类排序算法是列表方法(Listwise Approach),它采用更加直接的方法对排序问题进行了处理。它在学习和预测过程中都将排序列表作为一个样本。排序的组结构被保持。

3.BPR算法简介

3.1 基本思路

在BPR算法中,我们将任意用户u对应的物品进行标记,如果用户u在同时有物品i和j的时候点击了i,那么我们就得到了一个三元组<u,i,j>,它表示对用户u来说,i的排序要比j靠前。如果对于用户u来说我们有m组这样的反馈,那么我们就可以得到m组用户u对应的训练样本。
这里,我们做出两个假设:

  • 每个用户之间的偏好行为相互独立,即用户u在商品i和j之间的偏好和其他用户无关。
  • 同一用户对不同物品的偏序相互独立,也就是用户u在商品i和j之间的偏好和其他的商品无关。

为了便于表述,我们用>u符号表示用户u的偏好,上面的<u,i,j>可以表示为:i >u j。
在BPR中,我们也用到了类似矩阵分解的思想,对于用户集U和物品集I对应的U*I的预测排序矩阵,我们期望得到两个分解后的用户矩阵W(|U|×k)和物品矩阵H(|I|×k),满足:
在这里插入图片描述
那么对于任意一个用户u,对应的任意一个物品i,我们预测得出的用户对该物品的偏好计算如下:
在这里插入图片描述
而模型的最终目标是寻找合适的矩阵W和H,让X-(公式打不出来,这里代表的是X上面有一个横线,即W和H矩阵相乘后的结果)和X(实际的评分矩阵)最相似。看到这里,也许你会说,BPR和矩阵分解没有什区别呀?是的,到目前为止的基本思想是一致的,但是具体的算法运算思路,确实千差万别的,我们慢慢道来。

3.2 算法运算思路

BPR 基于最大后验估计P(W,H|>u)来求解模型参数W,H,这里我们用θ来表示参数W和H, >u代表用户u对应的所有商品的全序关系,则优化目标是P(θ|>u)。根据贝叶斯公式,我们有:
在这里插入图片描述
由于我们求解假设了用户的排序和其他用户无关,那么对于任意一个用户u来说,P(>u)对所有的物品一样,所以有:
在这里插入图片描述
这个优化目标转化为两部分。第一部分和样本数据集D有关,第二部分和样本数据集D无关。

第一部分

对于第一部分,由于我们假设每个用户之间的偏好行为相互独立,同一用户对不同物品的偏序相互独立,所以有:
在这里插入图片描述
上面的式子类似于极大似然估计,若用户u相比于j来说更偏向i,那么我们就希望P(i >u j|θ)出现的概率越大越好。

上面的式子可以进一步改写成:
在这里插入图片描述
而对于P(i >u j|θ)这个概率,我们可以使用下面这个式子来代替:
在这里插入图片描述
其中,σ(x)是sigmoid函数,σ里面的项我们可以理解为用户u对i和j偏好程度的差异,我们当然希望i和j的差异越大越好,这种差异如何体现,最简单的就是差值。这里你也许会问,为什么可以用这个sigmoid函数来代替呢? 其实这里的代替可以选择其他的函数,不过式子需要满足BPR的完整性,反对称性和传递性。原论文作者这么做除了是满足这三个性质外,另一个原因是为了方便优化计算。:
在这里插入图片描述
省略θ我们可以将式子简略的写为:
在这里插入图片描述
因此优化目标的第一项可以写作:
在这里插入图片描述
哇,是不是很简单的思想,对于训练数据中的<u,i,j>,用户更偏好于i,那么我们当然希望在X-矩阵中ui对应的值比uj对应的值大,而且差距越大越好!

对于第二部分P(θ),原作者大胆使用了贝叶斯假设,即这个概率分布符合正太分布,且对应的均值是0,协方差矩阵是λθI,即
P ( θ ) ∼ N ( 0 , λ θ I ) P(θ)∼N(0,λθI) P(θ)N(0,λθI)
 原作者为什么这么假设呢?个人觉得还是为了优化方便,因为后面我们做优化时,需要计算lnP(θ),而对于上面假设的这个多维正态分布,其对数和||θ||**2成正比。即:
l n P ( θ ) = λ ∣ ∣ θ ∣ ∣ 2 lnP(θ)=λ||θ||2 lnP(θ)=λθ2
 最终对于我们的最大对数后验估计函数
 
这个式子可以用梯度上升法或者牛顿法等方法来优化求解模型参数。如果用梯度上升法,对θ求导,我们有:
在这里插入图片描述
  由于
在这里插入图片描述
 这样我们可以求出:
在这里插入图片描述
  有了梯度迭代式子,用梯度上升法求解模型参数就容易了。下面我们归纳下BPR的算法流程。

4.BPR算法流程

下面简要总结下BPR的算法训练流程:

输入:训练集D三元组,梯度步长α, 正则化参数λ,分解矩阵维度k。

输出:模型参数,矩阵W,H
    1. 随机初始化矩阵W,H
    2. 迭代更新模型参数:
在这里插入图片描述
     3. 如果W,H收敛,则算法结束,输出W,H,否则回到步骤2.

当我们拿到W,H后,就可以计算出每一个用户u对应的任意一个商品的排序分:x¯¯¯ui=wu∙hi,最终选择排序分最高的若干商品输出。

参考博文

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值