民工心事 发表于 2024-5-20 18:05:12

推荐系统:精排多目标融合与超参数学习方法

帕累托最优指的是这样一种社会状态:当且仅当不减少其他人的效用就无法增加任何一个人的效用时,这种社会状态就称之为帕累托最优。
1 导引

1.1 推荐系统基本架构

在介绍多目标融合模块之前,我们先来回顾一下推荐系统的基础架构,以及多目标融合模块在推荐系统中所处的基本位置。一种在各大厂(如快手、美团、阿里飞猪等)中常见的“多层漏斗型”推荐系统架构如下:
https://images.cnblogs.com/cnblogs_com/blogs/538207/galleries/2040807/o_4cea249e.png
上述过程中,召回、粗排、精排+多目标融合、序列/多样性重排、异构混排是在服务端进行(此中异构混排亦有放在移动端的),端上重排是在移动端进行。下面大致介绍一下这些步调的作用:

[*]召回 召回是推荐系统的第一步,负责快速从大量的物品中筛选出一部分候选物品,将样本数量由万万/百万级降到1万左右。召回并不需要非常正确,但需要不漏掉用户可能喜欢的物品。召回模块通常采用多路召回,且受限于巨大的样本量,一般会使用一些简化的特征或模子。经典召回模子包括协同过滤、FM、DSSM双塔模子等,针对序列数据和图数据,亦有序列模子SASRec和图模子GraphSAGE等。召回是源头,在某种意义上决定着整个推荐系统表现的天花板。
[*]粗排 粗排可以理解为精排前的一轮过滤机制,减轻精排的压力,将样本数量从从1万左右降到1千/几百。设置粗排模块的原因是有时候召回结果还是太多,精排层的速度跟不上。粗排要同时兼顾精准性和低延迟,其模子一般也不会太复杂。最后,由于粗排处于召回和精排之间,因此粗排需要获取和利用更多后续链路的信息来提升效果,粗排和精排的联动也成为实际工程中所需要面临的挑衅。
[*]精排( + 多目标融合) 精排负责获取粗排的结果,并对候选集进行打分和排序。精排需要在最大时延允许的情况下,保证打分的精确性,是整个系统中至关紧张的一个模块,也是最复杂、研究最多的一个模块。不同于粗排常常使用简朴的双塔模子,精排在特征和模子上都会做的比较复杂。目前,精排模子已被深度学习模子“一统天下”,包括Wide&Deep、DeepFM、DIN等,亦会使用Attention(如DIN)、对比学习、迁移学习等机制来进步模子精度。由于在工业界的实践中常常有多个线上指标,故又常使用深度多使命学习(MTL)模子。最后,由于精排关注的是物品的排序,所以其loss亦不同于常见的loss,常依据排序学习(Learning to Rank)策略来进行设计。而LTR方法按照样本生产方法和损失函数loss的不同,又分为pointwise形式和pairwise形式这两类。
[*]重排 重排模块的使命是对之前排序模块的结果进行二次排序或调整,以进一步进步推荐的正确度和个性化水平。重排所要处理的问题包括序列价值最大化(也即所谓listwise、不同于单item效果的累计)、增加推荐列表的多样性等等。重排一般是做打散或满意业务运营的特定强插需求,同样不会使用复杂的模子。别的,重排还可能在移动端上,即所谓端上重排。
[*]混排 混排的使命在于将多源异构内容(比如视频和广告)的返回结果进行恰当组合,得到一个综合价值最大的返回序列。
1.2 多目标融合(MTF)简介

不同于学术界只思量点击ratings预估的做法(即将推荐系统建模为简朴的二分类问题,然后离线评估算单个AUC或者HR/MRR啥的),推荐系统的优化目标在工业界的实践中常常是有多个的(且大多为线上指标),尤其是短视频推荐场景。以短视频推荐场景为例,在推荐系统的排序建模过程中,我们需要提升用户的使用时长/正向反馈,减少负向反馈,从而进步用户的留存。短视频推荐场景中的用户反馈可分为四类:

