快手推荐:多目标精排、树模型规则Ensemble

[复制链接]
查看434 | 回复0 | 2024-5-4 18:06:19 | 显示全部楼层 |阅读模式
而推荐的目标是提升正向反馈、减少负向反馈,提升用户体验。推荐分召回、粗排、精排、重排几个环节;在排序阶段,模型预估用户对内容的个性化偏好,例如,对上述各类用户反馈的预市值,之后,用机制策略将预市值融合成一个排序分,对视频排序。

02

多目标精排:从手工融合到LearnToRank

1.手工融合和简单模型融合

粗排/精排的个性化多任务学习模型,能预估20多个不同的预市值,如点击率、有效播放率、播放时长、点赞率、关注率等,那怎么用它来排序呢?从多任务学习到多目标排序,中间有一个过渡,即怎样把这种预市值融合成一个单一的排序分?快手推荐追求时长、点赞、关注、分享等多种目标,以及降低不感兴趣等负向反馈。通过合适的排序目标和机制设计,获得多目标的协同提高。下边,分别介绍那边Stage1的把不同的预市值做一个线性加权融合和Stage2的基于树模型的ensemble打分两阶段工作。

Stage1:自动公式融合

该方式的缺点是过分依赖规则设计;依赖人工调参,且维护成本高;固定权重,缺乏个性化、场景化。

Stage2:树模型规则Ensemble融合

该方式的缺点是树模型抒发能力有限,且难以onlinelearning。

上线疗效:同城页短视频时长提高4.5%

2.超参LearnToRank

因为树模型的抒发能力有限,因而考虑用DNN类的网路模型学习打分函数:使用

拟合组合利润label:

首先,介绍一个简单的双塔方式的DNN,如上图左侧网路结构所示,视频塔直接把各类个性化预市值拼在一起,产生一个24维向量;用户塔的顶楼向量通过网路学习,产出一个24维向量。最后,对视频塔和用户塔产出的向量做内积,损失函数采用加权Logloss:

由此,相当于通过学习线性加权的超参数去拟合最终的组合利润。其次,用户特点选用了一种比较轻量级的方法,例如对用户界定不同的时间窗口:过去1分钟、5分钟、15分钟、...、2小时,每位时间窗内,对推荐给他的视频,按照用户的反馈拼接成一个向量,这种反馈包括有效播放、点赞、关注、分享、下载、观看时长等,最后,将各时间窗口对应的反馈向量和ID类特点一起输入到用户侧网路。

上线疗效:App时长提高0.2%

3.端到端LearnToRank

上述双塔方式的DNN及其轻量级的特点抒发,仍然限制了模型的抒发能力。随即,考虑端到端学习,主要尝试了Pointwise和Pairwise两种方式。

①对于Pointwise方式,把user_id、行为序列等都作为原始输入特点,同时,融入pXtr特点,使用精排模型来学习最终的组合利润。由于这些方法支持更复杂的特点抽取和网路结构,如attention结构,所以模型的抒发能力更强。

上线疗效:App时长提高0.6%,互动提高2~4%

②对于Pairwise方式,在一次用户恳求返回的6个视频之间,对每种目标都如下操作:先通过该目标的正样本和负样本构造偏序对,再使用DNN网路学习偏序对的打分,对打分做sigmoid变换,最后通过交叉熵损失产出loss。下列公式表示的是like目标:

对不同目标的loss线性加权,因而可以兼具多个目标间的权重:

在疗效上,上述做法某种意义上可以看做对不同目标的AUC加权求和。由于AUC本质上是一个偏序的关系,即正样本和负样本之间的偏序。

上线疗效:App时长持平,页面互动提高2%~7%



03

复杂多目标:EnsembleSort和在线手动调参

后面介绍的是纯粹用模型的形式做空目标排序,但在复杂的业务场景可能不把所有优化的目标都置于模型里。纯用模型的形式做排序,成本比较高,整个线上也会比较繁杂;包括一些生态上的调节、一些专项调节都不太便捷。接出来,介绍下在复杂的业务场景下,快手是怎样做动目标排序的。

