分享嘉宾:渠江涛快手中级算法专家
编辑整理:吴祺尧
出品平台:DataFunTalk
导读:快手短视频作为国外比较领先的短视频和直播社区,具有巨大的日活流量。短视频平台拥有巨大的流量入口和复杂的业务形态。诸如,快手拥有短视频、直播、广告等十余种业务形态,形成了海量的交互数据。这让短视频推荐系统拥有复杂的技术场景落地,如大规模预估、强化学习、因果剖析、因果推论等。本次的分享主题是快手短视频推荐系统中重排序技术环节的演化过程。
明天的介绍会围绕下边四点展开:
快手短视频推荐场景介绍
序列重排
多元内容混排
端上重排
01
快手短视频推荐场景介绍
首先给你们介绍一下快手推荐的主要技术环节。
快手推荐系统包括了传统的召回、粗排、精排、LearningToRank的多目标排序、多目标预估等技术环节。而在这种模块以后的技术环节就属于重排序,主要包括手机端和服务端两部份。服务端通过传统服务器布署重排服务,包括序列重排、多源内容混排、多样性模块。端下部发包括端上重排模型和端上重排策略两部份。重排技术是快手非常重要的技术环节,它的发展速率远快于其他排序环节快手热门算法,属于较新的技术范畴。
重排阶段处理的问题包括:
整个序列的价值并非单item疗效的累计,怎么促使序列价值最大化;
沉溺式场景中,哪些是好的多样性体验,业务意志怎么彰显;
同一个场景下越来越多的业务参与其中,怎样恰当地分配流量和注意力,达成业务目标和整体最优;
怎么愈发及时、更加细微地感知用户状态,及时调整我们的推荐策略和内容。
02
序列重排
序列重排基于两个认知。
首先,上下文对当前item引起了重要影响,即视频的交互或则表现指标的优劣不仅仅由item自身决定,还由上文内容决定。例如当前推荐视频是有关日语学习的,但倘若前一个视频是一个小弟弟唱歌的视频,这么看完上文视频再去看学英文的视频可能性较小。但若果上一条视频是一首很燃的英文歌曲,那很可能用户会由于听不懂歌曲内容,更乐意观看下一条有关学习俄语的视频。
其次,相同的内容不同的序的表现也是天差地别的。诸如第一条视频是将军对于台海危机的言论,但若果下一条视频推荐了小妹妹视频那就相当不合时宜,由于这两个视频没有连贯性,推荐疗效较差。那假如下一个推荐视频是比较燃的音乐,再在前面推荐小妹妹唱歌的视频,这么这时侯内容的连贯性就较好,用户不会认为突兀。
我们希望得到一个好的推荐序列促使序列价值最大,这么都会涉及到好的序列怎样去定义的问题。我们觉得好的序列完成度很高,整个序列的正向交互程度很高,用户具有高黏性,有看完视频后下刷的意愿,且序列在内容上具有序贯属性。
传统方案具有以下缺陷:
精排单点打分缺乏当前item其他内容的信息,单点的预估存在不确切的问题;
贪心的打散方案只能解决内容散度的问题,缺乏局部最优到整体最优路径;
Mmr,dpp等是在优化目标上加入散度项,并非是序列表现最佳。
所以我们序列重排的目标:
首先须要有transformer或则LSTM把上游内容信息融入当前内容信息中;
第二,我们的优化目标是序列表现情况,而不是单item的表现;
第三,我们须要重排模型有持续发觉好的排列模式的能力。
这三个目标属于序列发觉和序列评价范畴。
我们序列重排的整体结构采用了generator-evaluator范式,generator从top50中生成模式丰富的序列类型,之后使用evaluator评价召回的序列整体价值。
序列的生成方式最容易想到的是将得分高的排在序列背部,得分低的排序序列尾部,即使用贪心的算法生成序列。其中大家常用的实现方式是beamsearch,它次序地生成每位位置的视频,选择方法是按照该位置前序的item选择模型或则策略预估地最优topk视频。
第二种方案是多队列权重。以前我们在线上的队列是使用手工调参或则使用手动调参工具的方式进行调节。并且线上参数并不是每时每刻都是固定的,我们须要在不同状态下使用不同参数,例如某段时间我须要推荐沉溺时间较长的视频,而另外一段时间须要低成本高获得感的视频内容,那么后者须要更多关注观看时长的目标,互动可以进行折算,而前者须要互动、点赞率较高。所以我们不能使用固定的参数,而是进行协同取样。取样过程从原理上来讲是不断地迫近Pareto最优曲面,因而得到不同的取样点,产生不同的序列。
其他的一些序列生成办法有mmr多样性召回、Seq2slate召回,还有其他一些规则性的或则启发式的召回策略,在这儿就不一一介绍了。
生成不同的序列后就须要对序列进行评价。我们的目标有三个:
首先,序列播放时长要小于某一个分位点;
第二,序列播放完毕后用户要有下刷动作;
第三,用户互动率才能小于平均互动水平。
Evaluator使用双向transformer模型,这是由于用户也许是自上而下的刷视频,下游视频信息对上游视频没有增益,只有上游信息会对下游内容有影响。双向transformer模型可以减少估算复杂度,提高模型的稳定性。在双向transformer以后,我们使用一个辅助模型去做embedding抒发,最后依次预估整个序列的得分。这一序列重排模型在线上形成了极其多的累积利润。
03
多元内容混排
下边我们介绍多元内容的混排。
在混排之前,业务是通过固定位置的方式来获取流量,平台不会考虑业务价值或则用户需求。这都会带来以下三个问题:
用户角度,偏好的业务和非偏好业务等频度出现;
业务方角度,流量中既有偏好的用户也有非偏好的用户,增加了业务服务效率;
平台角度,资源错配造成了浪费。
这么混排问题就可以被定义为:将各个业务返回结果恰当地组合,得到社会综合价值最大的返回序列。
最简单的办法就是对每位业务结果进行打分并据此进行排序。诸如LinkedIn的一篇论文就是使用打分过后排序操作来实现的,她们为这一方式做了很健全的理论剖析。它将优化目标设定为在用户价值体验小于C的前提下最优化产值价值。假如用户的广告价值小于用户的产品价值的时侯,那我们就去投放广告内容;否则我们就去投放用户的产品内容。这一算法实现很简单,即在满足用户体验约束以及两个广告间隔约束下,那一部份价值高就推送那一部份内容。
但上述方案有一个隐忧,即它包含了好多强假定。首先,它的目标是最大化产值价值而不是最大化综合价值。第二,这一算法假定单一item的价值在不同位置和不同上下文的情况下保持不变,这和序列化建模时认知不同。第三,它觉得广告对用户后续体验及存留等没有影响,而且假如从单一刷次来看放置广告的价值一定比不放广告的价值大,但是它并不是最优解,由于它会对后续的用户体验形成影响。
首先介绍一下混排listwise方案。这一方式秉持了序列生成和序列评估的过程,我们对每一种放置方案还会进行预估,评判其对排序结果的影响,包括广告在不同位置不同上下文的情况下ctr,cvr等指标以及对自然结果的影响。模型的第一个模块是context信息提取模块。这一模块我们重新预估了视频内容的表现情况。第二个模块是跨域转换模块,由于广告和自然内容是跨域的。第三个模块会对广告的内容进行多任务重预估,例如评判它的爆光率,cvr,ctr等。有了这种预估指标后,我们就可以得到一个最佳价值序列。
接出来介绍混排RL方案。在不同状态下快手热门算法,RL可以在不同策略中选择一个最佳策略来达到常年体验和近日收入的平衡。原来的模型采用的是固定策略,即在不同状态下的广告放置、广告产值和结果体验的配比都是固定的。但这一做法显然是有问题的。
我们定义状态为用户在一个session内下刷深度、曝光内容、广告交互历史、内容交互历史、上下文信息以及本刷的内容。动作空间则包含如第一条、第二条广告放置在哪一位置等。其实动作空间中须要满足业务约束。最终的结果既要考虑产值价值,又要考虑用户体验价值以及常年存留的内容。
Action空间是一个非常稀疏的空间,我们最终选择了DuelDqn的方案来实现。首先,V网路评估用户当前的满意程度,这促使模型可以在不同的用户状态下选择不同的放置策略。但因为放置策略非常离散,它的解空间相当大,这么我们须要对离散空间dense化。我们的dense化不是通过模型去做的,而是通过之前使用的重预估监督模型来实现。通过监督模型,我们就可以晓得这个action下每位位置放置的内容可以带来多少的用户体验和商业价值。以后,我们可以使用一个神经网路对不同的action进行打分。我们的优化目标是每一步选择才能达到最终的总和价值最大,reward是常年价值和近日价值的组合。
我们采用了两段式训练范式,首先使用onlinepolicy的方法,先将模型布署上线生成onlinepolicy下的数据,作为offpolicy的训练数据装入回放池。以后,我们使用offpolicy来训练Dqn模型。经过优化后,在线上模型针对不同的用户状态得到的Value,可以选择促使Q值最大的策略,最终得到线上的预估结果。
04
端上重排
下边为你们介绍端上重排的工作。
端上重排主要解决以下四个问题:
实时感知:目前我们每次针对每次恳求使用的用户讯号都是历史信息,用户反馈讯号感知存在延后,造成下刷操作之间的反馈讯号没有被借助到。
实时反馈:分页恳求场景下,上次恳求前未能及时调整当前推荐内容。若果不在端上布署模型,这么针对长序列,因为序列未能按照用户下刷过程中的反馈来实时调整,造成用户因为不满意而离开,促使用户流失机率变高。
万人千模:端上每一台手机都是一个小服务器,我们可以正对每一个用户训练一个模型,达到愈发极至的个性化推荐。
算力分配:灵活的pagesize,可以在算力紧张的时侯,动态决定服务端恳求频次,提高算力经济性。
上图展示了端上重排的整体框架。服务端收到顾客手机发出的一个分页恳求后会进行召回、粗排、精排、重排,返回推荐的视频及特点。端上的推理模型使用候选视频以及候选视频的特点,加上用户的特点和反馈行为进行模型推理,最后使用端上策略库得到最终混排结果。Offline比起传统的样本拼接、模型训练以外会降低一个dqn模型上传。
我们还在尝试万人千模的工作,目前能达到的能力是端云混和的布署模型,即我们在服务器端布署一部份模型,在顾客端布署另一部份模型。在顾客端,布署的这部份模型须要兼具轻量级和抒发能力,须要借助实时交互动作;在服务端则要借助其强悍的算力,把所有embedding相关操作(如embeddinglookup等)在服务器中完成。我们可以做到分布式实时训练,并达到小时级的推送能力。
端上模型使用的特点不仅显示的用户行为反馈,还有音量、横屏等端上特有的隐式反馈,这种特点在服务端是难以建模的。具体地,我们把用户近来的反馈行为加入了实时反馈列表中,使用候选动作与它们进行基于transformer的交互。端上模型主要彰显了针对实时反馈特点的更有效地抒发。
端上模型在上线后,业务指标有了显著的提高。例如模型将ctr提高了2.53pp,ltr提高了4.81pp,wtr提高了1.36pp。
05
精彩问答
Q:怎么判别哪一种生成的序列疗效更好?客观的模式判定会不会与主观意识上有不一致?
A:我们确实可以通过数据剖析来发觉较好的推荐策略与推荐模式,并且我们很难发觉全部的表现情况,未能进行穷举,由于每位用户对应的最佳模式是不一样的,即它是个性化的产物。我们发觉好的模式一般来说前后具有因果关系、关联关系,上游内容与下游内容具有好的承接属性。除了这么,一个session内的推荐应当是让用户看上去是有条理智的而不是零乱无章的。我们还发觉一个的推荐策略似乎是可以在一个连贯的内容中穿插一些其他疗效较好的主题,从而开掘一些更好的策略。并且我们也不可能将所有的模式开掘下来,根本缘由在于它是一个个性化决策过程。
Q:百人千模中每位用户的参数是一样的吗?是否须要依照每一个人来做训练?假如须要对每位用户做训练,这么怎样进行模型的离线疗效评测?
A:万人千模的问题就是怎样把个性化特点抽取下来,做一个完全适配于每位用户的模型。我们做过离线验证,例如活跃用户和非活跃用户的分辨。虽然这些做法形成了很大的经济价值。我们所有的模型虽然是被活跃用户主导的,而对于非活跃用户或则冷启动用户在刚步入社区的时侯会有很多不适应的地方,所以对她们做单独的模型会有挺好的疗效。这便是万人千模方向的一个简单的试验。我们也对用户做了分群,按照她们的交互数据和人口属性做了剖析,发觉不同群体的用户的交互表现完全不同。这是因为快手囊括的用户面非常多,有白领也有农户工兄弟;有中年人、青年人,也有老年人。这么那些不同群体下的表现数据一定也是具有很大的差别性的。我们借助分群做不同的模型,进行离线实验,发觉这样确实会有很显著的利润,而且线上我们好没有进行布署。倘若进一步将模型细度进行切分,会存在稳定性的问题,我们目前还在尝试解决它们。
Q:会不会考虑设置一个多样性的底线,例如不同的视频类型之间的间隔要求,或则其他一些多样性的类似需求?还是完全从算法上追求整体的利润最优?
A:目前我们的模型是有多样性的要求的。我们召回序列生成完成后不一定满足业务需求,所以它会过一些多样性模块和业务要求的模块。