由于在广告,推荐,营销,甚至很多更特定的业务场景中,整个链路囿于资源局限性,通常在一定工程与算法的限制下,被拆分成了多个模块。
一个typical的链路:召回粗排精排OR层[出价,list优化等]曝光点击转化
虽然整体的pattern比较固定,但是具体的指标,建模目标,如何贯穿在整个链路的前端,中端,后端,其实都需要细心的engineering:
准则:
1、链路前后端的评估指标都要跟最终目标对齐:
粗排优化目标对齐精排打分还是后验反馈?粗排需要进一步对齐ecpm吗?如果直接业务目标难以评估,我们能否用一个或者多个中间指标替代?
如果和最终结果没有对齐,那么在做模型选择,超参优化等过程中,对该“指标/目标”的优化,便不能优化最终业务结果。
通常,这个问题的一些实际表现为:“指标解释力不够”,譬如:
1、精排离线auc提升了,为什么最终收入没提升?【A:ecpm的排序能力提升了吗?(gini,spearman rank correlation)[4]】
2、ctr的auc提升了,为什么最终点击没有涨?【A:auc提升一定会让曝光的pctr提升吗?前后pctr如何对比?是ctr模型的问题还是别的问题,如何解决,当前条件下实验结果可看吗?】
3、 粗排ctr的auc提升了,为什么效果没有提升,甚至曝光的pCtr也没有提升?【A:粗排真正目标是什么?粗排auc提升,进入精排候选集的topk 精排pctr一定会提升吗?】
其实在不同“模块”自己的语境下(这个语境其实在设计之初就被固定了),所需的指标是不同的。
2、优化过程中,模型优化的目标本身要跟指标对齐:
有时候链路上的虽然指标对齐了,但是模型本身的优化没有与对齐后的指标对齐,则也难以提升效果。
譬如,logloss的最优与auc最优等价吗[8]?粗排的真正优化目标是auc还是lambda loss还是某种list最优[1][2][3]?分中间目标建模训练的模型,如何在优化过程中通过模型梯度的来保障最终指标优化?如何将模块的指标直接建模优化,譬如召回率。或者通过辅助目标优化(仅保证优化方向)?
后续会研究所谓metric driven loss design的设计。
3、关注长期目标的优化
由于系统设计上的妥协(例如粗排就是精排算力不足的妥协),有很多因素会导致系统陷入局部优化的困境,使得长期的大盘的指标难以得到优化。
1、一个常见的陷阱就是bias向当前数据反馈的空间,对于这个问题我们需要尽量保证指标的“无偏性”,例如使用随机样本计算无偏auc。整个链路原生性Bias,其实在不同的context下是不同的(下面列举SSB):
a、粗排到精排模型的bias(粗排在召回集上打分,精排在粗排后集合上打分,就算拿精排teach,原生样本也存在SSB)
b、在精排ctr中,是打分集合和曝光集合的bias。(模型选择)
c、在精排cvr中,打分集合和曝光并点击集合的bias。(模型选择+用户选择)
很多原生性的bias难以直接消除,可能更多要通过别的手段来优化:策略上EE策略的介入,指标上加入更多生态指标(非最终直接业绩指标),来保障长期的效果。
综上,关于整体设计思路
虽然在广告,推荐领域,似乎整体架构的设计都比较“固定”了,但是其实其细节指标,建模上的设计,仍有很多“变数”与设计空间。不同的目标/建模设计对业务生态最终的走向有着极大的影响,这里指的目标设计并不仅仅指各模块职能与目标的统一性设计,还有整体业务拆分出更细的目标如何在各个模块融入,譬如多样性目标,经常以不同的形式融入不同的模块。要结合限制与瓶颈进行设计。
同时,就我近些年来的经验来说,在大多数条件下,寻求最优解是个很难的过程,且不论形式化的问题定义本身会不会有太多的近似,就算在理想问题假设下,最优解可能都是难以达成的(譬如求解复杂度过高)。所以在设计过程中,基本上都是在做trade off,我们需要在trade off的过程中,抓住“核心问题”,可以在一些非核心的点上做出妥协的设计,保障“核心点”的优化程度。(其实往往trade off应该在更大的范围上进行考虑,因为无论人力,时间,各种成本,都是需要考虑进去的。所以识别核心问题与优化点是很重要的能力,这也是上层决策者更应该去考虑和设计的,而非简单地把只是把kpi拆一拆指派下负责人就完事儿。)
实例分析:
具体问题可能需要具体分析。譬如召回,粗排会面临类似的问题,也会有各自模块特性下独有的问题。而且很多问题的融合不是简单/单调的,而是与很多其他问题耦合在一起的。
从“指标”到“建模”上,我们都得更深入地执行end2end的思想,在常规最简洁的思路中,存在很多细节问题,需要我们去解决。
这里只进行一些粗浅的举例,包括提供一些简单思路:
广告,内容推荐:
问题:预估值互相耦合干预时,独立建模单独训练模型的状态下无法保障最终结果
比如连乘ctcvr = ctrcvr,单独优化ctr,cvr模型,无法保障其结果ctrcvr的排序能力。这时我们设计模型联合训练能提供一定的优化能力。
比如在广告bid层面,一个很容易理解的例子,ctcvr的auc提升了,整体ecpm会提升吗?转化数量会提升吗?实际上这转化和ecpm可能都不会提升,因为排序受到了另一个因素bid的影响,如果想要与目标一致性的指标,我们的指标需要将bid考虑进去,可以见csAUC,gcsAUC[1]。同时,仅仅将指标进行了转化,而不修改模型,往往会导致模型的优化方向跟指标存在偏差,那么最终也不会得到预期的结果,所以相关的模型优化可见[2]。
仓储规划:
比如业务问题:优化目标为单仓整体配送体积所影响的车辆数量与配置,而常规思路直接在sku级别数量(体积)的预估loss无法直接表征最终业务指标(单仓累计误差)
1、首先参数选择,模型选择优化时,指标必须加入仓级loss(业务指标),同时这个loss最好能更精准地反应业务诉求,比如在有些区间内,预估不准可以接受,比如真实数量很小时,无论如何都得配一个车,那误差也许都是可以接受的。
2、在模型训练时,也需要考虑相应的优化,比如加入仓级别loss联合训练,还有比如考虑实际业务,设计在不同数量级上不同的loss,比如分类?或者在不同值域加上不同样本weight?就算有些业务目标不容易精确建模其loss(比如有些问题不好转化为数值评估,或者loss不好优化函数不可导),我们也得通过一些方法使其目标向指标的“方向”优化,有时候这个方向需要通过一些数值或者梯度的分析来获取。
视频推荐:
比如我们业务诉求是视频推荐,那么很自然的一个业务目标就是按“视频播放时长”排序。
其实这里常规的思路可以建模完播率,然后用完播率乘以视频时长来拟合,但是一般建模完播率带来的问题在于,这种方法不能直接保证我们对最终期望时长的“拟合”能力:
这里很好分析,比如我们业务优化目标是:系统在“期望播放时长”这个维度的排序能力。
1、那么直接优化完播率的排序能力跟期望时长的排序能力能等价吗?(此时模型评估归一化的完播率auc)
显然不能,举个很简单的例子,假设模型完播率的排序能力很高,但是数值diff非常小(变异系数),那么最终最终很容易就被主导了。
2、优化完播率的绝对值loss可以保证业务目标的优化?(此时模型评估完播率mse)
一定程度优化,但是不完全等价。这里也很好分析,因为视频的长度不同,完播率1%带来的差异在不同时长的视频上会造成不同的影响。在1分钟和10分钟的时长中,影响差了10倍。
3、直接优化期望播放时长?(评估时长mse)
一定程度优化,不完全等价。这个问题其实跟2中的情况类似,时长很长的视频,预估错1%就差了很长,会主导loss,可能导致模型在中短视频上缺乏分辨能力。(因为较短的视频就算很大错误低估算其播放时间也不会产生很大的loss)
4、带权重loss直接优化期望时长。(评估带权mse,或者其rank correlation[7])
一定程度优化
其实带权重的loss来优化时长或者完播率的mse,可以分别对完播率被短视频dominate,时长mse被长视频dominate的情况进行优化。
然后我们评估的时候,同样不能直接采取mse来评估(因为这样的评估值本身也会被部分样本dominate),因此我们最好能跟其排序能力相关的指标来评估。[7]
但是,同样地,这个优化方法本身,没有直接优化“期望播放时长”的排序能力,只是在“方向”上一致,其实后续理论上还是有优化空间的。
5、带权loss间接优化期望时长。
一定程度优化
这种思路在y2b对播放时长的拟合,使用播放时长作为Loss的权重[6]
这种优化方式,通过将播放时长作为正样本权重,最终可以近似优化期望播放时长。
同样地,这种方式其实也存在上述类似的问题,比如长视频也许dominate 正样本。
同时也引入了其中“近似”推导带来的误差
好处是处理方式简单,现成框架优化logloss,调参等工具也许可以复用。
常规系统级,召回/粗排“召回率”目标对齐:
问题:其实召回/粗排这样的系统,其真实目标应该是“召回率”,而非进行“精排”级的准确估计。如果按照精排建模的思路建模召回/粗排的目标,那么肯定是次优的。
当然
1、基于lambda rank。
Metric Driven Loss design:
The LambdaLoss Framework for Ranking Metric Optimization
https://zhuanlan.zhihu.com/p/134672431
2、关于lambda rank 与 单点point wise的差异:
lambda rank基于先验,优化整体进入集合整体的loss,将更多的正样本排在前面。
而单点point wise没有考虑集合,而是将整体样本空间当作独立的ins,优化其排序。
3、关于基于lambda rank集合选择和“list”建模的差异:
传统的lambda rank更多是“先验”的loss
而直接建模list(生成list,评估list)则是更native的一种方法,但是并非原生地适用于粗排召回等模型
系统局限性造成的不一致问题:
系统优化目标对齐召回向量训练目标
这里其实有两个问题:
1、第一问题针对召回系统设计特有。
召回跟粗排计算系统的差异在于,粗排可以one by one对每一条instance进行预测,然后排序。而召回面向的是全量库,每个用户都要面向所有的商品作为候选集。因此常用的技术选型是双塔模型+向量检索。因此很自然地引出一个问题,我们如何将最终目标在双塔中建模,例如ctr,ctcvr这种是能直接建模的目标,而,是不好直接建模的间接目标。
2、第二个问题就是目标不一致。
这个问题在上面讨论过了。就是其实就算精排粗排能one by one地预估其ctr。但是我们最终需要的,是的排序能力,而非单纯ctr的排序能力,所以单独训练ctr模型并仅仅依赖ctr排序能力(auc)来选择模型有很严重的潜在问题。上述已经有思路解决[1]。
当然,上述两个不同视角下的问题,最终的解决方案都落在模型目标一致性的设计上,最常见的思路包括:
1、bid/price aware gradient decent[2],但是缺点是如果bid变化,可能模型就要重新训练。同时这种方法,由于没有显式地将bid加入整体排序,所以直接做召回的话还需要做额外的设计,例如如下。
2、相对于1中的方法,针对bid随时变化的特性,阿里也提出了PDM的思路,在广告中解决召回的end2end建模[3]。这个思路其实和y2b里期望时长的思路类似。不过这个完全是post-training的,不直接建模在模型中牺牲了一定的性能,但是换来了更多的flexibility。这两者很多时候也是需要trade off的。
原生系统SSB带来的问题
譬如粗排到精排的ssb:粗排面向召回集,而精排只评估通过粗排的topK。
精排本身的ssb:反馈只有曝光样本,而线上推理中其实大部分是未曝光样本,这些未在训练数据中。
分析方法:
分析不同模型输出值的具体分布,在相同的流量样本维度(pdf分布图:例如正/负例数值分布)。这个方法可以观测粗排对unpv样本的区分能力。proc指标,无偏样本指标。
思路:
1、常见的加入随机负采样:随机负样本可以用multi-task的方式以辅助目标形式出现,以免过度影响模型在原分布上的精度。但是直接引入这种“外部”样本存在很多噪音,因此通常在召回中使用,在粗排精排中需要谨慎。
2、以分类模型建模,将未展现样本作为第三类别进行训练:让模型能区分其是否展现(未展现的都是不在原生的反馈训练数据中)
3、以后续链路的模型指导:将部分未达到粗排topK的样本通过精排训练,输入这些样本,用distillation的方式对粗排进行训练。(在[3]中这部分样本只从unpv样本中挑选)
4、和别的任务联合训练:利用别的场景的样本,相当于是探索了更多空间,也能缓解原生ssb问题。
5、利用探索/随机曝光机制,获得无偏样本。(针对精排自身ssb,同时这也是通常的评估手段:用无偏样本评估模型)
Refer:
[1]广告 cpm sensitive 的auc指标:
CPM-sensitive AUC for CTR prediction(能否offline unbiased evaluation)
AUC,是评估是否把正样本排在负样本前面。
csAUC,其实就是评估是否把高ecpm样本都排在低ecpm样本前面。(不过这种方法物理意义和auc本身差别比较大,同时一定程度上弱化了负样本在评估结果里的权重,所以不同数据上评估数值更没有可比性)
https://blog.csdn.net/abcdefg90876/article/details/103951915
[2]精排模型建模优化中考虑bid因素:
bid-aware gradient decent,但是这会导致模型本身和bid耦合,如果用户调整了bid,可能会影响模型。
[3]在召回向量检索阶段考虑bid的影响:
PDM(Point based Deep Match Model),对间接目标优化的向量召回
https://mp.weixin.qq.com/s/Eld9IIqexvL9LilW72-zKA
https://zhuanlan.zhihu.com/p/413240790
[4]针对任意连续数值的roc
Receiver operating characteristic (ROC) movies, universal ROC (UROC) curves, and coefficient of predictive ability
[5]ssb解决长尾部分的效果:
ESAM: Discriminative Domain Adaptation with Non-Displayed Items to Improve Long-Tail Performance
[6]y2b 优化期望
使用播放时长作为权重,调整odds,得到期望播放时长:
https://www.cnblogs.com/hellojamest/p/11871108.html
近似约掉分母
https://blog.csdn.net/ggggiqnypgjg/article/details/108968483
[7]
Rank Correlation:
Kendalltau/Somers' D = 2AUC - 1 (scipy.stats.kendalltau)肯德尔相关等级系数
Spearman's rank correlation coefficient(等价于pearson of rankid)
[8]
其实logloss肯定和auc也是不等价的。
logloss是个calibrated statistics,而auc是