[*]隐式正反馈 用户在偶然间的举动,如播放时长、播放完成率、完播、复播等等。
[*]显式正反馈 用户有意识地做出的反馈,如收藏、下载、关注、点赞、发表正向评论等等。
[*]隐式负反馈 用户隐式表达的负反馈,如短播放、用户终止一次session等。
[*]显式负反馈 用户显式表达的负反馈,如不感兴趣、负向评论、举报等。
我们的目标是进步正向反馈、减少负向反馈,进步用户体验。然而,我们之前说过,粗排/精排的个性化多使命学习模子,能预估20多个不同的预估值,如点击率、有用播放率、播放时长、点赞率、关注率等,那怎样用它来排序呢?从多使命学习到多目标排序,中间有一个过渡,即怎样把这些预估值融合成一个单一的排序分,最后实现多目标精排。这也就引入了本文要介绍的正题:多目标融合(multi-task fusion, MTF)。
https://images.cnblogs.com/cnblogs_com/blogs/538207/galleries/2040807/o_240512110314_%E5%A4%9A%E7%9B%AE%E6%A0%87%E8%9E%8D%E5%90%88.png
如上图所示,多目标融合模子在精排MTL模子输出多个预估分数(对应上述各种用户的反馈)之后,对多个预估分数进行融合,随后根据融合的打分进行精排,并输入到后续的重排模块。
2 多目标融合方法介绍

2.1 手工融合

最简朴的多目标融合方式就是手工融合,一般包括线性加法、指数乘法两种:

[*]线性加法
线性加法的融合公式如下:

\[\text{score} = \sum_{i=1}^n w_i\space \text{score}_i\]
这里\(\text{score}_i\)为精排的多使命模子对第\(i\)项目标的预估分数,包括观看动作、喜欢、观看时间等目标的预估分数。
线性加法还有许多变种,比如采用加权Logloss:

\[\text{score} = \sum_{i=1}^n w_i\space \log \text{score}_i\]
线性加法的优点在于其目标权重就指示了目标在融合公式中的紧张度,直观上哪个目标更紧张我们就将哪个目标的权重调大。固然其缺点也非常显着,这个权重系数对于所有类型的目标都是一视同仁的。事实上对于点赞这种希奇目标,理论上应该让预估分数高的权重更高(活跃的用户权重更高),预估分数低的权重更低(不活跃用户的权重更低),但上述形式的目标显然做不到。
[*]指数乘法

\[\text{score} = \prod_{i=1}^n \space \text{score}_i^{w_i}\]
和线性加法基本一样,唯一的区别是把累加换成了累乘。其优点和缺点正好和线性加法相反:其优点是可以做到增强高的预估分数、克制低的预估分数;其缺点是不能调大单一目标的指数权重,由于假如简朴地给单一目标增大指数那就相当于对所有目标都生效了(等价于融合公式整体乘一个系数)。
爱奇艺在多目标融合的初期实践中采用的就是加法融合的方式,但这样产出的排序得分对各子目标的得分值域很敏感(也即容易被某些显著偏大的目标所主导,比如点赞这种目标就可能存在一些显着偏大的异常值),因此他们增加了\(\alpha\)和\(\beta\)两个超参数,来联合调节各子目标得分的敏捷度与提升比例,也就得到了如下所示的带权指数加法的公式形式:

[*]带权指数加法
\[\text{score}=\sum_{i=1}^n \text{factor}\cdot\left(\alpha_i+\text{score}_i\right)^{\beta_i}\]
这里\(\text{factor}\)为超参数,表示组合权重;\(\beta\)为超参数,用于提升比例与非线性处理;\(\alpha_i\)亦为超参数,表示敏捷度。
爱奇艺在工程实践中发现,在业务目标较少时,通过加法融合公式新增目标可以短期内快速获得收益。但随着目标逐渐增多时,加法融合公式的融合能力会逐渐受限。这是由于对加法融合公式而言,新增目标后,各子目标的紧张性影响会削弱。别的,哪怕是已经增加了超参数\(\alpha\)和\(\beta\)的情况下,加法融合公式仍然容易被最大的目标主导。不过,乘法融合公式就不存在这些问题。因此,在此基础上,爱奇艺又把多目标融合公式调整为了乘法:

