千亿特征、万亿参数,快手这个推荐精排模型什么水平?

整理 | 兆雨

责编 | 杏玲

出品 | AI科技大本营

精准的推荐系统模型是很多互联网产品的核心竞争力,个性化推荐系统旨在根据用户的行为数据提供"定制化"的产品体验。例如快手每天为数亿用户推荐百亿的视频,遇到最大的挑战是推荐系统模型如何精准的的描述与捕捉用户的兴趣。

如今业内采用的解决方案通常为结合大量数据集和拟合参数来训练模型,如此一来让模型更加逼近现实情况。谷歌日前发布了首个万亿级模型 Switch Transformer,参数量达到1.6万,其速度是Google之前开发的最大语言模型(T5-XXL)的4倍。然而快手万亿参数精排模型总的参数量超过19000亿,规模更大,且已经投入实践。下面我们一起揭秘快手这个精排模型的技术密码吧!

Google BERT-large NLP预训练模型: 3.4亿参数量

Google Meena开域聊天机器人:26亿参数量

 Google T5预训练模型: 110亿参数量

OpenAI GPT3语言模型:1750亿参数量

快手精排排序模型:19000亿参数量

快手针对CTR模型设计了PPNet(DNN参数个性化网络),显著的提升了推荐效果。从2019年开始,快手从用户体验层面,开始重视并推动单列交互,现在快手推荐交互层面,演化成多产品,单双列共存的状况。在单列场景下,用户同视频的交互变成基于观看的单阶段行为,这些交互行为相对于双列交互来说,相对更加平等。针对这些特点,快手团队设计了多任务学习框架,显著提升了多任务学习的效果,提升用户体验显著。

用户和快手App的交互历史非常重要,这也是快手推荐里面用到的重要特征。针对用户的历史交互行为,快手设计了基于Transformer的用户短期行为序列建模和用户长期行为序列建模,并取得了巨大的线上收益。当然,快手的目标不止于此,为了更准确的把握用户偏好,为用户提供更准确的推荐,快手团队对模型的细节提出了更高的要求。 

  • 参数个性化CTR模型
  • 单双列数据融合
  • 多目标预估优化
  • 短期行为序列建模
  • 长期兴趣建模
  • 千亿特征

参数个性化CTR模型-PPNet

推荐系统的核心是个性化预估模型,其预估效果直接影响线上的推荐质量。考虑到某用户个体和视频的共建语义模式在全局用户的共建语义模式基础上会有个性化的偏差,如何在DNN网络参数上为不同用户学习一个独有的个性化偏差成为了快手团队优化的方向。在语音识别领域中,2014年和2016年提出的LHUC算法(learning hidden unit contributions)核心思想是做说话人自适应(speaker adaptation),其中一个key point是在DNN网络中,为每个说话人学习一个特定的隐式单位贡献(hidden unit contributions),来提升不同说话人的语音识别效果。

借鉴LHUC的思想,快手团队在精排模型上展开了尝试。经过多次迭代优化,快手团队设计出一种gating机制,可以增加DNN网络参数个性化并能够让模型快速收敛。快手团队把这种模型叫做PPNet(Parameter Personalized Net)。据快手介绍,PPNet能显著提升模型的目标预估能力。

PPNet结构图

 

如上图所示,PPNet的左侧是目前常见的DNN网络结构,由稀疏特征(sparse features)、嵌入层(embedding layer)、多神经网络层(neural layer)组成。

单双列数据融合

2020年9月,快手推出了8.0版本。这个版本里增加了底部导航栏,在此基础上增加了一个"精选"tab,支持单列上下滑的形式。这个兼容双列点选和单列上下滑的版本,旨在为用户提供更好的消费体验,加入更多元的消费方式。在新的界面下,有相当一部分用户会既使用双列也使用单列。用户在这两种页面上的消费方式和交互形式都有很大的不同,因此在数据层面表示出来的分布也非常不同。如何将两部分数据都用在模型建模里,而且用好,成为了快手模型组一个亟待解决的问题。

双列发现页设置版                             底导精选 极速版

为了提升模型推荐效果,数据流层面做日志融合和优化是非常有必要的,这是后续模型融合的基础。其优势在于:

  • 对於单双列同时体验的用户,模型可以有更好的预估效果
  • 对於单列体验扩量过程,缓解双列用户体验单列时的冷启动问题
  • 基于融合数据做模型融合,通过迁移学习的手段,提升单双列用户模型预估效果

快手团队同推荐架构组合作,将单双列日志流融合。单双列数据融合后,快手团队后续的是在此基础上做了模型融合,把双列跟三个单列的业务统一训练融合模型。这样通过模型融合的算法可以提升所有业务的效果,同时也可以在所有业务推全拿到收益,加快迭代速度。

多目标预估优化-基于MMOE的多任务学习框架

单列业务的场景增多后,多任务学习更加重要。因为在单列场景下,用户的交互行为都是基于show给用户的视频发生,并没有像双列交互那样有非常重要的点击行为,这些交互行为相对平等,而且这些行为数量多达几十个(时长相关预估目标、喜欢、关注、转发等)。

精排模型预估目标(部分)

随着单列业务数据量越来越大,从模型层面,拆离出针对单列业务单独优化的模型。特征层面,完全复用双列模型特征,只是针对单列的目标,额外添加个性化偏置特征和部分统计值特征。Embedding层面,因为前期单列数据量少,不能保证embedding收敛,最初使用双列数据click行为主导训练,后面改用单双列用户视频观看行为(有效播放、长播放、短播放)主导训练embedding,但这也没有考虑到单双列业务中embedding分布差异。

单列网络结构简图(只以like示例)

 

网络结构层面,主要基于shared-bottom网络结构训练,不相关目标独占一个tower,相关目标共享同一tower顶层输出,如上图所示,这能在一定程度上提升目标预估效果。多任务学习层面,单列场景下,用户的交互都是基于当前视频show的单阶段行为,各个目标之间互相影响,模型单个目标的提升,不一定带来线上收益。

因此最好的方案就是所有预估目标都能提升,如何设计一个好的多任务学习算法框架,变得非常关键。这个算法框架必须考虑数据、特征、embedding,网络结构以及单列用户交互特点。在多任务学习层面,改造MMoE算法,设计了一个统一的学习框架,显著提升模型所有目标的预估效果,并且方便后续统一优化。现实中的数据杂乱无章,往往并不是符合同一分布或者服从同一特征空间,尤其是主站双列与单列场景,在快手的业务场景中是有交集或者关联的。工业界和学术界讨论的multi-task通常是从一个语义维度。在快手团队的实际业务中,multi-task是存在多个语义的。 

第一个语义是单一业务场景下的多个任务在特征空间和特征分布构成的多个后验概率估计。

第二个语义是多个业务场景下对多个任务的分布估计,同时存在K个数据源分布对于同一任务和不同任务的关联性,以及不同任务之间的关联性。

MMoE是google提出的一种经典多任务学习算法,其核心思想是把shared-bottom网络替换为MMoE层,通过多个门控网络在多个专家网络上上分别针对每个目标学习不同专家网络权重进行融合表征,在此融合表征的基础上通过task网络学习每个任务。

通过参考MMoE算法和上面提到的快手推荐场景难点,快手团队改造了MMoE算法并设计了一套新的多任务学习算法框架,主要设计如下:

  • 特征层面,进行语义统一。
  • Embedding层面,进行空间重新映射。
  • 特征重要性层面,设计slot-gating layer,为不同业务做特征重要性选择。

通过以上3点的改动,快手团队把输入层的embedding表示从特征语义,embedding在不同业务分布,特征在不同业务重要性三个层面做了归一化和正则化,重新映射到统一的特征表征空间,使得MMoE网络在此空间上更好的捕捉多个任务之间后验概率分布关系。通过此项对MMoE的改进,模型所有的目标提升非常显著。

短期行为序列建模

用户行为序列建模层面,改造Transformer,提升用户行为序列建模能力。在快手推荐系统中,用户历史行为特征非常重要,对刻画用户兴趣的动态变化有很好的表征。在快手的推荐场景下,用户的行为特征非常丰富并且多变,其复杂度远远超过其他的用户,视频或者上下文特征,因此一个能够针对用户行为序列建模的算法很有必要。目前业界上对于用户行为序列建模主要分为两种模式,一是对于用户的历史行为进行weighted sum,二是通过RNN之类的模型进行时序建模。

在双列精排模型,用户行为序列只是做简单做sum pooling作为模型输入。而在单列场景下,用户被动接收快手推荐视频,而且丢失掉封面信息后,用户需要观看视频一段时间再做反馈,用户主动视频选择权降低,更加适合推荐系统对用户的兴趣做E&E(Exploit & Explore),这样用户的视频观看行为更能体现出一些pattern。

Transformer模型是Google在2017年提出的经典神经网络翻译模型,后来火爆的BERT和GPT-3也是基于此模型部分结构。在对单列用户的行为序列模型设计上,快手团队参考了Transformer。Transformer主要包括Encoder跟Decoder两部分,其中Encoder部分对输入语言序列进行建模,这部分跟快手团队对用户行为序列建模目标是非常类似的,因此快手团队借鉴其中算法结构并对计算量进行了优化。改造后的Transformer网络能显著提升模型的预估能力,在离线评估上,用户观看时长类预估提升非常明显,线上用户观看时长也显著提升。

长期兴趣建模

一直以来,快手的推荐算法都比较偏向于使用用户最近的行为。快手的精排模型对用户的短期兴趣进行了极致的建模,取得了非常大的收益。快手团队采用了用户最近k个历史行为进行建模。由于短视频行业的特点,最近历史行为通常只能表示用户很短一段时间内的兴趣。这就造成了目前的模型过度依赖用户的短期行为,而导致了对用户中长期兴趣建模的缺失。

针对快手的业务特点,快手团队对于用户长期兴趣也进行了建模,使得模型能对于用户长期的历史记录都有感知能力。快手团队发现,将用户的交互历史序列(播放、点赞、关注、转发等)扩长之后,模型能够更好的捕捉到一些潜在的用户兴趣,即使此类行为相对稀疏。针对该特点,快手团队在之前的模型基础上设计并改进了用户超长期兴趣建模模块。此模型已经在全量业务推全并且取得了巨大的线上收益。

快手用户长期兴趣精排模型结构示意图

千亿特征

随着模型的迭代,dnn网络的复杂度越来越高,模型中添加的特征数量也越来越多,模型特征规模的大小也制约了精排模型的迭代。带来的问题主要有以下几点:

模型特征规模的限制,导致一部分特征被逐出,这会带来模型收敛的不稳定性。部分低频的特征更容易被逐出,会导致线上冷启动效果变差(新视频、新用户),对于长尾的视频或者新用户不够友好。

为了解决这个问题,快手团队同架构组针对训练引擎和线上serving进行改进,可以做到离线训练和线上serving的服务根据配置的特征量灵活扩展,可以做到精排模型离线跟线上有千亿特征,万亿参数的规模,并已经上线,取得不错的线上收益。特别的,新模型对于新视频跟新用户的流量分发更加友好,也是践行了快手推荐"普惠"的理念。目前快手的精排模型,总特征量超过1000亿,模型总的参数量超过19000亿,已经全量上线。

在线训练和预估服务

为了支撑推荐场景下千亿特征模型的在线训练和实时预估,快手团队针对训练框架和线上预估服务的参数服务器(Parameter Server)进行了修改。在推荐模型的在线学习中,存储Embedding的参数服务器需要能够精准的控制内存的使用,提升训练和预估的效率。为了解决这一问题,快手团队提出了无冲突且内存高效的全局共享嵌入表(Global Shared Embedding Table, GSET)的参数服务器设计。

每个 ID 单独映射一个Embedding向量很快就会占满机器的内存资源,为了确保系统可以长期执行,GSET 使用定制的 feature score 淘汰策略以控制内存占用量可以始终低于预设阈值。传统的缓存淘汰策略如 LFU、LRU 只考虑了实体出现的频率信息,主要用以最大化缓存的命中率。feature score 策略考虑了机器学习场景下额外的信息来辅助进行特征淘汰。

在推荐系统的在线学习过程中,会有大量低频 ID 进入系统,这些低频 ID 通常在未来的预估中根本不会出现,系统接收了这些特征后可能很快又会再次淘汰他们。为了防止低频 ID 无意义的进入和逐出对系统性能产生影响,GSET 中支持一些特征准入策略来过滤低频特征。同时为了提升GSET的效率和降低成本,快手团队还采用了新的存储器件 -- 非易失内存 (Intel AEP)。非易失内存能提供单机达到若干TB的近似内存级别访问速度。为了适配这种硬件,快手团队实现了底层KV引擎NVMKV来支撑GSET。

One More Thing

据快手推荐算法负责人宋洋介绍,短视频行业有其独特的挑战,表现在用户量级大,视频上传量大,作品生命周期短,用户兴趣变化快。因此很难照搬传统视频行业精细化运营的做法来做推荐,而需要依靠推荐算法对视频进行及时的,精细化的分发。快手推荐算法团队一直针对短视频业务进行深度定制和积极创新,提出了很多业界首创的推荐模型和想法,同时也给推荐工程架构团队带来了很多系统和硬件层面的挑战。

万亿参数模型是推荐系统一个里程碑式的突破,结合了序列模型,用户长短期兴趣模型,门控模型,专家模型等各个方面的优点,是至今为止工业级最全面,最有效的推荐模型,该模型已经在快手的主要业务上全量上线。在未来"算法-系统-硬件"三位一体的挑战和机遇可能会有更多,希望这将更进一步推动快手推荐系统在技术上的创新和突破,为用户增进体验和创造价值。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章