推荐系统笔记5:多目标排序

一、多⽬标排序介绍

1.1、 什么是多目标排序:什么是多目标排序,假设判断淘宝推荐系统的好坏,有点击率、浏览深度、加购/收藏、购买、重复购买/好评等,以上单个目标都可以作为衡量推荐系统的好坏标准;
1.2、 为什么要有多目标排序 ,常见的推荐的系统多见于隐式反馈:

  • 不同目标表达的偏好程度不一样;
  • 单个目标衡量不全面;(例如转发锦鲤,是因为真的喜欢还是随波逐流呢?)
  • 每个用户表达的满意度方式不一样;
  • 多目标可以使得综合收益最大化;

1.3、常见的多目标排序流程: 如下图所示,推荐系统笔记5:多目标排序_第1张图片
首先根据模型和数据库DB中的用户相关特征来预选出一部分用户,这部分用户先通过Rank排序,也就是多目标来衡量排序先后,常见的有CTR(点击率)、CVR(点击转化率)、collect(收藏)、stay(页面停留时间)等来使得多目标最大化,可使用下面等式来综合多目标: s c o r e = C T R ∗ ( α + C V R ) ∗ ( β + p r i c e ) ∗ s t a y a ∗ c a r t b ∗ c o l l e c t c ∗ r u l e … score = CTR * (α +CVR)*(β +price)*stay^a*cart^b*collect^c *rule… score=CTR(α+CVR)(β+price)stayacartbcollectcrule其中 α \alpha α等是权重超参数,那么rule是干什么用的呢?比如按照多目标排序好的物品以后,为什么不能直接按照排序好的结果推荐给用户呢?举个例子,比如你喜欢逛鞋子、衣服,可能多目标排序以后的结果就是一直是鞋子、衣服,少了推荐的新颖性,这也就是reranker的作用;通过设定一些rules,比如对于某个用户rank排序的10个结果中、通过新品扶持或者活动扶持,且最多允许有一个推荐的商品修改,如上图右边所示。
1.4、多目标排序的难点:

  • 部分⽬标数据稀疏,模型准确率低
  • 在线服务计算量⼤
  • 多个⽬标间重要性难以量化
  • 分数融合的超参难以学习
  • Rules不够智能化

二、Learning To Rank

2.1、如何解决排序问题呢?LTR(Learning To Rank)就是一种很好的解决办法。LTR算法主要包括三种类别:PointWise,PairWise,ListWise。详细见博客LTR介绍。

  • PointWose方法主要使用传统的分类、回归等方法来对用户进行推荐,比如矩阵分解,是由一个绝对分数来衡量排序关系,实际上在排序中,排在最前的几个物品对排序效果的影响非常重要,Pointwise没有考虑这方面的影响。
  • Pairwise方法考虑给定用户,两个物品之间的相对相关度。亦即给定用户一个喜欢的物品序列,我们只需要考虑任意两个相关度不同的物品之间的相对相关度: d i > d j d_i>d_j di>dj,或者 d i < d j d_i<d_j di<dj。但有的Pairwise方法没有考虑到排序结果前几名对整个排序的重要性,也没有考虑不同用户对应的物品集合的大小对用户推荐结果的影响。
  • Listwise方法直接考虑给定用户的推荐物品集合的整体序列,直接优化模型输出的物品集合序列,使得其尽可能接近真实物品集合序列。比如LambdaMart方法;

上述三种方法如下图所示:推荐系统笔记5:多目标排序_第2张图片

2.2、LTR常用的评价指标:

  • MAP(Mean Average Precision)推荐系统笔记5:多目标排序_第3张图片
    如上图右边所示,蓝色表示预测匹配的,是1、2、4,那么MAP最终计算结果为0.92;
  • F1-score: 通过准确率和召回率来评判预测结果,如下公式所示:推荐系统笔记5:多目标排序_第4张图片
  • AUC: AUC表示预测为1的占据真实标签为1的rank排序,其计算公式如下: A U C = ∑ i ∈ P o s c l a s s r a n k i − M ( M + 1 ) 2 M × N {\rm{AUC}} = {{\sum\nolimits_{i \in Posclass} {ran{k_i} - {{M(M + 1)} \over 2}} } \over {M \times N}} AUC=M×NiPosclassranki2M(M+1)
  • nDCG(Normalized Discounted Cumulative Gain):计算公式如下,具体详情见博文nDCG。
    推荐系统笔记5:多目标排序_第5张图片

2.3、不同的排序算法

2.3.1、Bayesian Personalized Ranking:贝叶斯个性化排序基于如下假设,

  • 每个⽤户之间的偏好行为相互独⽴
  • 同⼀⽤户对不同物品的偏序相互独⽴
  • i > u j i{ > _u}j i>uj表示⽤户u对i的偏好大于对j的偏好
  • > u >u >u满⾜完全性,反对称性和传递性,其中>u符号表示用户u的偏好
    详细公式推导见博文:贝叶斯个性化排序博文。

