1.前言:召回排序流程策略算法简介
举荐可分为以下四个流程,别离是召回、粗排、精排以及重排:
- 召回是源头,在某种意义上决定着整个举荐的天花板;
- 粗排是初筛,个别不会上简单模型;
- 精排是整个举荐环节的重中之重,在特色和模型上都会做的比较复杂;
- 重排,个别是做打散或满足业务经营的特定强插需要,同样不会应用简单模型;
召回层:召回解决的是从海量候选item中召回千级别的item问题
- 统计类,热度,LBS;
- 协同过滤类,UserCF、ItemCF;
- U2T2I,如基于user tag召回;
- I2I类,如Embedding(Word2Vec、FastText),GraphEmbedding(Node2Vec、DeepWalk、EGES);
- U2I类,如DSSM、YouTube DNN、Sentence Bert;
- 模型类:模型类的模式是将用户和item别离映射到一个向量空间,而后用向量召回,这类有itemcf,usercf,embedding(word2vec),Graph embedding(node2vec等),DNN(如DSSM双塔召回,YouTubeDNN等),RNN(预测下一个点击的item失去用户emb和item emb);向量检索能够用Annoy(基于LSH),Faiss(基于矢量量化)。此外还见过用逻辑回归搞个预估模型,把权重大的穿插特色拿进去构建索引做召回
排序策略,learning to rank 流程三大模式(pointwise、pairwise、listwise),次要是特色工程和CTR模型预估;
粗排层:实质上跟精排相似,只是特色和模型复杂度上会精简,此外也有将精排模型通过蒸馏失去简化版模型来做粗排
- 常见的特色开掘(user、item、context,以及互相穿插);
精排层:精排解决的是从千级别item到几十这个级别的问题
- CTR预估:lr,gbdt,fm及其变种(fm是一个工程团队不太强又对算法精度有肯定要求时比拟好的抉择),widedeep,deepfm,NCF各种穿插,DIN,BERT,RNN
- 多指标:MOE,MMOE,MTL(多任务学习)
- 打分公式交融: 随机搜寻,CEM(性价比比拟高的办法),在线贝叶斯优化(高斯过程),带模型CEM,强化学习等
- 重排层:重排层解决的是展现列表总体最优,模型有 MMR,DPP,RNN系列(参考阿里的globalrerank系列)
展现层:
- 举荐理由:统计规定、行为规定、抽取式(个别从评论和内容中抽取)、生成式;排序能够用汤普森采样(简略无效),交融到精排模型排等等
- 首图优选:CNN抽特色,汤普森采样
- 摸索与利用:随机策略(简略无效),汤普森采样,bandit,强化学习(Q-Learning、DQN)等
- 产品层:交互式举荐、分tab、多种类型物料交融
2.粗排
在搜寻、举荐、广告等须要进行大规模排序的场景,级联排序架构失去了十分宽泛的利用。以在线广告零碎为例,按程序个别蕴含召回、粗排、精排、重排等模块。粗排在召回和精排之间,个别须要从上万个广告汇合中抉择出几百个合乎后链路指标的候选广告,并送给前面的精排模块。粗排有很严格的工夫要求,个别须要在10~20ms内实现打分。在如此微小的打重量以及如此严格的RT需要下,粗排是如何均衡算力、RT以及最初的打分成果呢?
2.1 粗排的倒退历史
粗排和精排有两点不同:
- 算力和RT的束缚更严格:粗排的打重量远高于精排,同时有更严格的提早束缚,阿里巴巴定向广告的要求是10-20ms
- 解空间问题更重大:粗排和精排训练的时候应用的都是展示样本,然而线上打分环节粗排打分候选集更大,打分阶段间隔展示环节更远,因而粗排阶段打分汇合的散布和展示汇合差距相比精排更大,解空间问题也更重大。
2.1.1 粗排的两大技术路线(汇合抉择和精准预估)
粗排的技术路线其实就是解决粗排个别该怎么迭代的问题,因为粗排是处于召回和精排之间的一个模块,因而粗排自身的迭代会受到前后链路的制约,因而须要站在整个链路的视角来对待这个问题。纵观整个链路,粗排个别存在两种技术路线:汇合抉择和精准值预估。
汇合抉择技术
汇合抉择技术是以汇合为建模指标,选出满足后续链路需要的汇合的办法,该技术路线在召回十分典型,这其实也十分合乎粗排的定位。该办法长处是算力耗费个别比拟少,毛病是依赖于对后链路的学习,可控性较弱。
什么叫可控性?也就是说如果心愿进行一些调整的话,因为这种形式依赖于通过数据回流对后链路进行学习,而数据回流往往比较慢,同时对数据量也有要求,可能须要前面链路的这些策略调整影响到比拟大的流量之后,粗排才能够学习到,因而这种形式可控性比拟弱,是偏被动的一种形式。
这种技术路线有以下常见的几种办法:
- 多通道办法:相似于召回,针对不同的指标构建不同的通道,而后别离选出不同的汇合,而后再进行合并抉择。
- Listwise办法:个别是间接建模汇合的损失,典型算法如LamdaMART。为了更好了解listwise算法,这里提一下pointwise算法和pairwise算法,pointwise算法个别是点估计的形式,训练过程只思考单条样本;而pairwise算法训练过程中会思考以后样本和其它样本的互相关系,会结构这样的pair,并在训练的过程中引入这方面的pairwise loss,训练指标可能是正pair排在负pair的后面;Listwise更近一步,在训练的时候会思考整个汇合,会心愿整个汇合的指标如NDCG等达到最大化,如LamdaMART算法。
- 序列生成办法:间接做汇合抉择。个别蕴含汇合评估器和汇合生成器,算法过程如下:首先,用评估器对所有的item进行打分并抉择一个得分最高的,作为汇合中的第一个商品。接下来,再筛选第二个商品,把第一个商品和所有可能的第二个商品进行组合,并用评估器进行打分。之后,抉择得分最高的汇合,并继续应用相似于贪婪的形式一直的搜寻,最终失去一个最优的汇合。
精准值预估技术
精准值预估技术间接对最终零碎指标进行准确值预估,其实也就是pointwise的形式。以广告零碎为例,建模的指标个别是ECPM,即
$ECPM=pCTR*bid$
pCTR是广告点击率预估,ECPM:EFFECPM:EFFECTIVE COST Per
Mille,每1000次展览可用的广告支出,ECPM是流量端,媒体角度,Bid Request【竞价申请】
利用预估技术预估pCTR,而后预估bid,最终依据ECPM来进行排序,在粗排的话就是取排序的分最高的topK作为最终的汇合。这种形式的长处是可控性强,因为是间接对整个指标进行建模,如果建模形式做了调整的话,能够间接调整排序公式,调整预估模型,对整个链路的掌控力更强。毛病就是算力耗费比拟大,而且预估越精确,算力耗费也越大。
2.1.2 粗排的技术倒退历史(向量內积,Wide&Deep等模型)
粗排在工业界的倒退历程能够分成上面几个阶段:
① 最晚期的第一代粗排是动态品质分,个别是统计广告的历史均匀CTR,只应用了广告侧的信息,表达能力无限,然而更新上能够做到很快。
② 第二代粗排是以LR为代表的晚期机器学习模型,模型构造比较简单,有肯定的个性化表达能力,能够在线更新和服务。
其中①②能够合称为“粗排的前深度学习时代(2016年以前)”。
③ 以后利用最宽泛的第三代粗排模型,是基于向量内积的深度模型。个别为双塔构造,两侧别离输出用户特色和广告特色,通过深度网络计算后,别离产出用户向量和广告向量,再通过内积等运算计算失去排序分数,③ 称为“粗排的深度时代-向量内积模型(2016)”。
向量内积模型相比之前的粗排模型,表达能力有了很显著的晋升,其长处:
- 内积计算简略,节俭线上打分算力
- User向量和Ad向量离线计算产出,因而能够做的非常复杂而不必放心在线RT问题
- 双塔构造的user侧网络能够引入transformer等简单构造对用户行为序列进行建模
然而依然有许多问题:
- 模型表达能力依然受限:向量内积尽管极大的晋升了运算速度,节俭了算力,然而也导致了模型无奈应用穿插特色,能力受到极大限度。
- 模型实时性较差:因为用户向量和广告向量个别须要提前计算好,而这种提前计算的工夫会拖慢整个零碎的更新速度,导致系统难以对数据分布的疾速变动做出及时响应,这个问题在双十一等场景尤为显著。
- 存在冷启动问题,对新广告、新用户不敌对
- 迭代效率:user向量和item向量的版本同步影响迭代效率。因为每次迭代一个新版本的模型,别离要把相应user和item向量产出,其自身迭代流程就十分长,尤其是对于一个比拟大型的零碎来说,如果把user和item都做到了上亿的这种级别的话,可能须要一天能力把这些产出更新到线上,这种迭代效率很低。
针对向量内积模型的问题,也有很多相干的改良,典型的如上面这个办法。
另外一个典型的改良办法是向量内积模型的实时化, user向量通过线上打分实时产出,ad向量依然离线产出,然而更新频次减少。
通过实时打分,能够引入实时特色,实时性增强。然而实时打分使向量内积模型的RT和算力劣势削弱,user模型处于RT的束缚不能设计的很简单,而且该办法还引入了新的打分模型和ad向量版本不统一的问题。
④第四代COLD,下一代粗排框架(2019)-算力感知的在线轻量级的深度粗排零碎。上面将具体介绍该模型。
2.2 粗排的最新进展COLD(框架)
后面粗排的相干工作仅仅把算力看做零碎的一个常量,模型和算力的优化是拆散的。这里从新思考了模型和算力的关系,从两者联结设计优化的视角登程,提出了新一代的粗排架构COLD ( Computing power cost-aware Online and Lightweight Deep pre-ranking system )。它能够灵便地对模型成果和算力进行均衡。COLD没有对模型构造进行限度,能够反对任意简单的深度模型。这里咱们把GwEN ( group-wise embedding network ) 作为咱们的初始模型构造。它以拼接好的特色embedding作为输出,前面是多层全连贯网络,反对穿插特色。当然,如果特色和模型过于简单,算力和延时都会难以承受。因而咱们一方面设计了一个灵便的网络架构能够进行成果和算力的均衡。另一方面进行了很多工程上的优化以节俭算力。
总结为以下几点:
- 基于算法-零碎Co-Design视角设计,算力作为一个变量与模型进行联结优化
- 模型构造没有限度,能够任意应用穿插特色
- 工程优化解决算力瓶颈
- 在线实时零碎,实时训练,实时打分,以应答线上散布疾速变动
2.2.1模型构造
① 特色筛选
精简网络的办法有很多,例如网络剪枝 ( network pruning)、特色筛选 ( feature selection)、网络结构搜寻 ( neural architecture search)等。咱们抉择了特色筛选以实现成果和算力的均衡,当然其余技术也能够进行尝试。具体来说,咱们把SE (Squeeze-and-Excitation) block引入到了特色筛选过程中,它最后被用于计算机视觉畛域以便对不同通道间的外部关系进行建模。这里咱们用SE block来失去特色重要性分数。假如一共有M个特色,ei示意第i个特色的embedding向量,SE block把ei压缩成一个实数si。具体来说先将M个特色的embedding拼接在一起,通过全连贯层并用sigmoid函数激活当前,失去M维的向量s:
$s=\sigma(W[e_1,...,e_m]+b)$
这里向量s的第i维对应第i个特色的重要得分,而后再将s_i乘回到e_i,失去新的加权后的特征向量用于后续计算。
在失去特色的重要性得分之后,咱们把所有特色按重要性抉择最高的top K个特色作为候选特色,并基于GAUC、QPS和RT指标等离线指标,对成果和算力进行均衡,最终在满足QPS和RT要求状况下,抉择GAUC最高的一组特色组合,作为COLD最终应用的特色。后续的训练和线上打分都基于抉择进去的特色组合。通过这种形式,能够灵便的进行成果和算力的均衡。
留神Se Block仅用于特色筛选阶段,线上模型不蕴含该构造。
② 基于scaling factor的结构化剪枝
此外COLD还会进行剪枝,做法是在每个神经元的输入前面乘上一个gamma,而后在训练的loss上对gamma进行稠密惩办,当某一神经元的gamma为0时,此时该神经元的输入为0,对尔后的模型构造不再有任何影响,即视为该神经元被剪枝。
在训练时,会选用循环剪枝的形式,每隔t轮训练会对gamma为0的神经元进行mask,这样能够保障整个剪枝过程中模型的稠密率是枯燥递加的。
这种剪枝办法在成果根本不变的状况下,粗排GPU的QPS晋升20%。最终模型是7层全连贯网络。
2.2.2工程优化
更多内容参考:https://blog.csdn.net/sinat_39620217/article/details/129049467?spm=1001.2014.3001.5501
2.3粗排技术的总结与瞻望
更多内容参考:https://blog.csdn.net/sinat_39620217/article/details/129049467?spm=1001.2014.3001.5501
2.3.1 总结!
2.3.2COLD的进一步倒退以及瞻望
3. 相干文章举荐:
更多内容参考:https://blog.csdn.net/sinat_39620217/article/details/129049467?spm=1001.2014.3001.5501