导语 | 粗排是介于召回和精排之间的一个模块,是典型的精度与性能之间 trade-off 的产物。了解粗排各技术细节,肯定要时刻把精度和性能放在心中。
本篇将深刻重排这个模块进行论述。
一、总体架构
粗排是介于召回和精排之间的一个模块。它从召回获取上万的候选 item,输入几百上千的 item 给精排,是典型的精度与性能之间 trade-off 的产物。对于举荐池不大的场景,粗排是非必选的。粗排整体架构如下:
二、粗排根本框架:样本、特色、模型
目前粗排个别模型化了,根本框架也是包含数据样本、特色工程、深度模型三局部。
(一)数据样本
目前粗排个别也都模型化了,其训练样本相似于精排,选取曝光点击为正样本,曝光未点击为负样本。但因为粗排个别面向上万的候选集,而精排只有几百上千,其解空间大很多。只应用曝光样本作为训练,但却要对曝光和非曝光同时预测,存在重大的样本抉择偏差(SSB 问题),导致训练与预测不统一。相比精排,显然粗排的 SSB 问题更重大。
(二)特色工程
粗排的特色也能够相似于精排,因为其计算提早要求高,只有 10ms~20ms,故个别能够粗分为两类:
一般特色:相似精排,user、context、item 三局部。有哪些特色,以及特色如何解决,能够参看精排的特色工程局部。
穿插特色:user 和 item 之间的穿插特色,对晋升模型精度很有帮忙。但因为穿插特色枚举过多,难以离线计算和存储。实时打分时又不像 user 特色只用计算一次,提早较高。故对于穿插特色要审慎应用。
(三)深度模型
粗排目前曾经根本模型化,其倒退历程次要分为四个阶段:
第一代:人工规定策略,能够基于后验统计,构建一个人工规定。比方交融 item 的历史 CTR、CVR、类目价格档、销量等比拟外围的因子。人工规定准确率低,也没有个性化,也不可能实时更新。
第二代:LR 线性模型,有肯定的个性化和实时性能力,但模型过于简略,表达能力偏弱。
第三代:DSSM 双塔内积深度模型。它将 user 和 item 进行解耦合,别离通过两个 Tower 独立构建。从而能够实现 item 向量离线存储,升高线上 predict 提早。次要有两种范式:
item 和 user 均离线存储。这个计划只须要计算 user 和 item 的内积即可,计算提早低。因为 user 是离线存储的,故能够应用简单的模型,晋升表达能力。但 user 侧的实时性较差,对于用户行为不能实时捕获。
item 离线,user 实时。item 绝对 user,实时性要求没那么高。因为一次打分是针对同一个用户的,故 user 侧只须要实时计算一次即可,速度也很快。目前这个计划应用较多。
第四代:item 和 user 隔离,导致二者没有特色穿插能力,模型表达能力弱。故又提出了以 COLD 为代表的第四代模型,轻量级 MLP 粗排模型。它通过 SE block 实现特色裁剪,并配合网络剪枝和工程优化,能够实现精度和性能之间的 trade-off。
三、粗排优化
粗排的几个次要问题:
精度和特色穿插问题:经典的 DSSM 模型长处很多,目前在粗排上广泛应用,其最外围的毛病就是不足特色穿插能力。正所谓成也萧何败萧何,正是因为 user 和 item 拆散,使得 DSSM 性能很高。但反过来也是因为二者不足穿插,导致模型表达能力有余,精度降落。典型的精度和性能之间的 trade-off。
低提早要求:粗排提早要求高,个别只有 10ms~20ms,远低于精排的要求。
SSB 问题:粗排解空间比精排大很多,和精排一样只应用曝光样本,导致重大的样本抉择偏差问题。
(一)精度晋升
精度晋升的计划次要有精排蒸馏和特色穿插,次要还是要优化特色穿插问题。
- 精排蒸馏
精排模型作为 teacher,对粗排模型进行蒸馏学习,从而晋升粗排成果,这曾经成为了目前粗排训练根本范式
- 特色穿插
特色穿插能够在特色层面,也能够在模型层面实现。特色层面就是手工结构穿插特色,作为模型底层输出,依然能够在独立的 Tower 中。模型层面则应用 FM 或者 MLP 等实现主动穿插。次要办法有:
特色蒸馏:teacher 和 student 应用雷同的网络结构,teacher 模型应用一般特色和穿插特色,student 则只应用一般特色。student 从 teacher 中能够学到穿插特色的高阶信息。
退出穿插特色:特色层面构建手工穿插特色,独立的 Tower 中应用。因为穿插特色难以离线存储,实时计算空间也很大,故这个独立的 Tower 不能过于简单。那咱们第一工夫就想到了 wide&deep 模型。deep 局部依然应用 DSSM 双塔,wide 局部则为穿插特色。
轻量级 MLP:模型层面实现特色穿插,不进行独立分塔。比方 COLD,通过特色裁剪、网络剪枝、工程优化等形式升高时延,而不是靠独立分塔。
(二)提早升高
精度和性能始终以来都是一个 trade-off,很多计划都是在二者之间寻找均衡。粗排的性能要求更高,其提早必须管制在 10ms~20ms 以内。性能优化有很多常见办法。
次要有以下办法:
特色裁剪:如 COLD,不重要的特色先滤掉,天然就升高了整体提早。这一层能够做在模型内,从而能够个性化和实时更新。
量化和定点化:比方 32bit 升高为 8bit,能够晋升计算和存储性能。
网络剪枝:network pruning,包含突触剪枝、神经元剪枝、权重矩阵剪枝等办法,不开展了。
模型蒸馏:model distillation,上文曾经提到了,不开展了。
网络结构搜寻 NAS:应用更轻量级,成果更好的模型。能够尝试网络结构搜寻 NAS。
(三)SSB 问题
粗排解空间比精排大很多,和精排一样只应用曝光样本,导致重大的样本抉择偏差问题。能够把未曝光样本的精排打分给利用起来,缓解 SSB 问题。
作者简介
谢杨易
腾讯利用算法研究员。