为什么需要使用贝叶斯个性化排序呢? 在很多推荐场景中,我们都是基于现有的用户和商品之间的一些数据,得到用户对所有商品的评分,选择高分的商品推荐给用户,这是MF之类算法的做法,使用起来也很有效。但是在有些推荐场景中,我们是为了在千万级别的商品中推荐个位数的商品给用户,此时,我们更关心的是用户来说,哪些极少数商品在用户心中有更高的优先级,也就是排序更靠前。也就是说,我们需要一个排序算法,这个算法可以把每个用户对应的所有商品按喜好排序。
2.3.2、RankNet:Ranknet提供了一种基于Pairwise的训练方法,Cost function是RankNet算法的核心,首先需要定义预测相关性概率: p i j = p ( u i > u j ) = 1 1 + e − σ ( s i − s j ) {p_{ij}} = p({u_i} > {u_j}) = {1 \over {1 + {e^{ - \sigma ({s_i} - {s_j})}}}} pij=p(ui>uj)=1+eσ(sisj)1以及真实相关性概率 : p ˉ i j = 1 2 ( 1 + s i j ) {\bar p_{ij}} = {1 \over 2}(1 + {s_{ij}}) pˉij=21(1+sij)也就是说如果 u i > u j {u_i} > {u_j} ui>uj,那么预测应该p>0.5;对于一个排序,排序的效果越好,那么有错误相对关系的pair就越少。所谓错误的相对关系即如果根据模型输出 U i U_i Ui排在 U j U_j Uj前面,但真实label为 U i U_i Ui的相关性小于 U j U_j Uj,那么就记一个错误pair,RankNet就是以错误的pair最少为优化目标。对于每一个pair,我们使用交叉熵来度量其预测代价: C = − p ˉ i j log ⁡ ( p i j ) − ( 1 − p ˉ i j ) log ⁡ ( 1 − p i j ) C = - {{\bar p}_{ij}}\log ({p_{ij}}) - (1 - {{\bar p}_{ij}})\log (1 - {p_{ij}}) C=pˉijlog(pij)(1pˉij)log(1pij) C = 1 2 ( 1 − S i j ) σ ( s i − s j ) + log ⁡ ( 1 + e − σ ( s i − s j ) ) C= {1 \over 2}(1 - {S_{ij}})\sigma ({s_i} - {s_j}) + \log (1 + {e^{ - \sigma ({s_i} - {s_j})}}) C=21(1Sij)σ(sisj)+log(1+eσ(sisj))然后通过梯度下降算法反向传播便可以求得参数的值,即在这里插入图片描述
为,相关博文见RankNet和LambdaNet详细分析
2.3.3 LambdaNet:RankNet算法是以错误pair最少为优化目标的,然而许多时候仅以错误pair数来评价排序的好坏是不够的,像nDCG这个评价指标就只关注TopK个结果的排序,当我们采用RankNet算法时,往往无法以这些指标为优化目标进行迭代。几个例子来说:
推荐系统笔记5:多目标排序_第6张图片
上图右边以箭头展示了RankNet和LambdaNet的下一轮迭代的调序方向和强度(箭头长度),黑色箭头表示RankNet算法下 U 4 U_4 U4 U 10 U_{10} U10的调序方向和强度,红色箭头表示以NDCG为优化目标的LambdaNet算法下的调序方向和强度。所以对于LambdaNet来说,它更关注位置靠前的优质⽂档的排序位置的提升。
RankNet优化的是逆序对的个数,上图中的逆序对个数左边是13,右边是11,从这个角度来看,右边的结果优于左边结果,但如果针对nDCG指标来说,左边的结果>右边的结果,所以能否优化不连续的nDCG指标呢?当然可以:

  • 在训练模型的时候只需要用到梯度,而不是损失函数本身
  • 直接定义损失函数的梯度:lambda梯度

也就是将RankNet的 λ i j \lambda_{ij} λij
在这里插入图片描述
变换为下式所示:
推荐系统笔记5:多目标排序_第7张图片
2.3.4、LambdaMART: 其中MART的全称是multiple additive regression tree,且 L a m b d a M a r t = M A R T + L a m b d a N e t LambdaMart = MART + LambdaNet LambdaMart=MART+LambdaNet 类似于GBDT,它的训练形式如下所示,相当于每一步拟合上一步的残差(也就是当前模型的负梯度方向),和GBDT不同的地方在于梯度是不一样的;
推荐系统笔记5:多目标排序_第8张图片
2.3.4、LTR的优劣:

  • 优势:

    • 直接优化排序目标,排序效果好
    • 单模型融合多目标,serving压力小
  • 劣势

    • 样本数量大,训练速度慢
    • 有些偏序关系不容易构造
    • 多目标间的关系不易调整

三、Multi-task learning

以一幅图来对比单任务学习和多任务学习:推荐系统笔记5:多目标排序_第9张图片
多任务学习类似迁移学习:1、多个任务具有相似性,可以共享底层特征;2、解决数据稀疏问题;3、不同模型善于学习不同特征,特征学习更充分;4、因共享参数的引入,使得多任务学习需要更少的资源,且模型表现更好。

你可能感兴趣的:(机器学习,数据挖掘,推荐系统)