1.EnsembleSort

在上图右边表格中给出了一些复杂目标,包括用户的互动和时长的多目标线性加权公式,还有分享后带来的外部效用和用户本身分享效用,其中,外部效用包括用户在外部社交网路传播对快手DAU的贡献等等。

对多种不同打分逻辑常规融合方式是做线性加权:

该融合方式存在的问题是不同Score之间涵义、量级和分布差别较大;显式反馈如点赞率等在不同用户间差别巨大,无法适应统一权重;而且依赖模型预市值绝对大小,预市值分布变化时需重新调节或校正。

在此基础上,尝试在各子项分内做Normalize的优化,如把子项分转化为序。具体地,把用户的个性化预估点赞率从小到大排序,把每位具体的值映射成它的序,再把序折合成一个分数,不同的序映射到不同的分数,这与GAUC目标一致。

该做法把不同量纲且分布差别巨大的分数Normalize到同样维度,可兼容涵义差别巨大的子项分,保证各子项分权重在同一量级调节,而且隐式反馈的预估分在不同用户上做到了某种自适应调节。同时,这些序和AUC的预市值也是一致的,能挺好地和线上模型的疗效保持一致性。通过以上的方法把多种不同的打分策略融合在一起,适用于快手线上复杂的业务场景。

上线疗效,App时长提高0.6%,页面互动提高2~3%

2.在线手动调参

上述EnsembleSort里的线性加权系数主要依赖自动调参,优点是简单轻量且可解释性好,缺点是效率低且依赖工程师经验;假如有两三个参数,可能人能够处理过来,但参数扩展到10个/20个以后,很难自动判定参数之间的关联进行全局调优;而且这种固定参数很难在不同人群上做到个性化和场景化。

解决上述问题的一种方法是Learn2Rank,即用一个模型离线学习各反馈的组合权重。

除上述方式外,其余优化

的离线学习方式,如一些非梯度优化算法:PSO(粒子群算法)、ES(进化策略)等,即每次形成一组超参数(a,b,...,h),算一下该组参数对应的评估目标:组合AUC

多轮迭代收敛后,选择AUC加权和最大的。

上述离线方式都有具有和Learn2Rank类似的缺陷,为了解决该问题,我们那边开发了在线手动调参框架。手动在线调参的工作机制如上图左下角所示,即在基线附近探求生成N组参数,传给推荐系统后获得这N组参数对应的诠释给用户的差别化排序结果,因而获得用户不同反馈,搜集这种反馈日志并做Reward统计,最终输给CEM/ES/BayesOpt等调参算法形成下一组更好的参数。经过不停迭代,参数即可逐步向一个多目标协调最优的方往前进。

接出来,介绍下在线手动调参的具体实践。

线上给5%流量做探求,每次探求几十组参数。在每次分发时,探求组和基线组同始同终,以基线组的样本量为准,每轮搜集固定数目样本。这儿,搜集固定数目样本是由于晚上的高峰期和夜间的低峰期流量大小不一样,假如按时间尺度去界定,可能不同时间的样本量大小差别会形成残差噪音。

Reward设计模块主要是评判在每组参数下,时长和互动指标相比基线的涨跌幅度。例如,观看时长涨了3%,而点赞跌了5%。据悉,这儿分辨了利润项和约束项:

调参算法主要开发了离线优化使用的各类超参优方式,包括交叉熵算法(Cross-EntropyMethod,CEM)、进化策略(EvolutionaryStrategy,ES)、贝叶斯优化(BayesOptimization)、高斯过程回归(Gaussian-ProcessRegression,GPR)。这儿,主要介绍下实践中常用的CEM算法,两侧图例给出了该算法的工作流程:从参数初始的高斯分布出发,通常均值选为线上基线参数,残差自动设置,之后按照该高斯分布随机生成N组参数,每组参数都做在线AB测试、收集反馈、计算Reward,选择Reward最好的TopK组参数,并统计着K组参数的均值和残差,并对残差做微小扰动(避免过早深陷局部最优)后得到新的高斯分布,按照新高斯分布继续取样获取新样本...经过若干次迭代,最终会收敛到一组较好的参数。该算法的优点是简约、高效,超参甚少;0阶方式,TopK选定只依赖Reward的序,不须要对Reward的数值大小进行建模,对噪音更近鲁棒;参数通过高斯分布扰动探求,偏离基线越多的参数选中的机率越小,线上指标相对平稳。

