Bayesian Personalized Ranking 算法解析及Python实现 似然与几率的异同

1. Learning to Rank 

1.1 什么是排序算法

 为何google搜索 ”idiot“ 后,会出现特朗普的照片?html

 

“咱们已经爬取和存储了数十亿的网页拷贝在咱们相应的索引位置。因此,你输入一个关键字,咱们将关键词与网页进行匹配,并根据200多个因子对其进行排名,这些因子包括相关性、新鲜度、流行度、PageRank值、查询和文档匹配的单词个数、网页URL连接地址长度以及其余人对排序结果的满意度等。在此基础上,在任何给定的时间,咱们尝试为该查询排序并找到最佳结果。”算法

                                                —— GoogleCEO: 桑达尔·皮查伊 数组

1.2 排序算法的发展

1.2.1 早期排序技术

最先主要是利用词频、逆文档频率和文档长度这几个因子来人工拟合排序公式由于考虑因素很少,由人工进行公式拟合是彻底可行的,此时机器学习并不能派上很大用场,由于机器学习更适合采用不少特征来进行公式拟合。此外,对于有监督机器学习来讲,首先须要大量的训练数据,在此基础上才可能自动学习排序模型,单靠人工标注大量的训练数据不太现实。机器学习

1.2.2 基于机器学习的排序技术

对于搜索引擎来讲,尽管没法靠人工来标注大量训练数据,可是用户点击记录是能够当作机器学习方法训练数据的一个替代品,好比用户发出一个查询,搜索引擎返回搜索结果,用户会点击其中某些网页,能够假设用户点击的网页是和用户查询更加相关的页面。函数

1.3 Learning to RankLTR

机器学习排序系统由4个步骤组成:post

  1. 人工标注训练数据
  2. 文档特征抽取
  3. 学习分类函数
  4. 在实际搜索系统中采用机器学习模型

 

2. PointWise Approach

定义:单文档方法的处理对象是单独的一篇文档,将文档转换为特征向量后,机器学习系统根据从训练数据中学习到的分类或者回归函数对文档打分,打分结果便是搜索结果。学习

ScoreQD)=a×CSb×PMc×PR搜索引擎

 对于某个新的查询Q和文档D,系统首先得到其文档D对应的3个特征的特征值,以后利用学习到的参数组合计算二者得分,当得分大于设定的阈值,便可判断文档是相关文档,不然判断为不相关文档。 google

3. PairWise Approach 

对于左、右两张图,按照pointwise的思想,则认为这两条样本 i 和 j 都被点击,所以label都是1。但在右图包含更重要的信息 :用户只点了红框内的酒店,而没有点黄框内的酒店(右图黄框内的酒店和左图点击红框的酒店一致)。这说明样本 j 的 label应该比样本 i 的label大(样本 j 排名比样本 i 更靠前),很显然,pointwise并无利用到这个信息。url

对于搜索任务来讲,系统接收到用户查询后,返回相关文档列表,因此问题的关键是肯定文档之间的前后顺序关系。

单文档方法(PointWise Approach)彻底从单个文档的分类得分角度计算,没有考虑文档之间的顺序关系。

文档对方法(PairWise Approach)则将重点转向了对文档顺序关系是否合理进行判断。之因此被称为文档对方法,是由于这种机器学习方法的训练过程和训练目标,是判断任意两个文档组成的文档对<Doc1,Doc2>是否知足顺序关系,即判断是否Doc1应该排在Doc2的前面。

根据转换后的训练实例,就能够利用机器学习方法进行分类函数的学习: 输入一个查询和文档对<Doc1,Doc2>,机器学习排序可以判断这种顺序关系是否成立,若是成立,那么在搜索结果中Doc1应该排在Doc2前面,不然Doc2应该排在Doc1前面。经过这种方式,就完成搜索结果的排序任务。

  1. 文档对方法(PairWise Approach)只考虑了两个文档对的相对前后顺序,却没有考虑文档出如今搜索列表中的位置。排在搜索结果前列的文档更为重要,若是前列文档出现判断错误,代价明显高于排在后面的文档。
  2. 不一样的查询,其相关文档数量差别很大,因此转换为只有十几个对应的文档对,这对机器学习系统的效果评价形成困难。

