推荐系统中的经典矩阵分解技术中,我们讨论过像funkSVD之类的矩阵分解方法如何用于推荐。今天我们讲另一种在实际产品中用的比较多的推荐算法:贝叶斯个性化排序(Bayesian Personalized Ranking, 以下简称BPR),它也用到了矩阵分解,但是和funkSVD家族却有很多不同之处。下面我们来详细讨论。

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

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

2.BPR算法使用背景

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

在推荐系统中,分为召回和排序两个阶段。贝叶斯个性化排序属于成对方法(Pairwise Approach)。

3. BPR建模思路

在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>可以表示为:

在BPR中,这个排序关系符号>u满足完全性,反对称性和传递性,即对于用户集U和物品集I:

同时,BPR也用了和funkSVD类似的矩阵分解模型,这里BPR对于用户集U和物品集I的对应的的预测排序矩阵我们期望得到两个分解后的用户矩阵和物品矩阵满足

这里的k和funkSVD类似,也是自己定义的,一般远远小于

由于BPR是基于用户维度的,所以对于任意一个用户u,对应的任意一个物品i我们期望有:

最终我们的目标,是希望寻找合适的矩阵,让最相似。读到这里,也许你会说,这和funkSVD之类的矩阵分解模型没有什么区别啊? 的确,现在还看不出,下面我们来看看BPR的算法优化思路,就会慢慢理解和funkSVD有什么不同了。

4. BPR参数计算方法

BPR算法采用的是最大化后验概率来估计参数(关于什么是最大化后验概率,可移步我的另外一篇文章:最大化后验概率)。由来求解模型参数W,H。这里我们θ来表示参数W,H代表用户u对应的所有商品的全序关系,则优化目标是 根据贝叶斯公式,我们有:

由于我们求解假设了用户的排序和其他用户无关,那么对于任意一个用户u来说,对所有的物品一样,所以有:

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

对于第一部分,由于我们假设每个用户之间的偏好行为相互独立,同一用户对不同物品的偏序相互独立,所以有:

其中,

当数据<u,i,j>属于D时,第一部分可以简化为:

当数据<u,i,j>不属于D时,第一部分可以简化为:

 

而我们所取的数据都是属于D的,所以优化目标的第一部分可以简化为:

而对于,这个概率,我们可以使用下面这个式子来代替:

其中,σ(x)是sigmoid函数。这里你也许会问,为什么可以用这个sigmoid函数来代替呢? 其实这里的代替可以选择其他的函数,不过式子需要满足BPR的完整性,反对称性和传递性。原论文作者这么做除了是满足这三个性质外,另一个原因是为了方便优化计算。

详细了解sigmoid函数请看:激活函数

对于这个式子,我们要满足当时,反之当时,最简单的表示这个性质的方法就是

 注意上面的这个式子也不是唯一的,只要可以满足上面提到的以及对应的相反条件即可。这里我们仍然按原论文的式子来。

我们将上面讲的第一部分化简总结起来就是:

最终,我们的第一部分优化目标转化为:

对于第二部分P(θ),原作者大胆使用了贝叶斯假设,即这个概率分布符合正太分布,且对应的均值是0,协方差矩阵是,即

正态分布概率密度函数为:  ,记做  

所以对于,代入概率密度函数:

原作者为什么这么假设呢?个人觉得还是为了优化方便,因为后面我们做优化时,需要计算

对于上面假设的这个多维正态分布,我们可以发现其对数和成正比,所以可近似等于:

注:因为θ来表示参数矩阵W,H,所以我们可以把理解为矩阵平方求和。详细了解,可自行百度——L2范数。

所以,最终的后验概率估计函数为:

5.优化求解模型参数

上式λ作为参数可以是负的,所以式子可写为

这个式子可以用梯度上升法或者牛顿法等方法来优化求解模型参数。如果用梯度上升法,对θ求导,我们有:

由于

这样我们可以求出:

6.BPR算法流程

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

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

    输出:模型参数,矩阵W,H

    1. 随机初始化矩阵W,H

    2. 迭代更新模型参数:

3. 如果W,H收敛,则算法结束,输出W,H,否则回到步骤2.

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

7.总结

回顾Bayesian Personalized Ranking 算法,有以下三点值得回味:

1. θ的正态分布(先验)形式:

之所以这样设计,笔者以为有两点:一是方便取对数、二是能与正则化联系起来。

2. 用户 u 相比于 j 更喜欢 i 通过借助用户 u 对 i 的喜欢程度与对 j 的喜欢程度的差进行度量。这当然是最直观的表示方法,当然也可以加以改进。

3. 万物皆可embedding !通过对用户以及物品分别构造embedding向量,从而完成用户对物品喜好程度的计算。

参考资料

1.https://www.cnblogs.com/pinard/p/9128682.html

