`

BPR [Bayesian Personalized Ranking] 算法详解及应用实践

阅读更多

在推荐系统的实现中,几乎总会遇到从较多候选集中为用户选取特定的少数几个物品进行推荐,这本质上是一个Ranking问题。

 

在推荐场景中用户更缺乏耐性,对推荐结果的消费也十分有限。因此,排序的好坏直接决定了用户对一个准确率为90%的推荐候选集的满意度是否真的有90%。

 

这里我们为大家介绍一种“基于贝叶斯后验优化的个性化排序算法”:Bayesian Personalized Ranking

其本身并不优化用户对物品的评分,而只藉由评分来优化用户对物品的排序。按照论文的说法:it is a real ranking algorithm.

 

BPR算法过程详解:

 

数据pair化预处理:

 

    BPR算法将用户对物品的评分(显示反馈“1”,隐式反馈“0”)处理为一个pair对的集合<i,j>,其中i为评分为1的物品,j为评分为0的物品。假设某用户有M个“1”的评分,N个“0”的评分,则该用户共有M*N个pair对。

    这样数据集就由三元组 <u,i,j>表示,该三元组的物理含义为:相对于物品“j”,用户“u”更喜欢物品“i”。

    

数据假设:

  • 每个用户之间的偏好行为相互独立
  • 同一用户对不同物品的偏序相互独立

则优化问题为极大化如下目标:

 

     

 

   其中theta为所求模型,具体包括:表示用户的隐含因子矩阵P,及表达物品的隐含因子矩阵Q。

 

其中关于似然部分:

      

 

我们假设先验服从如下分布:

     

 

则先验的概率密度函数为:

   

 

基于上述假设,优化目标进一步展开得到:

     

  

对应的最小化问题为:——其中 λθ 为正则系数"model specic regularization parameters"。

   

 

采用SGD求解上述最小化问题,分别针对pu qi qj求偏导如下:

   

 

偏导即为梯度下降方向,模型迭代求解的公式如下:

     

其中α为学习速率。

 

 

关于偏序关系构造的问题:

 

论文中将用户有过反馈(如点击、浏览、购买等)的物品标记为“1”,而将矩阵中剩余其他所有的物品都标记为“0”。

 

论文作者认为:

基于pair-wise的偏序优化,可以避免point-wise模型在对feature-item进行预测时失效(因为feature-item在训练时全被标记为“0”)的问题。

而且feature-item包括两类:1,用户真正讨厌的;2,用户missing的。

对于某个用户来说,在训练时都被标为"0"的item,在预测时的评分也可以排序,因此不影响ranking任务的完成。

 

我认为:

即使用pair-wise的优化方式,可以对训练时标记为“0”的item在预测时进行ranking。

但这本身是“矬子里面拔高个”,且训练数据与用户的实际偏好不符。而且,从数据量考虑,也很不经济。

 

合理的做法:

一般推荐业务场景,都是将一个有限的物品集合(全部物品的子集,通常很小)提供给用户。

我们只将提供给用户,但用户未有反馈的物品标记为“0”。对“未知”给与足够的尊重。

而且,将数据pair化过程限制在某次交互(或某个session)内。

 

 

如下图示: ——用户U1同有两次交互,共10个item

 

则pair化后的数据为:

  • 大小: 19.8 KB
  • 大小: 5.7 KB
  • 大小: 1.6 KB
  • 大小: 2.1 KB
  • 大小: 22.9 KB
  • 大小: 4.3 KB
  • 大小: 10.9 KB
  • 大小: 8.1 KB
  • 大小: 7.3 KB
  • 大小: 4.6 KB
分享到:
评论
7 楼 zhegeliang2 2017-09-25  
qq_20599123 写道
感谢博主的分享,想问下对BPR-OPT的先验概率部分展开那一块
ln p(\Theta) 怎么得到 \lambda_{\Theta}* |\Theta|^2的?
麻烦博主能不能给出更详细的推导?

这步能说明下原理吗?
6 楼 fobdddf 2016-11-16  
kite1988 写道
关于模型迭代更新公式的regularzation部分,有一个疑问想请教一下。在原始论文中, 每一轮迭代更新是加上一个 lambda* theta,



原始论文中的lambda是否和你推导的lambda不一样,比如,符号相反?

多谢!


仔细看了下论文,感觉是论文的符号错了,楼主这里是对的,下边有两份git上的代码,都是楼主这样的求导方法。
code:
https://github.com/hexiangnan/sigir16-eals/blob/master/src/algorithms/MFbpr.java
https://github.com/gamboviol/bpr/blob/master/bpr.py
5 楼 qq_20599123 2016-05-06  
感谢博主的分享,想问下对BPR-OPT的先验概率部分展开那一块
ln p(\Theta) 怎么得到 \lambda_{\Theta}* |\Theta|^2的?
麻烦博主能不能给出更详细的推导?
4 楼 liuzhiqiangruc 2015-06-10  
kite1988 写道
关于模型迭代更新公式的regularzation部分,有一个疑问想请教一下。在原始论文中, 每一轮迭代更新是加上一个 lambda* theta,



原始论文中的lambda是否和你推导的lambda不一样,比如,符号相反?

多谢!

符号应该没问题,写法不一样,你自己实现一遍就明白了。
3 楼 kite1988 2015-06-04  
关于模型迭代更新公式的regularzation部分,有一个疑问想请教一下。在原始论文中, 每一轮迭代更新是加上一个 lambda* theta,



原始论文中的lambda是否和你推导的lambda不一样,比如,符号相反?

多谢!
2 楼 liuzhiqiangruc 2015-02-27  
meffee 写道
请教个问题,推导中这一步是怎么来的?

    lamda * || theta^2 ||
=  lamda * || pu^2 || + lamda * || qi^2 || + lamda * || qj^2 ||
= ...

我看了一下原文,没有看到这一部分,还是赐教!

pu、qi、qj就是theta。展开了而已。
1 楼 meffee 2015-01-27  
请教个问题,推导中这一步是怎么来的?

    lamda * || theta^2 ||
=  lamda * || pu^2 || + lamda * || qi^2 || + lamda * || qj^2 ||
= ...

我看了一下原文,没有看到这一部分,还是赐教!

相关推荐

Global site tag (gtag.js) - Google Analytics