[*]带权指数乘法

\[\text{score}=\prod_{i=1}^n \text {factor}\left(\alpha_i+\text{score}_i\right)^{\beta_i}\]
这里公式参数含义与上述公式一致,只是把累加换成了累乘。
手工融合的优点在于其目标权重就指示了目标在融合公式中的紧张度,比较直观且可解释性强。固然其缺点也非常显着,这个权重系数对于所有用户都是一样的,缺少个性化。别的,这里无论对预估分数使用加法还是乘法的方式来融合,模子serving时的超参数均是通过网格搜索(grid search)来得到离线最优的几组解。而我们知道,推荐系统的实际表现还需要线上A/B实验才能确定的,这导致该方法服从较低。而且随着模子的迭代与样本分布的变化,最优参数也在变化。最后,手工融合的缺点还表现于维护成本高(由于常常要进行多次的手工调整)。
那么,我们是否可以用模子来学习超参数呢?这就涉及到了融合超参数的学习方法了,也即用一个模子来学习各预估分数的组合权重。
对于融合超参数的学习方法而而言,最容易想到的应该是离线方法,也就是用一个离线模子来学习各预估分数的组合权重。这种方法的优点和缺点都很显着,分别如下所示:

[*]优点 离线方法是off-policy的方法,数据利用率高(100%样本都可以被使用),且模子的自由度和复杂度较高,可以容纳item embedding并使用希奇异征,可以训练千亿规模的参数。
[*]缺点 优化的离线AUC无法直接反映业务指标。由于这个过程做了很多简化,推荐系统不是精排之后就直接对接用户了,中间还有重排(比如多样性)等的影响,甚至还有一些贸易化/运营流量的混排融合,所以该方法难以思量到线上复杂多模块间的完备影响。别的,线下训练数据和线上数据也存在分布不一致的问题。
思量到离线超参数学习方法具有的上述的缺点,在实际工业界的应用中,我们常常使用在线的超参数学习方法。在线方法的工作流程如下图所示:
https://images.cnblogs.com/cnblogs_com/blogs/538207/galleries/2040807/o_240514155602_%E5%9C%A8%E7%BA%BF%E8%B6%85%E5%8F%82%E6%95%B0%E5%AD%A6%E4%B9%A0%E7%AE%97%E6%B3%95%E7%A4%BA%E6%84%8F%E5%9B%BE.png
可以看到,在线超参数学习算法基于探索与利用机制,会在baseline附近探索生成\(N\)组参数,传给推荐系统后获得这\(N\)组参数对应的展现给用户的差别化排序结果,从而获得不同用户的反馈。之后再收集这些反馈日记并做收益(reward)统计,终极送给BayesOpt/ES/CEM等调参算法产生下一组更好的参数。经过不停迭代,参数就会向一个多目标协调最优的方向前进。
在线的超参数学习方法具有以下优缺点:

[*]优点 直接优化线上指标,机动性高且反馈迅速,并且可以把推荐系统当做一个黑盒,无需关心内部细节。且可以做多场景联合优化,不限于ranking,在召回等场景也可以用。
[*]缺点 需要在线上划分出一部分探索流量(大约5%),从而影响少部分用户体验,且由于数据希奇,受噪声影响较大,尤其是一些希奇的动作标签,比如分享、下载、收藏等;能容纳的参数量较小,一般几十到数百,相对离线学习的参数规模小很多。
常见的在线超参数学习方法包括贝叶斯优化方法(Bayesian optimization)、进化策略算法(evolutionary strategy)、CMA-ES自适应进化算法等,下面我们重要介绍贝叶斯优化方法和进化学习算法。
2.2 融合超参数学习方法

2.2.1 贝叶斯优化算法