2.https://www.cnblogs.com/wkang/p/10217172.html

贝叶斯个性化排序(BPR)算法相关推荐

  1. 推荐系统遇上深度学习(二十一)--贝叶斯个性化排序(BPR)算法原理及实战

    笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值,找寻数据的秘密,笔者认为,数据的价值不仅仅只体现在企业中,个人也可以体会到数据的魅力,用技术力量探索行为密码,让大数据 ...

  2. 推荐算法之贝叶斯个性化排序 BPR

    就像哲学有不同的流派一样,推荐系统的算法设计思路也可以分为不同的流派.排序学习恰恰就是其中的一种流派.熟悉 RecSys 等推荐系统国际会议的从业者可能会发现,自 2010 年以后的若干年内,陆续出现 ...

  3. 一文读懂开创性文章——贝叶斯个性化排序(BPR)

    BPR绝对可以算是推荐系统领域的开创性文章之一,对于经典我们一定要好好体会和理解. BPR是一个基于pairwise的算法,在BPR之前大部分方法都基于pointwise的方法,这存在一定的问题,而B ...

  4. BPR(贝叶斯个性化排序)

    1.什么是BPR以及他产生的背景 BPR全称Bayesian Personalized Ranking,他是一种排序算法,并且使用隐式反馈(如点击,收藏等),通过对问题进行贝叶斯分析得到的最大后验概率 ...

  5. BPR:面向隐偏好数据的贝叶斯个性化排序学习模型

    转自博客:https://blog.csdn.net/qq_20599123/article/details/51315697 BPR面向隐偏好数据的贝叶斯个性化排序学习模型 摘要 引言 相关研究 个 ...

  6. 推荐常用的排序学习算法——BPR(贝叶斯个性化排序)

    文章目录 1. 排序学习 1.1 优势 1.2 排序学习在推荐领域的作用 1.3 排序学习设计思路 1.3.1 单点法(Pointwise) 1.3.2 配对法(Pairwise) 1.3.3 列表法 ...

  7. BPR贝叶斯个性化排序算法

    目录 一.BPR算法的作用 二.显式反馈和隐式反馈 1.显式反馈 2.隐式反馈 三.BPR算法 1.概念 2.相关定义 3.建模思路 四.BPR优化 五.算法流程 六.结束 七.代码实现 一.BPR算 ...

  8. 推荐系统遇上深度学习(二十)-贝叶斯个性化排序算法原理及实战

    排序推荐算法大体上可以分为三类,第一类排序算法类别是点对方法(Pointwise Approach),这类算法将排序问题被转化为分类.回归之类的问题,并使用现有分类.回归等方法进行实现.第二类排序算法 ...

  9. 贝叶斯个性化排序(BPR)

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

最新文章

  1. 第九章 大网高级   ASA 高级设置
  2. 计算机考研379分能进复试吗,考研423分复试被刷,因低级错误错失985大学,这种教训非常深刻...
  3. Android应用程序进程启动过程
  4. Spring Boot 静态资源映射与上传文件路由配置
  5. 一元三次方程重根判别式_许兴华——关于复数集中解一元二次方程的问题
  6. 蓝桥杯 ALGO-104 算法训练 阿尔法乘积
  7. Git版本控制:Gitlab及Coding.net的使用
  8. Sea Level Anomaly 和 Sea Surface Height Anomaly 的区别
  9. HTML注册表单的页面制作
  10. 大力呼吁国内Fil厂商利用IPFS技术赋能实体经济,实现数据安全存储,已十分重要且紧迫了
  11. gcc ------ 编译与链接选项及CFLAGS、LDFLAGS、LIBS
  12. EXCEL操作之:为纯数字编码添加前缀/后缀后以文本的方式保存
  13. PHP中的符号 -、= 和 :: 详解
  14. vue项目 报错 Extra semicolon (semi)
  15. 白炽灯护眼还是LED护眼?盘点专业护眼的LED护眼灯
  16. 彻底解决高版本 mac Kernel_task占CPU问题
  17. 学 Python 爬虫,你可以研究下 GoPUP, 一个用于学术研究的小爬虫库
  18. 手把手带你学python—牛客网python 机器学习 信息熵的计算
  19. 软件功能性测试的21种故障模型
  20. 新手坐高铁怎么找车厢_动车怎么找车厢和位置 动车的座位号是如何分布的

热门文章

  1. 平面设计文案个人简历
  2. 每日英语 Daily English
  3. 链表的10个题目——第2周打卡
  4. jenkins 接口自动化
  5. stream对象转map
  6. Vue中对拿到的数据进行A-Z排序
  7. 官网上下载xshell
  8. 想知道你的外网IP吗
  9. java 多态 接口_从零开始的Java日常: 多态,抽象类,接口
  10. 计算机发展带来怎么样的变化,科技发展带来的变化