在实践中,困惑比较多的是噪音。噪音主要来源是数据稀缺和稀疏label。例如把5%的流量分100组,相当于十万量级的用户几小时的样本量只能生成一个样本点,而且每组参数只相当于线下1/2000的流量,那么小的流量做AB测试残差会比较大。上图左侧展示了“随着分组数的降低,不同互动类型的波动”,如播放量波动范围0.4~1.2%,点赞量的波动会更大一些,由于稀数label的波动性可能会更大一些。

相应地,降噪方式包括:降低探求组的流量、减少分桶数;降低每次累计的样本量,如从两个小时的累计样本量降低到四个小时的累计样本量;用PV细度替换UV细度分桶,由于一个组UV可能就几百万,而每位用户每晚会有几十刷,使用PV样本量就翻好多倍,所以使用PV的残差也更小,图中红线给出了按PV取样分桶得到的残差,可以看见,残差都更小些。

除个性化排序场景外,我们也在其余更多场景尝试了超参优化方式,例如,召回源配额分配时,主要调控召回源的数目多少、耗时及总利润的最大化;粗排和精排的排序权重参数;EnsembleSort的排序权重;重排的多样性权重参数等。在线多场景联合调参,精细找寻系统最优。

据悉,考虑人群和上下文的个性化和场景化调参,例如通过一个广义线性模型来按照特点估算参数,类似ContextualBandit;引入用户画像特点,例如年纪、年龄段、性别;还有上下文特点,例如三天的下午、中午、晚上来描画这种参数的变化。这样,须要调节的参数就从个性化的权重参数弄成了各个特点的权重。

上线疗效:在排序权重参数优化场景,提高App时长0.5%

04

重排序:Listwise、强化学习和端上重排序

介绍完精排,接出来介绍重排序相关部份。相比精排,重排序最大的特征是须要考虑视频之间彼此的影响,即用户可能由于看了A视频对B视频可能会促使、也可能会有损,例如看了一个景色的视频,紧接着再看一个景色的视频,它的效用都会增加,而假如看一个差别较大的互补的视频,有可能会增强它的效用。

1.ListwiseRerank

首先,采用类似Learn2Rank的学习方案:对精排层返回的Top6视频做Rerank,使用transformer进行建模,描画视频间互相影响:把6个视频做特点抽取后,经过transformer层的encoder得到embedding表示,再经过评估层得到输出,损失函数采用WeightedLogloss。实践中,前序视频对后序视频的播放和效用有影响,例如在上下降场景,看了上面的视频可能会对前面的视频有影响,但看了前面的视频不会对上面的视频有影响。但作为一个组合利润,须要前后组合决定总利润。例如把五个爱看的视频和五个不太爱看的视频放到一起,假如前五个全是爱看的,而前面五个全是不爱看的,可能用户翻到第七个视频时,才会退出;但若果把爱看和不爱看的参杂着放,有可能用户能看完十个视频,可能就会从之前五个不爱看的视频里探求出一个新的兴趣,即这些组合的利润会有更大的提高空间。

对于离线疗效评估,我们对比统计了“做transformer后推荐结果的AUC”和“DNN基线,即精排模型给出排序结果的AUC”,从上图左下角表格可见:在不同位次上,从第1位到第6位,随着位次降低AUC渐渐提高。即考虑前序视频对后序视频的影响,能改善后序视频的推荐体验。

上线疗效:App时长+0.3%,互动持平或下降

2.加强学习Rerank

