推荐系统三十六式学习笔记:原理篇.矩阵分解12|如果关注排序效果,那么这个模型可以帮到你

目录

  • 矩阵分解的不足
  • 贝叶斯个性化排序
    • AUC
    • 构造样本
    • 目标函数
    • 训练方法
  • 总结

矩阵分解在推荐系统中的地位非常崇高。它既有协同过滤的血统,又有机器学习的基因,可以说是非常优秀了;但即便如此,传统的矩阵分解无论是在处理显式反馈,还是 处理隐式反馈都让人颇有微词,这一点是为什么呢?

矩阵分解的不足

前面讲过的两种矩阵分解,本质都是在预测用户对一个物品的偏好程度,哪怕不是预测评分,只是预测隐式反馈,也是这个事实。

得到矩阵分解结果后,常常在实际使用时,又是用这个预测结果来排序。原来的目标是让模型的预测误差最小化,到最后还是只想要一个好点的排序。

这种针对单个用户对单个物品的偏好程度进行预测,得到结果后再排序的问题,在排序学习中的叫做:point-wise,其中point意思就是:只单独考虑每个物品,每个物品 像是空间中孤立的点一样。与之相对应的,还有直接预测物品两两之间相对排序的问题,叫做pair-wise ,pair顾名思义就是成对成双。

前面将的矩阵分解都属于point-wise模型。这类模型的尴尬是:只能收集到正样本,没有负样本,于是认为缺失值就是负样本,再以预测误差为评判标准去逼近这些样本。逼近正样本没有问题,但同时逼近的负样本只是缺失值而已,并不能确认用户到底是不喜欢还是喜欢。虽然这些模型采取了一些措施来规避这个问题,比如负样本采样,但尴尬还是存在的,为了排序而绕路也是事实。

既然如此,能不能直面问题,采用pair-wise 来看待矩阵分解呢?当然可以。实际上,更直接的推荐模型应该是:能够较好地为用户排列出更好的物品相对顺序,而非更精确的评分。

这个问题已经有专业的从业者们提出了方法:贝叶斯个性化排序,简称BPR模型。下面,我们就一探究竟。

贝叶斯个性化排序

在前面的专栏文章中,已提到均方根误差,用于评价模型预测准确度的。现在要关注的是相对排序,用什么指标比较好呢?AUC,全称是Area Under Curve,意思是曲面下的面积,这里的曲线是ROC曲线。

AUC

AUC 这个值在数学上等价于:模型把关心的那一类样本排在其他样本前面的概率。最大是1,完美结果,而0.5是书籍排列,0就是完美的全部排错。

这个非常适合来评价模型的排序效果,比如说,得到一个推荐模型后,按照它计算的分数,能不能把用户真正想消费的物品排在前面。这个模型上线前是可以用日志完全计算出来的。

AUC 怎么计算呢?一般步骤如下:

1、用模型给样本计算推荐分,比如样本都是用户和物品这样一对一对的,同时还包含了有无反馈的标识;

2、得到打过分的样本,每条样本保留两个信息,第一个是分数,第二个是0或者1,1标识消费过,是正样本,0标识没有,负样本;

3、按照分数对样本重新排序,降序排列;

4、给每一个样本赋一个排序值,第一位r1=n,第二位r2=n-1,以此类推;其中要注意,如果几个样本分数一样,需要将其排序值调整为他们的平均值;

5、最终按照下面的这个公式计算就可以得到AUC值;

A U C = ∑ i ∈ ( 样 本 ) T i − M ∗ ( M + 1 ) 2 M ∗ N AUC =\frac{\sum_{i∈(样本)}{T_i-\frac{M*(M +1)}{2}}}{M*N} AUC=M∗N∑i∈(样本)Ti−2M∗(M+1)

这个公式:

第一部分:分母是我们关心的那类样本,也就是正样本,有M个,以及其他的样本有N个,这两类样本相对排序总共的可能性有M*N种;

第二部分:分子是这样计算的:第一名的排序值是r_1,它在排序上不但比过了所有的负样本,而且比过了自己以外的正样本。

正样本和正样本是同一类,所以要排查,于是就有N-M 种组合,以此类推,排序值为rm的就贡献了rm-1,把这些加起来就是分子;

关于AUC,越接近1越好是肯定的,但是并不是越接近0就越差,最差的是接近0.5,如果AUC很接近0的话,只需要把模型预测的结果加个负号就能让AUC接近1;

BPR模型,它提出了一个优化准则和学习框架,那到底BPR做了什么事情呢?主要有三点:

1.一个样本构造方法;

2.一个模型目标函数;

3.一个模型学习框架;

构造样本

前面介绍的矩阵分解,在训练时候处理的样本是:用户、物品、反馈,这样的三元组形式;

