sum 去重_推荐Rerank二次重排序算法

8be9e2128821a37bc1043502791911b5.png

推荐的Rerank排序有两种情况,一个是离线计算的时候为每个用户提前用Rerank排序算法算好推荐结果,另一个是在实时在线Web推荐引擎里做二次融合排序的时候。但不管哪一种用到的算法是一样的。比如用逻辑回归、随机森林、神经网络等来预测这个商品被点击或者被购买的可能性的概率,用的模型都是同一个,预测的时候是对特征转换做同样的处理。一般封装一个通用方法供离线和在线场景调用。

1.基于逻辑回归、随机森林、神经网络的分类思想做二次排序

做二次排序之前首先得有一个候选结果集合,简单来说,为某个用户预测哪个商品最可能被购买,不会把所有的商品都预测一遍,除非你的数据库所有商品总共就有几千个。实际上电商网站的商品一般都是多少万量级,甚至几百万SKU。都预测一遍的话,估计跑完都不知道什么时候。所以一般处理的方法都是在一个小的候选集合上产生的。这个候选集合你可以认为是一个粗筛选。当然这个粗筛选也不是你想象的那么粗,其实也是通过算法得到,精准度也是非常不错的。只是通过Rerank二次重排序算法把精准度再提高到一个台阶。至于推荐效果能提高多少,要看你在特征工程上、参数调优是不是做的好。但一般来说推荐效果能提升10%以上,就认为优化效果非常显著了。当然最高提升几倍也是有可能的。

逻辑回归、随机森林、神经网络这些算法我们在前几章已经讲过,在广告系统里可以做点击率预估的二次排序,在推荐系统可以做被购买的概率预估。

2.基于Learning to rank排序学习思想做二次排序

Learning to Rank排序学习是推荐、搜索、广告的核心方法。排序结果的好坏很大程度影响用户体验、广告收入等。排序学习可以理解为机器学习中用户排序的方法,是一个有监督的机器学习过程,对每一个给定的查询-文档对,抽取特征,通过日志挖掘或者人工标注的方法获得真实数据标注。然后通过排序模型,使得输入能够和实际的数据相似。

常用的排序学习分为三种类型:PointWise、PairWise和ListWise。

1)PointWise

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

2)PairWise

对于搜索或推荐系统来说,系统接收到用户査询后,返回相关文档列表,所以问题的关键是确定文档之间的先后顺序关系。单文档方法完全从单个文档的分类得分角度计算,没有考虑文档之间的顺序关系。文档对方法则将重点转向量对文档顺序关系是否合理进行判断。之所以被称为文档对方法,是因为这种机器学习方法的训练过程和训练目标,是判断任意两个文档组成的文档对<D0C1,D0C2>是否满足顺序关系,即判断是否D0C1应该排在DOC2的前面。常用的PairWise实现有SVM Rank、RankNet、RankBoost。

3)ListWise

单文档方法将训练集里每一个文档当做一个训练实例,文档对方法将同一个査询的搜索结果里任意两个文档对作为一个训练实例,文档列表方法与上述两种方法都不同,ListWise方法直接考虑整体序列,针对Ranking评价指标进行优化。比如常用的MAP, NDCG。常用的ListWise方法有:LambdaRank、AdaRank、SoftRank、LambdaMART。

4)Learning to rank指标介绍

(1)MAP(Mean Average Precision):

假设有两个主题,主题1有4个相关网页,主题2有5个相关网页。某系统对于主题1检索出4个相关网页,其rank分别为1, 2, 4, 7;对于主题2检索出3个相关网页,其rank分别为1,3,5。对于主题1,平均准确率为(1/1+2/2+3/4+4/7)/4=0.83。对于主题2,平均准确率为(1/1+2/3+3/5+0+0)/5=0.45。则MAP= (0.83+0.45)/2=0.64。

(2)NDCG(Normalized Discounted Cumulative Gain):

一个推荐系统返回一些项并形成一个列表,我们想要计算这个列表有多好。每一项都有一个相关的评分值,通常这些评分值是一个非负数。这就是gain(增益)。此外,对于这些没有用户反馈的项,我们通常设置其增益为0。现在,我们把这些分数相加,也就是Cumulative Gain(累积增益)。我们更愿意看那些位于列表前面的最相关的项,因此,在把这些分数相加之前,我们将每项除以一个递增的数(通常是该项位置的对数值),也就是折损值,并得到DCG。

在用户与用户之间,DCGs没有直接的可比性,所以我们要对它们进行归一化处理。最糟糕的情况是,当使用非负相关评分时DCG为0。为了得到最好的,我们把测试集中所有的条目置放在理想的次序下,采取的是前K项并计算它们的DCG。然后将原DCG除以理想状态下的DCG并得到NDCG@K,它是一个0到1之间的数。你可能已经注意到,我们使用K表示推荐列表的长度。这个数由专业人员指定。你可以把它想像成是一个用户可能会注意到的多少个项的一个估计值,如10或50这些比较常见的值。

对于MAP和NDCG这两个指标来讲,NDCG更常用一些。Learning to Rank和基于监督分类的思想做Rerank二次排序总体效果是差不太多的,关键取决于特征工程和参数调优。

3.基于加权组合的公式规则做二次排序

除了用上面的机器学习做二次排序外,也可以用比较简单的方式做二次排序。虽然这种方式简单,但不一定就代表这种方式的推荐效果差。对于推荐系统来讲,最终的是看购买转换率,哪个算法或者策略能带来更多的销量,就是好算法。

讲Redis缓存的时候提到的猜你喜欢,为了满足用户新鲜感性,能够实时的反馈用户最近的兴趣变化,在线web网站展示推荐结果的时候,会实时调用推荐的Web接口,根据最近看过、听过的课程ID,然后再拿课程ID从看了又看类似的推荐结果对多个推荐列表的融合二次排序,这个融合就是我们前面提到的加权组合策略:

一种用于加权组合策略的经典公式:

假如现在有3个商品,每个商品推荐6个商品,那么某被推荐商品R的综合得分如下:

Sr = sum(1/(Oi+C))

其中,O1-O3分别表示商品R在三个商品中的推荐次序,C为平衡因子,可设为0,也可大点,最终从排序结果看被推荐商品的Sr值的分值越高排序越靠前。

此公式同样适用于对多个推荐算法列表的整体聚合排序。

我们做的二次排序就是把多个推荐列表按不同权重混合成一个总的推荐列表,其中包括去重打分。但除了基本的组合还会加入其他的一些因素进去,比如听课的权重大于看过课的权重,访问时间最新的大于旧的的时间权重,最终算出一个打分排序。大概就是根据用户最近的行为,实时算出一个新的结果,实时的融合去重,实时的二次重排序。.

总体来看,在多个推荐列表融合二次排序的时候,多个列表重复投票推荐的那个商品会优先排到前面,越是和最近查看和购买的相关商品会优先排在前面,这是一个随时间衰减的权重的结果。

82b01dcf0d18e998fefd7a42e5abbe90.gif

除了推荐Rerank二次重排序算法☞https://ke.qq.com/course/981620?flowToken=1028971

其它深度学习框架也有不错的开源实现,比如MXNet,后面请大家关注充电了么app,课程,微信群,更多内容请看新书《分布式机器学习实战(人工智能科学与技术丛书)》

《分布式机器学习实战》本书对应清华大学出版社京东自营链接地址:

https://item.jd.com/12743009.html

Python编程零基础小白快速入门必听课

https://ke.qq.com/course/package/29782?flowToken=1028733

知乎视频​www.zhihu.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值