跳转至

BPR

1 BPR使用背景

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

2 排序算法

排序推荐算法大体上可以分为三类,

第一类排序算法类别是点对方法(Pointwise Approach),这类算法将排序问题被转化为分类、回归之类的问题,并使用现有分类、回归等方法进行实现。

第二类排序算法是成对方法(Pairwise Approach),在序列方法中,排序被转化为对序列分类或对序列回归。所谓的pair就是成对的排序,比如(a,b)一组表明a比b排的靠前。

第三类排序算法是列表方法(Listwise Approach),它采用更加直接的方法对排序问题进行了处理。它在学习和预测过程中都将排序列表作为一个样本。排序的组结构被保持。

我们今天要讲的BPR就属于第二类排序算法

3 BPR特点

  1. 基于item-item推导出个性化i偏好排名。相对于一般的ranking,BPR强调个性化推荐。
  2. 推导用于评估个性化推荐ranking的优化条件即后验概率,并用Roc曲线来类比证实BPR-OPT的可行性。
  3. 为极大化BPR-OPT,提出了BPR-OPT的学习算法。基于随机梯度下降的learnBPR。
  4. 一般的推荐算法是强调用户对项目的打分,只存在用户和单个项目的关系,不去考虑两个项目对用户的影响力。而BPR则从u,i,j出发来求解u,i的大小。

显式反馈:用户对物品的评分,如电影评分

隐式反馈:用户对物品的交互行为,如浏览,购买等,现实中绝大部分数据属于隐式反馈,可以从日志中获取。

BPR是基于用户的隐式反馈,为用户提供物品的推荐,并且是直接对排序进行优化。

4 建模思路

4.1 定义

U代表所有的用户user集合;

I 代表所有的物品item集合;

S 代表所有用户的隐式反馈,S⊆U×I S。 如下图所示,只要用户对某个物品产生过行为,就标记为+ , 所有+ 样本构成了S 。那些未观察到的数据(即用户没有产生行为的数据)标记为? .

4.2 传统解决方式

在使用隐式反馈的情况下,我们会发现观察到的数据均为正例(因为用户对物品交互过才会被观察到),而那些没有被观察到的数据(即用户还没有产生行为的物品),分为两种情况,一种是用户确实对该物品没有兴趣(负类),另一种则是缺失值(即用户以后可能会产生行为的物品)。

传统的个性化推荐通常是计算出用户u对物品i的个性化分数xˆui ,然后根据个性化分数进行排序。为了得到训练数据,通常是将所有观察到的隐式反馈(u,i)∈S 作为正类,其余所有数据作为负类,如下图所示,左图为观察到的数据,右图为填充后的训练数据:

在填零的情况下,我们的优化目标变成了希望在预测时观测到的数据预测为1,其余的均为0. 于是产生的问题是,我们希望模型在以后预测的缺失值,在训练时却都被认为是负类数据。因此,如果这个模型训练的足够好,那么最终得到的结果就是这些未观察的样本最后的预测值都是0。

4.3 BPR解决方案