好的,我们直接进入正题。
搜索引擎的核心排序模型更新,往往会带来一个连锁反应:我们之前用来衡量“效果”的那些评估指标,可能需要重新审视,甚至直接更换。
为什么模型一换,旧指标就失灵
你可能会遇到这种情况。团队花了三个月,把排序模型从LambdaMART升级成了基于Transformer的跨模态模型。离线测试时,NDCG涨了3个点,皆大欢喜。上线后,点击率没变,用户停留时长没变,但转化率跌了5%。
问题出在哪里?不是模型不好,是指标没有跟上模型的能力。
旧的LambdaMART模型,特征工程依赖人工,处理的是“用户搜索词”和“商品标题”这类文本匹配。它的天花板很明显,排序结果中规中矩,头部结果的相关性有保证,但长尾查询处理不好。
新模型上线后,它开始理解图片内容、用户评论情感、甚至视频里的语音信息。它能把一些“冷门但高度相关”的结果排到前面。这些结果,用旧模型的“相关性”打分可能不高,但对用户决策极有价值。
这时,你还在用NDCG去评估,这个指标的核心是衡量排序列表与“理想列表”的差距。而“理想列表”的构建,往往依赖人工标注或旧模型的反馈数据。问题就在这里:你的“理想列表”本身就是旧的、有偏的。你用一把不准的尺子,去量一个更精密的新零件,得到的误差读数没有参考价值。
需要革新的核心评估指标
不单是NDCG,有一整套指标都需要根据模型的发展阶段进行替换或补充。我们分阶段来看。
第一阶段:离线评估指标的修补
离线评估是迭代模型的第一道关。如果你的模型已经开始处理多模态信息,或者优化目标从“点击”转向了“转化”或“完播”,以下调整是必须的。
1. 从NDCG到NS-Recall的补充
NDCG的问题在于它对位置太敏感,且依赖完整标注。对于新模型,我们更关心它能不能把“惊喜结果”捞出来。
- 操作步骤:在离线测试集中,专门构建一个“困难查询”子集。这些查询的特点是,传统文本匹配找不到好结果,但多模态信息里有答案。比如,用户搜“那个能放在自行车水壶架上的蓝牙音箱”,传统模型只看标题,可能给出普通蓝牙音箱。新模型理解了图片形状和尺寸,给出了正确结果。
- 指标计算:计算这个子集上的Recall@K(K取10或20)。我们把这个叫NS-Recall(Novelty & Serendipity Recall),衡量模型发现“新颖且相关”结果的能力。这个指标如果显著提升,而NDCG持平或微降,模型大概率是正向的。
2. 离线转化预估指标
如果模型目标是转化,就不能只看点击率。需要构建一个离线代理指标。
- 方法:利用历史数据,训练一个简单的转化率预估模型(比如轻量级GBDT),输入特征只取“结果在列表中的位置”和“结果与查询的多模态匹配分数”。
- 操作:新排序模型产出一个列表后,用这个转化预估模型给列表中每个结果打分,然后计算整个列表的“期望转化数”(Expected Conversions,EC)。
- 公式:EC@K = Σ_{i=1}^{K} P(转化 | 位置=i, 多模态匹配分数_i)。这个指标比单纯的点击率预估更接近业务目标。
第二阶段:在线A/B测试指标的革新
线上指标是最终裁判。当排序模型的核心能力发生变化时,需要引入新的护栏指标和核心指标。
1. 核心指标:从CTR转向加权用户价值
CTR(点击通过率)太容易被操控。一个耸动的封面图可以提升CTR,但会损害用户体验。
- 新核心指标:构建一个加权用户价值分(Weighted User Value, WUV)。
- 参数与权重设定:
| 用户行为 |
权重 |
说明 |
| 有效点击 |
1 |
点击后停留超过15秒,或发生页面滚动 |
| 正向交互 |
3 |
收藏、加购、分享、下载 |
| 转化/完播 |
10 |
完成购买、注册;视频播放完成率>90% |
| 快速回退 |
-5 |
点击后5秒内返回搜索结果页 |
- 计算方法:实验组与对照组的WUV = (Σ 所有用户行为权重) / 总搜索次数。直接对比这个值的变化。
2. 护栏指标:细化到查询维度的公平性
新模型可能会在某些类型的查询上表现极好,而在另一些上表现极差,但整体平均值看不出来。
- 必须监控的维度:
- 查询长度分段:短查询(1-2词)、中查询(3-5词)、长查询(6词以上)。新模型通常在长查询上优势明显,但要确保短查询的指标没有显著下降。
- 查询意图分类:导航、信息、交易。确保交易类查询的转化率没有因为模型追求“新颖性”而受损。
- 内容时效性:新模型对发布3天内的新内容,和发布1年以上的旧内容,其分发效率是否均衡。用一个“时效性公平比”(新内容CTR/旧内容CTR)来监控,防止模型过度偏好某种时效的内容。
第三阶段:针对特定模型架构的专用指标
如果你的核心排序模型已经是基于大规模预训练和向量召回的多路融合架构,那么需要建立一套针对性的评估体系。
1. 语义坍缩度
这是向量召回模型的一个常见问题。模型可能把所有“好吃的”都映射到“火锅”,导致结果单一。
- 测量方法:选取一批查询,让模型返回Top 50结果。将这些结果的标题或描述用另一个独立Embedding模型向量化。计算这50个向量的平均余弦相似度。相似度越高,说明结果越单一,坍缩越严重。
- 监控:每次模型更新,都跑一遍这个脚本。如果平均相似度出现异常上升(比如从0.3升到0.6),模型可能需要重新训练或调整多样性策略。
2. 跨模态一致性
对于处理文本、图片、视频的模型,这个指标衡量它是否真的“看懂了”不同模态的内容,而不是在瞎猜。
- 构造测试集:制造一些“图文不符”或“文不对题”的对抗样本。例如,一个商品标题是“纯棉T恤”,主图是“丝绸衬衫”。
- 指标计算:模型应该给这类结果一个很低的相关性分。计算模型对这批对抗样本的排序位置中位数。理想情况下,这个中位数应该非常靠后(比如在100名开外)。如果它被排进了前20,说明模型的跨模态对齐模块有严重缺陷。
实施指标革新的操作框架
知道了要改什么指标,下一步是如何在团队里落地。这不是一个技术问题,是一个工程流程问题。
1. 建立指标生命周期管理
不要再把指标写死在代码里。建立一个指标配置平台。
- 操作:在A/B测试平台中,为每个实验定义一个指标集。这个指标集包含“核心指标”、“护栏指标”、“诊断指标”三类。
- 流程:当排序模型发生架构级变更时,强制要求项目文档中必须包含“指标变更说明”章节。说明哪些旧指标退役,哪些新指标启用,理由是什么。
2. 离线-在线指标一致性校验
这是防止上线事故的最后一道防线。
- 方法:选取过去10个已经完成线上A/B测试的模型实验数据。计算每个实验的离线指标提升与在线核心指标提升之间的Spearman秩相关系数。
- 判断标准:如果这个系数低于0.7,说明你的离线评估体系预测能力不足。需要回头检查离线测试集的分布是否和线上日志匹配,或者离线指标的计算逻辑是否有误。
- 新模型上线前:必须先用这个校验过的离线指标集跑一遍,结果符合预期后,才能开启线上小流量。
3. 长期监控的自动化
指标革新不是一次性的。模型在线上运行,数据分布会慢慢变化,指标的衡量基准也会漂移。
- 操作:部署一个定时任务,每天计算线上Top 1000高频查询的各项指标,生成趋势图。
- 告警设置:当核心指标(如WUV)的7天移动平均值,环比下降超过5%时,自动发送告警。同时,自动拉取下降幅度最大的前20个查询,供人工排查。
搜索引擎的排序模型正变得越来越复杂,它不再只是一个简单的文本匹配器,而是一个试图理解用户意图、内容语义和多媒体信息的综合系统。当被评估的对象发生了质变,评估它的尺子也必须从一把直尺,升级成一套包含游标卡尺、千分尺和三维扫描仪的工具箱。把上面这些具体的指标和方法,对照你当前的模型发展阶段落地,可以避免“模型明明在进步,业务指标却在倒退”的困境。