精准推荐系统模型是很多互联网产品的核心竞争力。个性化推荐系统旨在基于用户行为数据提供“定制化”的产品体验。国家级短视频App快手每天向数亿用户推荐数百亿条视频。它遇到的挑战之一是如何通过推荐系统模型准确地描述和捕捉用户的兴趣。现在业界采用的解决方案通常是用大量的数据集和拟合参数训练一个深度学习模型,使模型更接近现实。谷歌最近发布了万亿级模型SwitchTransformer,参数量达到1.6万亿,比谷歌此前开发的语言模型(T5-XXL)快四倍。而快手万亿参数微调模型,总参数量超过1.9万亿,规模更大,已经付诸实践。下面就让我们一起借助快手微调模型的发展历程,揭秘它的内部技术代码吧!插图:GoogleBERT-largeNLP预训练模型:3.4亿参数,GoogleMeena开放域聊天机器人:261亿参数,GoogleT5预训练模型:110亿参数,OpenAIGPT3语言模型:1750亿参数,GoogleSwitchTransformer语言模型:1.6万亿参数,快手精排序模型:1.9万亿参数,参数个性TransformedCTR模型-PPNet2019年之前,快手App主要采用双栏瀑布流玩法,用户与视频互动点击区分两个观看阶段。在这种形式下,CTR预测模型变得尤为关键,因为它将直接决定用户是否愿意点击展示给他们的视频。当时业界主流的推荐模型还是基于DNN、DeepFM等简单的全连接深度学习模型。但是,考虑到个体用户与视频的共建语义模式会基于全局用户的共建语义模式产生个性化偏差,如何在DNN网络参数上为不同用户学习到独特的个性化偏差具有成为一个问题。推荐团队优化方向。在语音识别领域,2014年和2016年提出的LHUC算法(learninghiddenunitcontributions)的核心思想就是做speakeradaptation。其中一项关键突破是为DNN网络中的每个说话者进行学习。一个特定的隐藏单元贡献(hiddenunitcontributions)来提高不同说话人的语音识别性能。借鉴了LHUC的思路,快手推荐团队在精细布局模型上进行了尝试。经过多次迭代优化,推荐团队设计了一种门机制,可以增加DNN网络参数的个性化,让模型快速收敛。快手将这个模型称为PPNet(ParameterPersonalizedNet)。据快手了解,PPNet在2019年全面上线后,显着提升了模型的CTR目标预测能力。PPNet结构图如上图所示。PPNet左侧是目前常见的DNN网络结构,由稀疏特征、嵌入层、神经层组成。右边是PPNet特有的模块,包括GateNN和只给GateNN作为输入的id特征。其中,uid、pid、aid分别代表用户id、照片id、作者id。左边所有特征的embeddings会和3个id特征的embeddings拼接在一起作为所有GateNNs的输入。需要注意的是左边所有特征的embedding不接受GateNN的反向传播梯度。该操作的目的是减少GateNN对现有特征嵌入收敛的影响。GateNNs的数量与左边神经网络的层数相同,其输出是与每一层神经网络的输入的element-wise乘积,以做出用户的个性化偏置。GateNN是一个2层神经网络,其中第二层网络的激活函数为2*sigmoid,目的是将其输出的每一项约束在[0,2]范围内,默认值为1。当GateNN输出为默认值时,PPNet相当于左局部网络。根据实验对比,通过GateNN在神经网络层的输入中加入个性化的偏置项,可以显着提升模型的目标预测能力。PPNet使用GateNN支持DNN网络参数的个性化,以提高目标预测能力。理论上,它可以用于所有基于DNN模型的预测场景,如个性化推荐、广告、基于DNN的强化学习等。场景等。多目标估计优化-基于MMoE的多任务学习框架随着短视频用户的需求不断升级。2020年9月,快手推出8.0版本。该版本增加了底部导航栏,并在此基础上增加了“已选”选项卡,支持上下单栏形式。该版本兼容双栏点击和单栏上滑,旨在为用户提供更好的消费体验,增加更多元的消费方式。在新界面下,相当一部分用户会同时使用双栏和单栏。这两个页面用户的消费方式和交互形式有很大的不同,所以在数据层面所代表的分布也有很大的不同。如何在模型建模中同时使用这两部分数据,并用好它们,成为了快手推荐团队亟待解决的问题。快手团队发现,当单列业务场景数量增加时,多任务学习更为重要。因为在单栏场景下,用户的交互行为是基于展示给用户的视频,并没有像双栏交互那样非常重要的点击行为。这些交互行为是比较均等的,而且这些行为的数量多达几十种(与时间相关的预估目标、点赞、关注、转发等)。精细编排模型估计目标(部分)随着单列业务数据量的增加,推荐团队从模型层面尝试分离出一个针对单列业务优化的模型。具体来说,在特征层面,可以充分复用双列模型的特征,但对于单列目标,增加了额外的个性化偏差特征和一些统计值特征。在embedding层面,由于前期单列数据量较小,无法保证embedding收敛。最初是用双列数据点击行为来指导训练,后来是用单列数据查看行为(有效播放、长播放、短播放)来主导训练嵌入。在网络结构层面,主要基于shared-bottom网络结构训练。无关目标独占一个塔,相关目标共享同塔顶层输出,一定程度上可以提高目标预测效果。这种模式推出后,一开始有一些效果,但很快就暴露出一些问题。首先,它没有考虑到单列服务和双列服务中embedding分布的差异,导致embedding学习不足。其次,在多任务学习层面,在单列场景下,用户交互基于当前视频节目的单阶段行为,各个目标相互影响。模型单一目标的改进不一定会带来整体的在线收益。因此,如何设计一个好的多任务学习算法框架,使所有的估计目标都能得到改善就变得非常关键。这个算法框架必须考虑数据、特征、嵌入、网络结构和单列用户交互特征。经过充分的研究和实践,推荐团队决定采用MMoE模型(Multi-gateMixture-of-Experts)对现有模型进行改进。MMoE是Google提出的经典多任务学习算法。其核心思想是用专家层代替共享底层网络,通过多个门控网络在多个专家网络上为每个目标学习不同的专家网络权重。执行融合表示,并在此融合表示的基础上通过任务网络学习每个任务。参考MMoE算法和前面提到的快手推荐场景的难点,推荐团队对MMoE算法进行改造,设计了全新的多任务学习算法框架。具体来说,在特征层面,进行了语义统一,修正了单、双列服务中语义不一致的特征,增加了单列服务中与用户相关的特征。在embedding层进行空间重映射,设计embedding变换层直接学习单列embedding和双列embedding之间的映射关系,帮助单列embedding和双列embedding映射到统一的空间分布。在特征重要性层面,设计了一个slot-gating层来为不同的业务选择特征重要性。通过以上三个变化,模型从特征语义、不同业务的embedding分布、不同业务重要性的特征对输入层的embedding表示进行归一化和正则化,重新映射到统一的特征表示空间,使得MMoE网络可以更好地捕捉到这个空间中多个任务之间的后验概率分布关系。通过对MMoE的改进,模型的所有目标都得到了显着改进。Short-termBehaviorSequenceModeling-TransformerModel在快手的微调模型中,用户的历史行为特征非常重要,它们非常善于描述用户兴趣的动态变化。在快手的推荐场景中,用户行为特征非常丰富多变,其复杂度远超视频特征或上下文特征。因此,有必要设计一种能够有效地对用户行为序列进行建模的算法。目前业界对用户行为序列建模主要有两种模式。一种是对用户的历史行为进行加权求和,另一种是通过RNN等模型进行时间序列建模。在快手之前的双列精排模型中,用户行为序列只是简单的sumpooled作为模型输入。在单栏目场景下,用户被动接收快手推荐视频,丢失封面信息后,用户需要先观看视频一段时间再反馈。因此,选择活跃视频的权利减少了,更适合推荐系统做E&E(Exploit&Explore)。快手的序列建模灵感来自于Transformer模型。Transformer模型是谷歌在2017年提出的一种经典的神经网络翻译模型,后来流行的BERT和GPT-3也是基于该模型的部分结构。Transformer主要包括两部分:Encoder和Decoder。编码器部分对输入语言序列进行建模。这部分与用户行为序列建模目标非常相似。因此,快手从算法结构中学习,优化计算量。MMoE结合Transformer对用户兴趣序列进行建模。首先,快手推荐团队以用户的视频播放历史作为行为序列。候选序列包括用户长播历史序列、短播历史序列、用户点击历史序列等。此类列表详细记录了用户观看视频id、作者id、视频时长、视频标签、视频观看时长、视频观看时间等内容,充分描述了用户的观看历史。其次,对视频观看时间进行对数变换,取代位置嵌入。在快手的推荐场景中,用户的短期观看行为更多的是与当前的预估相关,而长期的观看行为则体现了用户的多兴趣分布。使用对数变换可以更好地反映这种相关性。最后将multi-headself-attention替换为multi-headtargetattention,将当前embedding层的输入作为query。这种设计的目的是双重的。首先,当前用户特征、估计视频特征和上下文特征提供了比单个用户行为序列更多的信息。其次,可以简化计算量,从O(d*n*n*h)到O(d*n*h+e*d),其中d是attention的维度,n是list的长度,h是head的个数,e*d表示将embedding层的维度转化为attention的维度所需的复杂度。改造后的Transformer网络可以显着提高模型的预测能力。线下测评中,用户观看时长预估有明显提升,线上用户观看时长也有明显提升。Long-terminterestmodeling长期以来,快手的精化排名模型倾向于使用用户最近的行为。如上所述,快手的精细调度模型通过采用transformer和MMoE模型,准确地对用户的短期利益进行建模,取得了非常大的收益。在之前的模型中,使用了几十条用户近期的历史行为进行建模。由于短视频行业的特性,最近几十次的历史行为通常只表示用户在短时间内的兴趣。这导致模型过于依赖用户的短期行为,从而导致缺乏对用户中长期兴趣的建模。根据快手的业务特点,快手的推荐团队也对用户的长期兴趣进行了建模,让模型能够感知用户的长期历史记录。快手推荐团队发现,在扩展用户的交互历史序列(播放、点赞、关注、转发等)后,模型可以更好地捕捉到一些潜在的用户兴趣,即使此类行为相对稀疏。针对这一特点,推荐团队在之前模型的基础上设计改进了用户超长期兴趣建模模块,可以对用户从几个月到一年的行为进行综合建模,用户的时长行为序列可以达到数万个。这种模式已经在所有业务中推广,并取得了巨大的线上效益。快手用户长期兴趣细化模型结构示意图千亿特征,万亿参数随着模型的迭代,深度学习网络的复杂度越来越高,加入的特征数量越来越多模型也在不断增加,模型特征的规模也制约着精化模型的迭代。这不仅会限制模型特征的规模,导致部分特征被驱逐,导致模型收敛不稳定,还会使模型更容易驱逐低频特征,导致在线冷启动效果不佳(新视频,新用户),对长尾视频或者新用户不够友好。为了解决这个问题,快手推荐和架构同学完善训练引擎和在线服务,使得离线训练和在线服务服务可以根据配置的特征量灵活扩展,并且可以支持微调模型offline和online有上千亿的特征,数万亿的规模上的参数。尤其是新模式对新视频、新用户的流量分发更加友好。新用户、新视频指标明显提升,践行快手推荐的“普惠”理念。目前,快手的精细排序模型总特征量超过1000亿,模型总参数量超过1.9万亿。在线训练和估计服务为了支持推荐场景下千亿特征模型的在线训练和实时估计,推荐团队对在线估计服务的训练框架和参数服务器(ParameterServer)进行了改造。在推荐模型的在线学习中,存储Embedding的参数服务器需要能够准确控制内存的使用,以提高训练和估计的效率。为了解决这个问题,推荐团队提出了一种无冲突且内存高效的全局共享嵌入表(GSET)参数服务器设计。单独为每个ID映射一个Embedding向量会很快占用机器的内存资源。为了保证系统的长期执行,GSET采用定制化的特征得分淘汰策略,控制内存占用始终低于预设的阈值。传统的LFU、LRU等缓存淘汰策略只考虑实体的频率信息,主要用于最大化缓存命中率。特征评分策略考虑了机器学习场景中的附加信息,以辅助特征剔除。在推荐系统的在线学习过程中,大量的低频ID会进入系统。这些低频ID通常不会出现在以后的预估中,系统收到这些特征后可能很快又会把它们淘汰掉。为了防止低频ID的无意义进入和驱逐影响系统性能,GSET支持一些特征准入策略来过滤低频特征。同时,为了提高GSET的效率和降低成本,快手还采用了一种新的存储设备——非易失性存储器(IntelAEP)。非易失性内存可以为单机提供大约几TB的内存级访问速度。为了适配这种硬件,推荐团队实现了底层KV引擎NVMKV来支持GSET,从而保证了万亿参数模型的在线稳定性。展望未来快手推荐算法负责人、曾在GoogleResearch担任StaffResearchManager的宋洋博士表示,短视频行业有其独特的挑战,表现在用户量大、视频上传量大、作品生命周期短、用户兴趣变化快等诸多方面。因此,短视频推荐很难照搬传统视频行业的细粒度操作,需要依靠推荐算法及时准确地分发视频。快手推荐算法团队一直在为短视频业务深度定制和积极创新,提出了很多业界首创的推荐模型和思想。同时也给推荐工程架构团队带来了诸多系统和硬件方面的挑战。宋洋博士认为,快手微调万亿参数模型是推荐系统的里程碑式突破。它结合了序列模型、长期和短期兴趣模型、门控模型和专家模型的优点。世界上最全面、最有效的推荐模型之一。该模式已在快手的主营业务上全面上线,服务于用户。未来,“算法-系统-硬件”三位一体或许会带来更多的挑战和机遇。希望以此进一步推动快手推荐系统的技术创新与突破,为用户提升体验,创造价值。
