广告引擎除了在召回环节和搜索引擎不一样之外,在打分排序环节也有自己的特点。这主要是因为它们需要返回的结果数量不同。具体来说就是,在搜索引擎中,我们要返回 Top K 个结果,但是在展示广告业务中,广告引擎往往最后只会返回一条广告结果!因此,对于最后选出来的这一条广告,我们希望它和用户的匹配越精准越好。所以,在广告引擎中,我们会使用复杂的深度学习模型来打分排序。
但如果在召回阶段选出的候选广告数量很多,那全部使用开销很大的深度学习模型来进行打分的话,我们是很难将单次检索结果控制在 0.1 秒之内的。而且,如果召回的候选广告数量有几千条,广告引擎最终又只能选出一条,那这几千条的候选广告都使用深度学习模型进行计算,会造成大量的资源浪费。
为了解决这个问题,我们可以在召回和精准打分排序之间,加入一个非精准打分的环节,来更合理地使用资源。具体来说就是,我们可以基于简单的机器学习模型(如逻辑回归模型(LR)、梯度提升决策树(GBDT)、因子分解机(FM)等)配合少量的特征,来完成这个非精准打分环节,将候选广告的数量限制在几十个的量级。然后,我们再使用深度学习模型来进行精准打分,最后选出分数最高的一个广告进行投放。这样,我们就能大幅节省计算资源,提升检索效率了。