其中反馈又包含真实反馈和缺失值,缺失值充当负样本。BPR则不同,提出要关心的是物品之间对于用户的相对排序,于是构造的样本是:用户、物品1、物品2、两个物品相对排序,这样的四元组形式,其中两个物品的相对排序,取值是:

1、如果物品1是消费过的,而物品2不是,那么相对顺序取值为1,是正样本;

2、如果物品1和物品2刚好相反,则是负样本;

3、样本中不包含其他情况:物品1和物品2都是消费过的,或者都是没消费过的。

学习的顺序是反应用户偏好的相对顺序,而在使用时,面对的是所有用户还没消费过的物品,这些物品仍然可以在这样的模型下取得相对顺序,这就比三元组point-wise 样本要直观得多。

目标函数

现在,每条样本包含的是两个物品,样本预测目标是两个物品的相对排序。BPR完成矩阵分解,依然需要像交替最小二乘那样的思想。

先假设矩阵分解结果已经有了,于是计算出用户对于每个物品的推荐分数,只不过这个推荐分数可能并不满足均方根误差最小,而是满足物品相对排序最佳。

得到了用户和物品的推荐分数后,就可以计算四元组的样本中,物品1和物品2的分数差,这个分数可能是正数,也可能是负数,还可能是0;

希望的情况是:如果物品1和物品2相对排序为1,那么希望两者分数之差是个正数,而且越大越好;如果物品1和物品2的相对排序时0,则希望分数之差是负数,且越小越好;

用个符号来表示这个差: X u 12 X_{u12} Xu12,表示的是对于用户u,物品1和物品2的矩阵分解预测分数差。然后再用sigmoid函数把这个分数差压缩到0到1之间。
θ = 1 1 + e ( − X u 12 ) θ=\frac{1}{1+e^{(-X_{u12})}} θ=1+e(−Xu12)1

用这种方式预测了物品1排在物品2前面的似然概率,所以最大化交叉熵就是目标函数了。目标函数通常还要防止过拟合,加上正则项,正则项其实认为模型参数有个先验概率,这也是BPR这个名字中有'贝叶斯'的来历。BPR认为模型的先验概率符合正态分布,对应到正则化就是说L2正则。

所有样本都计算:模型参数先验概率p theta ,和似然概率的乘积,最大化这个目标函数就能够得到分解后的矩阵参数其中theta就是分解后的矩阵参数。

这个目标函数化简和变形后,和把AUC当成目标函数是非常相似的,正因为如此,BPR模型宣称该模型是为AUC而生。

训练方法

有了目标函数之后,就要有训练方法。梯度下降可以,梯度下降又分为批量梯度和随机梯度两个选择,前者收敛慢,后者训练快但不稳定。

因此BPR使用了一个介于两者之间的训练方法,结合重复抽样的梯度下降。具体如下:

1、从全量样本中有放回地随机抽取一部分样本;

2、用这部分样本,采用随机梯度下降优化目标函数,更新模型参数;

3、重复步骤1,直到满足停止条件。

这样,就得到了一个更符合推荐排序要求的矩阵分解模型了;

总结

今天是矩阵分解三篇的最后一篇,传统的矩阵分解,无论是隐式反馈还是显示反馈,都是希望更加准确地预测用户对单个物品的偏好,而实际上,如果能够预测用户对物品之间的相对偏好,则更加符合实际需求的直觉。

BPR就是这样一整套针对排序的推荐算法,它事实上提出了一个优化准则和一个学习框架,至于其中优化的对象是不是矩阵分解并不是它的重点。但我在这里结合矩阵分解对其进行了讲解,同时还介绍了排序时最常用的评价指标AUC及其计算方法。

相关推荐
阿阳微客1 小时前
Steam 搬砖项目深度拆解:从抵触到真香的转型之路
前端·笔记·学习·游戏
Chef_Chen6 小时前
从0开始学习R语言--Day18--分类变量关联性检验
学习
键盘敲没电6 小时前
【IOS】GCD学习
学习·ios·objective-c·xcode
海的诗篇_7 小时前
前端开发面试题总结-JavaScript篇(一)
开发语言·前端·javascript·学习·面试
AgilityBaby7 小时前
UE5 2D角色PaperZD插件动画状态机学习笔记
笔记·学习·ue5
AgilityBaby7 小时前
UE5 创建2D角色帧动画学习笔记
笔记·学习·ue5
武昌库里写JAVA8 小时前
iview Switch Tabs TabPane 使用提示Maximum call stack size exceeded堆栈溢出
java·开发语言·spring boot·学习·课程设计
一弓虽9 小时前
git 学习
git·学习
Moonnnn.11 小时前
【单片机期末】串行口循环缓冲区发送
笔记·单片机·嵌入式硬件·学习
viperrrrrrrrrr712 小时前
大数据学习(131)-Hive数据分析函数总结
大数据·hive·学习