上述介绍的Learn2Rank形式的top6重排序整体优化空间较少,所以我们又尝试了使用加强学习做Rerank。

具体做法是从精排后的Top50里选出Top10,通过序列决策的过程,从前向后依次贪心的选择动作机率最大的视频。例如上图左上角表示的过程:有4个候文集a、b、c和d,先选出排序分最大的b,把它作为一个上下文特点;之后选出第二大的c,之后把选出的b和c作为上下文特点;再选第三个视频......选择视频时,reward会兼容相关性、多样性及一些约束项。

按照序列决策的思想,上图左侧给了一个LSTM网路结构来建模前序视频对后序视频的影响。DNN网路同时输出Policy和状态值函数Value,这儿Policy是通过Softmax估算选择每位候选视频(Action)的机率后,选择机率最大的视频。Policy具体实现上,在选购每位位置的视频时,把前序视频的作用编码成一个embedding向量,对候文集的每位视频做预估和softmax变换,最后会选择最大的。

选用策略梯度法解决该加强学习问题:对策略取log后求梯度,再用Advantage函数加权求和:

其中Aπ(st,at)是Advantage函数。进一步,使用GAE增加误差,通过reward和状态值函数组合得到GAE:

上线疗效:App时长提高0.4%,新设备次留+0.4pp

具体训练时,没做experience-reply,由于不同用户的样本间天然没关联,所以不须要额外的去关联。而是使用一个仿真器帮助训练,用处是使用仿真器做探求学习效率更高,基于仿真器做离线学习,再上线会更安全,使用On-Policy相比Off-Policy训练会更稳定。上图左侧给出了一个排序策略作用后,不同的模式样例:离线日志有用户快速掠过、播放、播放后的点赞行为,通过一个较好的策略能把好模式排在后面。

3.端上Rerank

上述介绍的是在云上服务器做Rerank,同时,我们也尝试了在顾客端上做Rerank。

在端上做Rerank的具体方案是一次用户恳求下发更多视频到顾客端,例如从一刷下发6个提高到20个;在端上布署一个轻量的模型,依据用户对每一个视频的最新反馈实时调整,每一滑实时从候文集中选择最佳的视频。端上Rerank的优势有如下几方面:

具体结构设计如上图左侧图例,模型用TFLite格式,顾客端启动时一次性拉取;在每刷恳求视频时,把储存在PS服务端的SparseFeatureEmbedding及其他特点一起下发至顾客端。

上线疗效,App时长+1%,服务端QPS-13%,互动指标也明显提高。

从云端下发到顾客端的特点,包括用户特点、视频特点、用户实时反馈序列、视频服务端的各类静态模型预市值和设备特点等,如上图左上角表格所列。

网路结构如上图左侧所示,通过两个transformer结构分别建模用户实时反馈和视频IDembedding序列、用户实时反馈和Xtr序列;使用Multi-HeadSelf-Attention结构打造高阶特点交叉;损失函数选用加权LogLoss:

05

总结和展望

以上介绍了快手在多目标排序方面的部份工作,接出来给一个总结和展望,包括粗精排阶段的多目标排序、在线手动调参和重排序几方面。

在多任务学习方面,后续准备解决的问题包括:训练过程不同目标间的差别造成的梯度冲突问题;帕累托最优的权重设计,在训练过程中按照训练目标难易程度动态调节权重;对MMoE升级,例如用Task-SpecificExpert。

在线手动调参方面,后续准备解决的问题包括:对稀疏reward采用更好的处理方法,对噪音做更好的抗性处理;优化存留等更稀疏更有挑战的目标;把交叉熵这些0阶方式升级到1阶。

在重排序方面,后续的工作计划:用Beam-Search取代贪心搜索,控制线上历时;在重排序过程,更好的融合相关性和多样性,端到端学习;不仅上述,建模上文对下文的影响外,上下文协同的利润还有提高空间;怎样在端上更好地做实时行为建模、引入丰富特点、云和端的配合等。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则