贝叶斯优化算法充分思量了真实的线上收益,通过收集多组小流量经验,基于小流量实验的评估结果来进行参数优化。
贝叶斯优化的基本思想在于由于真实优化函数计算量太大或是个黑盒(比如推荐场景中用户的真实反馈收益),我们需要用一个代理函数(surrogate function) 来近似它。而在代理函数四周可能是最小值点的附近,或者是在还没有采样过的区域采样新的点之后,我们就可以更新代理函数,使之不停逼近目标函数。我们常采用高斯过程(Gaussian process, GP) 来建模概率代理函数的分布,然后再设计一个采集函数(acquisition function),基于高斯过程回归的结果来计算下一组可能更优的采样点(使采集函数最大化)。注意:这里之所以使采集函数最大化,而不是直接使代理函数最大化,由于直接优化代理函数过于目光短浅了,由于我们还要思量不确定性。事实上,这也是一种探索(exploration)机制的表现。贝叶斯优化与网格搜索的不同之处在于,它在实验新的超参数组合时会思量之前的评估结果(即利用了证据,即evidence的信息来估计代理函数的后验分布),并基于代理函数来求解采集函数的极值,从而确定下一个采样点。
贝叶斯优化包含两个关键组成部分:

[*]概率代理模子 用于对代理函数的分布进行建模,在迭代开始前初始化为一个指定的先验分布。常用的概率代理模子有:高斯过程(GP)、树形Parzen估计器(tree-structured parzen estimator, TPE)、神经网络、决策树等。
[*]采集函数\(u\) 采集函数用于衡量每一个点值得探索的水平。每轮迭代算法会基于现有的高斯过程,从候选集中选择下一步的迭代点以使得采集函数最大化。贝叶斯优化效果受采集函数的影响较大,选择不合适的话容易陷入局部最优解。采集函数的选取可以看做一个探索-利用问题,常用采集函数包括置信区间上界(Upper Confidence Bound, UCB)方法、POI方法、EI方法等(此中最为简朴易用的是UCB方法)。
首先,算法会初始化一个代理函数的先验分布,然后开始迭代。算法的第\(t\)步迭代的伪代码描述如下:

[*]通过优化采集函数\(u\)以获得\(x^{t+1}\):\(x^{t+1}=\text{arg max}_{x} \space u(x\mid \mathcal{D}^{t})\)。
[*]通过用户的在线反馈收益\(r\)(对应贝叶斯优化中的目标函数)得到\(y^{t+1}\)。
[*]对数据进行增广:\(\mathcal{D}^{t+1} = \{\mathcal{D}^t,\quad (x^{t+1},\quad y^{t+1})\}\)。
[*]更新概率代理模子(如高斯过程回归),得到一个代理函数的后验分布(做为下一步迭代的先验分布)。
算法流程示意图如下:
https://images.cnblogs.com/cnblogs_com/blogs/538207/galleries/2040807/o_0e1ff3b8.png
注意,在实际的推荐系统场景中,我们用于定义高斯过程的代理函数就是我们之前所定义的融合幂乘函数,即\(\text{score} = \prod_{i=1}^n \space \text{score}_i^{w_i}\)。具体在短视频推荐场景中,\(\text{score}_i\)可能为用户time、like、follow等举动的预估分数。用户的在线反馈收益\(r\)可以设定为单次屏幕革新中的点赞率、匀称视频播放时长等,样本聚集\(\mathcal{D}=\{(x, y)\}\),这里\(x =(w_1, w_2, \cdots, w_n), y=r\)。
2.2.2 进化策略(ES)算法

前面陈诉的基于贝叶斯优化的多目标融合算法固然解决了手工融合的许多问题,但模子的参数(即多目标融合参数)仍然是单一的,不够个性化,亦不具备动态情况与上下游自适应性。
由于现在多目标融合参数量非常大(有的甚至达到了百级别),我们需要一种更高效、更主动化的方式来优化超参数,从而能够动态调整不同人群的单目标优化参数。因此,人们提出使用进化策略算法,以线上实时的真实收益为指引,对模子的参数进行优化。
注意,进化学习与强化学习的优化目标都是预期的reward,但强化学习是将噪声加入动作空间并使用反向传播来计算参数更新,而进化策略则是直接向参数空间注入噪声。
https://images.cnblogs.com/cnblogs_com/blogs/538207/galleries/2040807/o_7978382f.png
如上图所示,使用进化学习算法,线上对模子参数进行扰动,根据扰动后的结果来计算reward(常设置为人均或单刷的停留时长/播放时长/深度消费等关键业务指标),并离线进行小时级模子训练。观察到较优模子参数组合后,则更新线上的baseline模子参数。
进化算法第\(t\)轮模子迭代伪代码如下:

[*]采样噪声 \(\varepsilon_1, \cdots, \varepsilon_n \sim \mathcal{N}(\boldsymbol{0}, \boldsymbol{I})\)。
[*]计算reward \(r_i = r (\theta_t + \sigma \varepsilon_i),\space \text{for}\space i = 1, \cdots, n\)。
[*]令\(\theta^{t+1} = \theta^t + \alpha \frac{1}{n\sigma}\sum_{i=1}^nr_i\varepsilon_i\)。
在工程实践中,该方法常常面临怎样权衡reward的问题。以短视频推荐场景为例,我们常常关注单次屏幕革新中的匀称播放时长、产生交互举动(喜欢、关注等)的比率,那么我们就有以下两种结合方式:

\[\begin{aligned}\text{reward} &= \alpha \cdot \text{avg}\_\text{time} + \beta \cdot \text{interaction}\_\text{rate} \quad (1) \\\text{reward} &= \text{avg}\_\text{time}\cdot (1 + \alpha \cdot \text{interaction}\_\text{rate}) \quad (2) \\\end{aligned}\]
在实践中,通常reward \((2)\)的稳定性更高。
我们进一步分析,这是一个多峰优化问题,很容易造成不同业务指标之间的此消彼长(也就是所谓的“跷跷板效应”),从而陷入局部最优,导致效果不尽如人意。
当发生跷跷板征象时,我们可以将部分reward进行进一步拆分,比如将interation_rate拆分为like_rate和follow_rate两个不同的指标:

\[\text{reward} = \text{avg}\_\text{time}\cdot (1 + \alpha \cdot \text{like}\_\text{rate} + \beta \cdot \text{follow}\_\text{rate})\\\]
可见,在reward的优化中,我们不停在规避不同紧张指标之间的置换征象,及时调整reward的形式,不停追求理想情况(也就是Pareto最优状态)。
上述的这种进化策略算法我们一般称为自然进化策略(natual evolutionary strategy, NES)算法。除了上述这种NES算法之外,爱奇艺还提出可以采用启发式的粒子群优化(particle swarm optimization, PSO)算法来离线搜索融合参数。该算法本质上也属于一种进化策略算法(不过不同于NES算法的在线特性,PSO算法是离线的),旨在从个体构成的群体中采样并让此中乐成的个体来引导未来子女的分布。
PSO算法通过初始化一群随机的粒子,启发式地进行多次迭代来求出最优解。每一次迭代中,粒子通过个体极值(该粒子所经过的历史最优解)和群体极值(种群找到的最优解)来更新各自的位置。这样,终极所有的粒子会兼顾个体的历史最优解和群体所共享的全局最优解直至收敛。
最后,上面我们介绍的都是朴素的进化算法,缺乏进化的稳定性和主动调节学习率的特性。所以,人们又提出了利用协方差矩阵自适应策略(covariance matrix adaptation evolutionary strategies, CMA-ES)进一步提升多目标融合模子的能力。感兴趣的读者可以参见文章《新闻资讯混场面景下的多目标融合实战(四)》。
参考


[*] 渠江涛:重排序在快手短视频推荐系统中的演进
[*] 美团搜索粗排优化的探索与实践
[*] 袁腾飞:阿里飞猪信息流内容推荐探索
[*] EdgeRec:边沿计算在推荐系统中的应用
[*] 一矢多穿:多目标排序在爱奇艺短视频推荐中的应用
[*] 大厂技能实现 | 爱奇艺短视频推荐业务中的多目标优化实践
[*] 新闻资讯混场面景下的多目标融合实战(一)
[*] 多目标排序在快手短视频推荐中的实践
[*] 新闻资讯混场面景下的多目标融合实战(二)
[*] 新闻资讯混场面景下的多目标融合实战(三)
[*] 新闻资讯混场面景下的多目标融合实战(四)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 推荐系统:精排多目标融合与超参数学习方法