作者 | kaiyuan
整理 | NewBeeNLP
大家好,我是kaiyuan。最近大模型LLM的各类信息有种乱花渐欲迷人眼的感觉,刷几篇KDD'23的文章冷静一下。
今天分享阿里淘宝搜索的最新工作,发表在KDD'23上:Rethinking the Role of Pre-ranking in Large-scale E-Commerce Searching System[1]。【整体思路非常清晰样,用的评估指标、模型框架等,同样可以应用在向量召回模块】。
论文对电商搜索粗排模块进行重新定位,提出了新的离在线一致性更高的评价指标,并基于此优化全域多目标学习框架(All-Scenario-based Multi-Objective Learning framework,ASMOL ),AB测试结果GMV提升1.2%。
目前大厂的搜索系统基本是多阶段级联架构,如下图,主要由召回、粗排、精排、重排等部分组成。
召回 :该模块主要目标是从海量候选池中尽可能召回所有相关的商品,通常会有多种召回路,比如文本召回、个性化X2I召回、U2I向量召回、多模态召回、图召回等等;商品量级一般从 ~ ;
粗排 :位于全链路承上启下的关键位置,目标是对召回的商品先做一次过滤,避免给精排太大的压力;商品量级一般从 ~
-
双塔结构 :以DSSM为代表,用户侧和商品侧信息分别喂入不同的DNN,得到各自embedding后点积作为打分。双塔分离的结构好处是在面对海量候选集时可以保证线上快速serving,但同时受限于双塔,无法使用一些更复杂的交叉特征和交叉建模,导致模型表达能力弱。关于双塔更多细节推荐塔哥的文章:久别重逢话双塔[2]
交叉结构 :另一种路线是精排的轻量级退化版本,通过特征选择、知识蒸馏、网络结构压缩等方式达到交互模型作用在粗排,如FSCD、COLD、AutoFAS等。
虽然模型结构有不同的演进路线,但粗排的目标近年来一直是比较明确的: 聚焦在如何对齐精排的排序能力上 ,一些评估指标也以AUC、精排一致性为主。甚至有些团队的粗排模型训练数据仍和精排保持一致,这会带来严重的SSB问题(下文会具体介绍)。同时, 疯狂地拟合精排,虽然短期会带来部分收益,但从长期看会带来严重的马太效应 。
其实,跳出这个怪圈,我们没必要把粗排架得那么高,粗排模块只需要 从大量的候选中找到一个效率最优的商品集合即可 ,对这些商品的排序只是一个附加要求(不然要精排干啥呢 对吧)。
做过召回的同学都清楚,离在线指标对齐是一个非常头疼的问题。由于召回模块位于整体搜索链路的最底层,中间存在各个模块的复杂逻辑,到最终曝光给用户,离线指标的收益很难与在线转化指标很好地对应。
粗排也同样面临这样的问题,介绍全域hitrate之前,先来看看常规的评价指标。粗排位于全链路的中间,需要同时考虑 「召回->粗排」 以及 「粗排-> 精排」 两阶段的损失,才能做好承上启下的工作,单看任何一部分都是片面的。
启下:粗排->精排损失衡量
精排更注重商品的排序精度,因此以下粗排指标也类似
AUC :曝光空间下的AUC,有购买行为的商品作为正例。淘宝搜索一页请求会出10个商品,通常使用AUC@10来衡量,精排模型也使用该指标,因此可以借此评估粗排和精排的一致性程度;
粗排hitrate@10 :粗排越头部的商品能带来更多搜索场景内成交,说明粗排排序能力更强,与精排能力更接近;
曝光商品粗排总分与精排效率分数的NDCG/逆序对 :对相同商品集合,粗排打分和精排打分的排序差异,差异越小,说明两者越接近。
承上:召回->粗排损失衡量
承上阶段,粗排需要更多关注商品集合的好坏,这与召回的目标是一致的,通常使用来衡量。
分母是所有正例集合(可以是点击/加购/购买等), 分子是粗排top商品集合和正例集合的交集。
但不同于各召回分支,曝光商品完全来自于粗排输出,因此粗排输出集合的hitrate肯定是100%,在该指标上,新模型肯定是打不过线上基线的。
全域hitrate:场景内纠偏
既然场景内hitrate( In-Scenario Purchase Hitrate@k, ISPH@k )是有偏的,一个直观的想法就是补充更多其他场景的正例来纠偏,称为全域hitrate(All-Scenario Purchase Hitrate@k , ASPH@k),具体地,可以引入推荐、广告、购物车等非搜索场景成交的样本。
但由于非搜索场景不存在query,作者通过相关性作为关联条件,将用户在场景外的成交item,关联到用户在场景内的query上,且要求场景内query和场景外成交item组成的query-item对满足一定的相关性条件。
那么一个问题是,如何验证全域hitrate指标的有效性? 对粗排输出集合总数为2500和3000分别进行A/B测试,如果 ISPH@k评估有效,则输出3000个的在线业务指标应该更高。如果 ASPH@k有效,则结论相反。在线结果表明,输出3000个商品的业务指标比输出2500个的更低,这进一步证实了ASPH@k 指标的有效性。
在介绍优化方案之前,提一下传统的粗排模型设计。
模型 :双塔,pointwise学习,sigmoid损失学习CTR和CVR,最终生效CTR*CVR
-
曝光样本(Exposure,Ex) :一条请求中直接展示给用户的商品,不论是否点击或购买等,一共N个;
精排样本(Ranking Candidates,RC) :在线serving时粗排模块送给精排的样本集合(且未曝光),一般几千个,会随机从中采样M个;
粗排样本(Pre-Ranking Candidates,PRC) :在线serving时召回模块送给粗排的样本集合(且未被粗排选中),一般数十万,会随机从中采样L个。
前面提到了粗排评估指标: 全域成交hitrate ,一个直接优化的方式就是 引入全域成交样本,将其添加到曝光样本中 ,同时将曝光、点击和成交标签都设为1。同时,将之前全域有成交行为但被作为负例的样本修正标签,将其成交标签置为1。
对比三、四行,PRC作为简单负样本,RC作为困难负样本, 加上困难负样本对模型效果帮助更大 ;
一方面可以提高精排模型和粗排模型的一致性,使粗排模型排出来的商品更容易被精排模型接受;
另一方面,由于精排模型输入特征和模型结构都比粗排模型复杂,因此引入蒸馏任务可以提高粗排的能力。
精排不是万能的,粗排不可盲目对齐学习它 。目前精排都是在曝光空间学习的,对于位于腰部的商品打分未必由于粗排(或许可以通过修正精排学习空间来解决,但同时也会带来精排对头部商品的预估能力变差,是一个跷跷板问题)
召回粗排模型的负样本很重要,正负样本的配置也同样重要 。通过负采样来解决SSB问题应该是一个常识了,但具体如何实现可能与业务更相关,没有绝对的标准答案,需要做大量实验去探索。
粗排模型优化的目标首先是集合整体的质量,其次才是商品间的排序 。
基于上一条,召回粗排模型,listwise+softmax的学习方式优于pointwise+sigmoid 。可以同时学习正样本之间、正负样本以及负样本之间的区别差异。
对于召回粗排而言,Hitrate 比 AUC 更可靠 。当两者出现冲突时,实验证明应优先相信hitrate。
softmax对多个正样本损失的优化,可以学习下,比直接暴力对logits乘上N要优雅;
精排蒸馏可以考虑加入精排顺序的学习;
-
想和你一起学习进步!『NewBeeNLP』目前已经建立了多个不同方向交流群(机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 / 等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定o要备注信息才能通过)
本文参考资料
[1]
Rethinking the Role of Pre-ranking in Large-scale E-Commerce Searching System: https://arxiv.org/abs/2305.13647
[2]久别重逢话双塔: https://zhuanlan.zhihu.com/p/428396126
论文采用的是对精排模型产出的CTR和CTCVR打分进行学习,
但是当一条样本中有超过一个正例时,直接使用softmax的形式会使得正-正样本之间产生不合理的比较。参考Circle-Loss,对损失函数进行了优化:
最终会加上上一节的蒸馏损失一起计算总损失
文章一大半篇幅在分析粗排评估指标以及验证粗排模块在搜索全链路中的定位,分析清楚问题、优化指标,已经成功一大半了。模型优化也没有让人感觉是那种花里胡哨无法落地的强行讲故事,能落地且有效果,强烈推荐相关方向的同学一读!
最后,简单罗列下一些重点: