01 Likee短视频举荐模型和特色工程简介
Likee短视频是寰球视频社交平台BIGO旗下的短视频产品,2017年7月正式上线,在三年的工夫内曾经交出了寰球MAU过亿的成绩单。首页广场瀑布流是Likee短视频最次要的视频生产场景。三年来,Likee举荐模型在一直优化网络结构的同时,在特色工程方向也倒退出一套特有的技术解决方案。
特色工程,顾名思义,是对原始数据进行一系列解决,将其提炼为模型可了解的输出数据格式,为模型提供信息增益以晋升模型精度,特色工程是一个示意和展示信息的过程。在理论工作中,特色工程旨在去除原始数据中的杂质和冗余,设计更高效的特色以刻画求解的问题与模型预测指标之间的关系。
特色是模型训练和预估的根底,决定了模型精度的下限。对于在线举荐服务而言,特色数据流对于策略迭代的效率起着至关重要的作用。通过多年实际中的积攒和提炼,咱们演化出一套针对大规模实时深度模型的特色数据框架,在进步策略迭代效率和模型成果的同时,也极大简化了工程复杂性和业务老本开销。这套特色数据流框架在Likee短视频首页举荐场景的精排和粗排模块实现多个AB试验和全流量上线,模型AUC和业务指标均获得显著晋升。
如图一所示,排序模型流程包含日志收集、训练数据生成、模型训练和线上打分等阶段。当举荐系统对用户进行举荐时,会记录过后的物料特色、用户状态与上下文信息,并收集本次举荐的用户行为反馈。在通过样本标签匹配和特色抽取后生成最终的训练数据。离线应用 PS-WORKERS分布式训练框架对DNN模型进行分布式实时训练,定期dump最新模型并加载到线上,用于线上排序服务。
Likee首页举荐初始阶段为了满足疾速上线的需要,线上应用的模型是基于间断统计特色的XGB模型,然而树模型在多指标建模和增量学习不便严重不足。近年来,深度学习模型凭借其弱小的表达能力和灵便的网络结构在工业届举荐和广告畛域获得重大进展,Likee首页举荐场景中,用户与视频交互产生了海量的实在行为数据,为深度学习模型利用提供了必要的条件。为解决大规模的训练样本和进步训练效率,咱们应用分布式训练框架训练DNN模型,并基于该框架进行了屡次优化尝试,在Likee首页举荐场景下获得了显著的成果晋升。
特色数据作为模型的输出与模型构造严密相连,特色体系随着模型选型一直降级,上面将别离从统计特色、session特色、多模态特色和cache tensor介绍咱们在特色工程方面所做的优化与尝试。
02 Flink统计特色和session特色
2.1 基于滑动变长窗口聚合的Flink统计特色
相比于基于间断值统计特色的树模型,增量fine-train的DNN模型十分依赖于稠密特色hashkey的复现,因而模型和特色时效性至关重要,因而咱们引入业界支流的分布式流数据计算引擎Flink实现分钟级提早的统计特色和秒级提早的session特色。
如图二所示,咱们采纳变长bucket窗口聚合的形式对每一个统计实体进行counting,记录其在时间轴上不同bucket的counting累加值,对于越长远的行为咱们采纳更大的bucket工夫间距进行聚合,在模型应用时,咱们再依据特色具体的工夫范畴从聚合桶队列累加出任意时间段内的统计值。通过这样的形式,在保障counting统计值精度的同时,可能大幅升高redis和Flink工作的内存存储和读写压力。
2.3 Flink秒级提早session特色
如图三所示,应用Flink工作记录用户历史行为队列,当Flink工作收到用户行为打点日志时,从redis读取用户行为队列进行更新而后写回到redis。其中,咱们做了如下工程实际优化:
● 分用户行为队列存储。在短视频举荐场景用户行为丰盛,用户的高阶行为(点赞,关注,分享)稠密且更可能反馈用户趣味,因而依据用户不同行为划分成多个种子视频队列,保障用户趣味度更高的高阶行为种子可能被更短暂存储和充分利用;
● 冷热数据拆散。为了优化redis的读写和存储压力,将用户一天以前的长周期行为队列冷备到pika,在线上模型应用时再将redis短期行为队列和pika长期行为队列合并成残缺的用户行为队列,通过这样的形式,咱们存储的用户历史行为队列长度能够达到千量级;
● 用户行为反馈编码。为了进一步建模用户对种子视频的偏好度,Flink工作会记录用户对每个种子视频的所有交互数据(是否播完,播放时长,播放次数,是否点赞|关注|分享|评论等),在模型网络里将用户反馈行为编码后embbeding作为用户对历史种子趣味度的补充信息,在用户趣味网络里该特色效果显著;
● 种子视频属性特色线上实时获取。Flink工作只记录种子视频id,种子视频属性特色是在线上模型应用时依据种子视频id从画像特色服务获取。
基于以上秒级提早的用户session队列特色,Likee短视频首页举荐粗精排均全量了用户趣味网络模型。
03 主动统计特色
3.1 Flink统计特色数据流的问题
随着Likee短视频日活和视频生产量高速增长,原有Flink统计工作很快遇到瓶颈,其面临以下几点问题:
● 机器资源耗费高,稳定性差。Flink统计工作波及到打点日志解析、历史特色读取、特色计算&新特色回写,大量的计算和IO开销导致流式零碎稳定性堪忧,并且机器耗费资源微小;散失统计工作的不稳固导致统计特色散布激烈变动,线上效果显著降落,同时会影响离线训练数据导致线上模型很难迅速复原;
● 用户&物料交互统计信息缺失。举荐零碎基于用户历史行为进行举荐,千人千面的个性化举荐零碎强依赖于用户属性(用户id,性别,年龄,城市,趣味标签,手机机型等)与物料属性(视频id,拍客id,标签,城市,国家等)之间的穿插特色。用户属性和视频属性间的穿插特色高度稠密且数据量微小, Flink统计的数据必须短暂存储于内存或者分布式内存存储系统(如redis),受限于存储系统容量,无奈统计这部分穿插特色的统计值。
3.2 主动统计特色的实现
主动统计特色就是把特色做到模型里,在模型训练时借助于分布式训练平台弱小的I/O和存储能力,在训练引擎内进行特色级别的counting统计,从而简化离线特色计算流程的复杂度。
在模型训练时,以样本里呈现的每个hashkey为统计对象实体,首先从参数服务器pull 该hashkey历史累计的行为统计量(stats feature),如果该hashkey第一次呈现,则将stats feature用0向量初始化, 而后用以后样本的用户行为反馈action_tpl(示意样本是否曝光,是否点击,是否播完,播放时长等行为)对其进行更新:
Stats_feature <- stats_feature * decay_rate + actiontpl
其中decay_rate 示意工夫衰减因子,而后将更新后的stats_feature push回参数服务器。
3.3 主动统计特色在DNN模型里的应用和优化
如上图所示,对每个特色域而言,依据其hashkey从参数服务器pull 其对应的counting统计值,而后多个特色域统计向量concat在一起形成统计特色域(stats feature)。对模型而言,原始的counting统计值与模型的预估指标并不完全一致,须要将原始counting统计值转换为与模型指标更相干的率值特色(列表点击率,播完率,点赞率等)。
图五为专门设计的counting统计特色预处理模块,首先将原值进行对数操作,将求比率的除法运算转换成等价的求差运算,而后引入差值矩阵实现批量求差操作,失去的后果即为咱们须要的比率特色。
3.4 主动统计特色和embedding 特色的比拟
stats特色和embedding特色从特色实质上而言其实是相通的,都是作为该特色filed特定的hashkey的信息输出,并且他们的原始信息都起源样本里的用户行为反馈,只不过二者更新形式(即获取特色信息的形式)不同。embedding特色的更新是通过梯度回传进行软更新(回传的梯度依赖于样本里的用户行为结构的label),stats特色则是间接依据样本里用户行为进行硬更新。软更新的embedding特色是基于整个模型参数每次进行小幅度更新,对于复现次数足够多的hashkey可能学习到更高的精度和更全面的信息,硬更新的stats特色对于复现次数少的hashkey可能做到更疾速收敛。
stat特色和emb特色各有优劣互为补足,上图示意只用stat特色和只用emb特色以及二者都用的三个模型auc比照。
对于高度稠密复现次数少的穿插特色,embbeding特色因为hashkey呈现次数少导致训练不充沛,而穿插统计特色则可能更疾速精确地捕捉到用户的个性化趣味。
04 多模态特色
4.1 为什么引入多模态特色
在DNN模型降级和网络结构优化拿到微小收益后,Likee模型组致力于将视频raw feature作为特色减少到模型中去。视频raw feature是用户间接接管的信号,并且raw feature和 ID 类特色不同,ID 类特色的所有信息都源于样本里和 label 共现信息的用户反馈,而raw feature自身具备物理含意,所以其具备更好的泛化性。另一方面,Likee短视频作为寰球当先的短视频社区,新视频冷启和优质视频开掘对于资源生态扮演着重要的角色,对于不足用户行为反馈的新视频,raw feature是视频内容了解和品质评估最重要的信息起源。
4.2 多模态特色抽取
视频raw feature过大,每天产生近百亿样本,波及数据会达到上百 T,对于存储和 I/O 都会造成很大的压力,因而须要对视频raw feature进行特征提取和压缩。同时,如果间接引入视频raw feature作为排序模型的原始输出特色,将多模态模型和排序模型联结训练,会导致模型训练收敛慢且成果不稳固的问题。
最终多模态特色抽取设计如下:在视频上传入库时,应用预训练好的视频模型(I3D)和语音模型对原始视频进行特征提取,将多模态模型的最初一层全连贯输出作为原始视频raw feature的低维向量表白,而后将他们存入到视频固有属性特色,在排序模型中将视觉和语音向量和视频ID emb向量以及其余side info作为视频表征的原始输出。
4.3 多模态向量聚类后embedding
因为预训练的多模态模型和排序模型指标齐全不统一,为了让生成的多模态向量可能更好地拟合排序指标,除了将上述视觉和语音向量间接作为模型输出,咱们还采纳K-MEANS别离对视觉和语音向量进行聚类失去视觉聚类id和语音聚类id,而后将这两个聚类id再通过DNN模型 embbeding层失去新的向量,通过排序模型指标的梯度回传来进一步学习多模态特色的向量表白,作为多模态特色输出的补充信息。
05 cache tensor
5.1 特色数据流的进一步变革
在主动统计特色中,咱们突破了特色体系和模型零碎明确的分界线,将统计特色做到模型里,极大简化了在线和离线模型对外界特色数据流的依赖。随着举荐模型的迅猛发展,越来越丰盛的模型特色导致线上原始特色和emb|stat特征参数的存储以及读取I/O压力骤增,越来越简单的模型网络带来微小的模型预估计算量。因而咱们从新梳理了在线离线数据流和模型训练流程,通过cache tensor的形式极大缓解了以上所述的存储,I/O和计算压力。
5.2 cache tensor的工程实现
如图七所示,右边是咱们过来的特色数据流程,线上特色服务依据用户id和候选视频id列表从在线存储系统获取特色片段并拼接成残缺的原始特色数据,将其输出给线上排序服务的同时还将原始特色数据dump到日志零碎供离线生成训练数据。在主动统计特色全量当前,咱们的特色能够分为以下几类:用户画像特色,视频画像特色,拍客画像特色以及用户session特色,其中三个画像特色更新频次低且占据原始特色的大部分存储空间。
咱们采纳cache tensor技术对特色数据流进行简化,线上特色服务只读取变动快的user_session特色,不再读取时序上根本固定不变的画像特色,排序服务获取的(也就是日志零碎dump的)原始特色只蕴含session特色以及用户uid还有候选视频item id。
在模型离线训练时,依据样本里的用户id和视频itemid从存储系统读取相应的画像特色对样本进行特色补全,而后应用batch 训练的形式对模型进行更新。在模型训练的同时,须要记录样本里呈现过的用户id和物料id列表供后续流程应用。
在模型训练完结后加载训练失去的模型,别离输出样本里呈现过的用户id和itemid列表,再次从存储系统读取相应的属性特色对样本进行特色补全,而后应用模型对样本进行预测。在预估过程中,将模型网络中的局部两头tensor cache到模型,和模型原本的emb参数一起存储。如上图所示,将模型网络分成两个局部, offline predict network和online predict network, 其中offline predictnet work中的虚线方框tensor (user emb和item emb) 即为须要cache的tensor。
在线服务模型对候选视频进行打分时,无需再读取和预处理画像特色,只须要将线上特色服务返回的用户id和候选视频itemid以及session特色输出给模型,模型依据用户id以及候选itemid在模型参数里查找相应cached tensor提供给裁剪后的模型网络进行预测,上图中 online predict network是依据cached tensor通过裁剪的线上预估网络,其输出为离线建库cache tensor后的模型参数。
采纳cache tensor的形式优化离在线数据流后,线上预估服务吞吐量减少6倍的状况下预估耗时升高40%。同时基于cache tensor优化粗排模型构造,粗排模型auc晋升2%,线上ab试验也获得显著效果收益。
06 总结
在Likee短视频举荐模型中,为了晋升离在线特色数据流零碎的稳定性和工程性能,同时优化排序模型成果,咱们尝试了如下改良:
(1)引入Flink实现秒级提早的session特色服务,通过分队列和冷热数据拆散实现千量级用户行为序列特色,用于建模用户长短期趣味;
(2)通过主动统计特色工程,在模型训练时同时进行特色更新,将统计特色做到模型参数里,极大简化特色数据流程,在晋升工程架构性能的同时取得了业务指标的显著晋升;
(3)采纳cache tensor的形式将画像特色做到模型参数里,进一步升高线上模型对于外围特色存储系统的数据依赖,同时通过预估网络的裁剪升高线上模型预估计算量,解决简单模型网络的在线预估耗时瓶颈,为更简单精准的排序模型打好根底。