4. ListWise Approach

1. 单文档方法(PointWise Approach)将训练集里每个文档当作一个训练实例。

2. 文档对方法(PairWise Approach)将同一个查询的搜索结果里任意两个文档对做为一个训练实例。

3. 文档列表方法(ListWise Approach)与上述两种表示方式不一样,是将每个查询对应的全部搜索结果列表总体做为一个训练实例,这也是为什么称之为文档列表方法的缘由。

4. 文档列表方法根据K个训练实例(一个查询及其对应的全部搜索结果评分做为一个实例)训练获得最优评分函数F。对于一个新的用户查询,函数F对每个文档打分,以后按照得分顺序由高到低排序,就是对应的搜索结果。

对于某个评分函数 f 来讲,对3个搜索结果文档的相关性打分,获得3个不一样的相关度得分F(A)、 F(B)和F(C),根据这3个得分就能够计算6种排列组合状况各自的几率值。不一样的评分函数,其6种搜索结果排列组合的几率分布是不同的。因此能够经过不一样的评分函数分布与实际分布比较得出最优的那个评分函数做为排序模型。如何判断 h 和 f 与虚拟的最优评分函数 g 更接近?通常能够用两个分布几率之间的距离远近来度量这种类似性,好比 KL散度等。

5. Bayesian Personalized Ranking

5.1 BPR介绍

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

 BPR算法的五个核心知识点:

  • 每一个⽤户之间的偏好⾏为相互独⽴
  • 同⼀⽤户对不一样物品的偏序,即排序关系相互独⽴
  • 表⽰⽤户u对 I 的偏好⼤于对 j 的偏好
  • 满⾜完整性,反对称性和传递性
  • 采用最⼤后验估计计算参数

 其中,完整性,反对称性和传递性的定义以下:

5.2 BPR参数

在推荐系统中,排序算法一般完成对候选商品的二次筛选,也叫Reranking。这里的BPR算法借鉴了召回步骤中协同过滤算法的思想: 矩阵分解 。

对于用户u:

对于全部用户:

其中用户矩阵W:

物品矩阵H:

5.3 BPR参数计算方法

BPR算法采用的是最大化后验几率来估计参数(关于什么是最大化后验几率,可移步个人另一篇文章:似然与几率的异同),所以,这里用到了贝叶斯公式。

以前已经假设每一个用户之间的偏好行为相互独立,同一用户对不一样物品的偏序相互独立,因此:

δ(b)函数返回1 若是条件b成立, 不然返回0。D为训练集, (u,i,j) 表示关系,即相对于j,用户u更喜欢 i 。

因为知足完整性和反对称性,因此上式可简化为:

其中,δ()为sigmod函数,用户 u 相比于 j 更喜欢 i 经过借助用户 u 对 i 的喜欢程度与对 j 的喜欢程度的差进行度量。

所以, 可表示为:

目标是求解θ。 因为采用最大后验估计来学习参数,因此假设θ服从正态分布:

根据几率密度函数,求得:

关于这个等式的推导,笔者尝试将几率分布带入到几率密度函数中,发现并不能推导出来,可是因为存在正比关系,因此能够近似等于。

因此,最终的后验几率估计函数为:

经过最大化这个函数,能够求出参数W和H。 

6. Bayesian Personalized Ranking算法实现

网上开源的BPR代码有不少,这里着重表达一下用户embedding矩阵和物品embedding矩阵,以及损失函数的构造。其中损失函数为最小化上一小节的最大后验几率函数。 

 7. 总结

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

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

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

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

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

相关文章
相关标签/搜索