推荐系统(7)-----多目标排序综述(转)+多任务学习(MTL)(转)
一、多目标排序(转)
1、概念
多目标排序:指有两个或两个以上的目标函数,目的是寻求一种排序使得所有的目标函数都达到最优或满意。
在工业界推荐系统中,大多是基于隐式反馈来进行推荐的,用户对推荐结果的满意度通常依赖很多指标(比如,淘宝基于点击,浏览深度(停留时间),加购,收藏,购买,重复购买,好评等行为的相关指标),在不同的推荐系统、不同时期、不同的产品形态下,这些指标的重要程度或者所代表的意义会有所不同,如何优化最终推荐列表的顺序来使得众多指标在不同的场景下尽可能达到最优或者满意,这是一个多目标排序问题。
2、为什么
因为工业界都基于隐式反馈进行推荐,因此在评估用户满意度的时候会有不同程度的偏差:
Global bias:不同目标表达不同的偏好程度。比如淘宝,购买表达的偏好程度要高于点击、浏览所表达的偏好程度;
Item bias:单个目标衡量不全面;
比如今日头条,仅以点击率为目标,可能会存在标题党;
比如抖音短视频,只是以视频播放完成度为目标,可能会存在设置悬念而后需要关注才能观看的视频,用户看完了可能也不满意;
还有微博,如果仅以转发分享为目标,但内容可能存在类似转发保平安,或者是拼多多之类的营销;
User bias:用户表达满意度的方式不同.比如淘宝,用户表示喜欢可能会以收藏或者加购的形式,不同的人偏好也不一样;
综合目标收益最大化。比如快手,要鼓励用户发布视频,该目标虽然与用户满意度不是那么相关,但对于平台的生态来说也是至关重要的,所以利用多目标可以兼顾更大的范围,使综合目标收益最大化。
3、解决多目标排序方案
- 多模型分数融合
- 排序学习(LTR)
- 多任务学习(MTL)
(1)多模型分数融合
多模型融合的方式也是比较经典传统的做法,每个目标训练一个模型,每个模型算出一个分数,然后根据自身业务的特点,通过某种方式将这些分数综合起来,计算出一个总的分数再进行排序,综合分数的计算通常会根据不同目标的重要性设定相应的参数来调节。
下面以类似淘宝的电商推荐系统为例,了解一下经典的多模型分数融合实现多目标排序的具体流程。
上图流程图展示的是一个工业界很常用的推荐流程,包括召回(Match)、排序(Rank)、重排序(Rerank)、推荐(Recommend)过程。
当完成召回候选阶段之后,就有了可供推荐的候选 Item,然后从数据库中获取 User 和 Item 特征(特征缓存),从参数服务器获取模型参数(权重缓存),就可以进行预估。这里假定淘宝有五个预估目标,分别是点击率 CTR、购买转化率 CVR、收藏率 collect,加购率 cart、停留时长 stay,这五个目标分别对应五个模型,排序阶段的作用就是利用模型根据各自目标来给候选 Item 计算一个预估值(分数),排序阶段结束每个 Item 都会有五个不同的目标预估分数,如何用这些分数,是交给下一个流程来处理的。
重排序模块有两个主要作用,一个是融合,也就是将排序阶段传递来的多个目标分数进行融合,形成一个分数,另外一个是约束,也就是规制过滤。
分数融合的一种思路是利用一个带参数公式来实现,如下:
可以发现,在计算 score 时,除了各个目标以及对应的参数外,公式中还多了两个部分,一个是价格 price 以及对应的参数 β,另外一个是规则权重 rule_wight。
公式中添加价格,是因为价格是影响最终满意度非常重要的一个因素,比如对于同一个物品,它的价格通常是随着营销策略浮动的,不同的价格转化率就会不同,因为在降价的时候,商品销量通常会明显升高;而对于不同物品,价格便宜的物品转化率也会更高,因为便宜的物品受众用户更广,试错成本也低,而一些比较昂贵的物品,受众用户较窄,试错成本很高,自然转化率就会较低,所以加入价格 price,可以很好的区分这些情况。
另外一个规则权重,其实是把规制过滤也放到了分数融合里面,当然有些场景下,规制过滤是单独的一个部分,这个单独的约束部分,可以称为规则系统(Rules),它也是推荐系统中非常重要的一环。
商品按最终预估分排序后,会进入规则系统依次进行核对,判断是否满足规则系统。这些规则可能包含如下几种:
① 同一 XX N 出 1:该规则主要目的是使推荐满足多样性、惊喜性等目标,比如同一个类目只能推一个,同一个品牌只能推一个,当然,这里的 1 也可以任意合理的数值;
② 活动扶持:比如最近在双十一活动,那么会推荐更多参与了活动的商品;
③ 新品扶持:新品刚上市,相关指标预估分会很低,或者面临冷启动问题,会有相应扶持;
④ 低俗打压:比如快手,不能因为部分低俗视频流量高,就过多曝光,这样会影响整个产品个人的印象,因此会打压低俗,进行产品调性的控制;
⑤ 流量控制:为了让流量更均匀的分发到各个商品上,发掘长尾,不能给某一商品过多展示的机会,比如限制某一商品一天只能曝光 100 万次。
有了公式,那么超参数(α,β,a,b,c 等)如果进行学习获取?
先假设没有上面的经验公式,我们很容易想到的一种思路是类似于集成学习中一种多模型融合方法 Stacking,即将多个目标模型预估出的结果作为输入,然后用一个简单的线性回归进行线性加权融合,学习到各个目标的权重,这样我们就可以预估综合分数了。但是我们却忽略了一个重要的问题,该如何设置样本的 Label 呢?事实上,并没有一个真实的综合分数可供我们去训练学习,因此,这种办法很难真正去实现。而在工业界,更多的做法是人工调试,但如此又会带来很多问题,比如模型灵活度不够。
这种经典的多模型分数融合方法,虽然易于理解和扩展,但也存在很多问题和难点:
-
部分目标数据稀疏,模型准确率低
比如相比点击率转化率样本数据稀疏;
-
在线服务计算量大
ranker 模块要对 5 个模型进行计算,代价可能比较大,参数、优化、维护都会成倍增加;
-
多个目标间重要性难以量化
不同的动作提供不同程度的反馈,但由于用户偏好不同,有些动作所代表的重要性很难量化,比如分享和评论在不同用户身上的重要性可能是不一样的;
-
分数融合的超参难以学习,两种解决思路:
-
人工标注为 Label
用显示反馈数据来学习隐式反馈的超参,但工业界收集显示反馈数据成本非常高,而且非常主观。
-
长期目标为 Label
推荐系统的一个核心目的是给企业带来长期收益,所以可以用长期目标作为 Label,比如客户留存率,但是长期目标周期长,学习模型需要很长时间来收集 Label,容易错失机会;另外就是用长期目标试错成本高,策略不好的话无法及时发现,也就无法及时更改,可能导致用户流失而不能及时有效挽回。
综合而言,还是人工调参更加现实。
-
-
规则不够智能化
比如规则 5 个只能出 1 个,但是可能客户就想买鞋,然而并没有推荐很多。传统的规则系统主要是基于全局的角度上考虑的,没有考虑到用户的上下文去分析即时需求,不够智能,可以考虑采用强化学习的方法。
-
前两个问题工业界解决体系比较完善,比如下面提到的另外两种方法,主要目的就是尽可能使多目标排序的预估更快更准,第三个问题偏产品设计,而最后两种并没有比较完善的解决方法。
(2)排序学习(Learning To Rank,LTR)
首先要明白一点,多模型融合中我们通过模型计算预估值或者是综合打分,其根本目的是为了给推荐物品排序,而不是真正的打分。因此我们可以使用排序学习方法来解决多目标问题,比如 BPR 或者 LambdaMART 算法,排序学习的概念和相关算法在之前的文章
