周末要在家园社区办一场千人派对,如何在几万名居民中选出最合适的 100 位嘉宾?如果挨家挨户深聊,时间完全不够。聪明的做法是:同时派出好几位各有所长的“猎头”分头找人——有人看兴趣,有人看人脉,有人查登记册。几小时后,各路猎头带着各自的候选名单返回,主理人把名单合并、去重、调控比例,再进行下一轮面试。这个“分工找人、再合并”的思路,正是推荐系统中最核心的多路召回策略。本文从它产生的动机讲起,依次介绍常用的召回路、融合机制、性能优化、评估手段与工程挑战,最后说明如何与排序阶段衔接形成闭环,让读者对这套打法建立完整的直觉。

岗位关联

在推荐系统面试和工程实践中,多路召回几乎是必考题:掌握它,才谈得上优化候选集上限、控制在线延迟,是一名推荐算法工程师的第一块敲门砖。

目录
  1. 可视化演示
  2. 召回定位意义
  3. 多路思想起源
  4. 常用召回策略
  5. 融合调控机制
  6. 性能优化方法
  7. 评估调优手段
  8. 工程落地挑战
  9. 衔接排序阶段
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示系统处理流水线、实时性能指标曲线及多方案对比分析,包含数据流转、吞吐延迟监控与方案评估。

本节配有交互动效(进入视口后自动加载,约 3KB)。

系统可视化 处理流程:输入→处理→模型→输出 性能监控:实时指标 P=L×T

召回定位意义

主理人本来想挨家挨户敲门了解每位居民,结果发现:哪怕一秒钟聊一个人,把上万名居民聊完也要一整天,更别提还要跟派对主题做比对。于是他换了个思路——先靠熟人推荐、公告栏、登记册快速圈出几百人的“初筛名单”,再对名单里的人做深度邀请。这套“先圈名单、再细聊”的打法,正是推荐系统的两阶段漏斗:召回先让海量物品迅速变薄,排序再对变薄的候选逐一精打细算。

召回阶段的任务,是从可能上亿的物品池里,用低成本、低延迟的匹配器筛出几百到几千个候选。它不追求把每个候选打得多准,只求别把用户可能喜欢的东西漏掉。也正因为先有召回,“全库逐物品预估点击率”这种昂贵操作才不会出现在在线链路上。召回的质量直接决定排序的上限——如果猎头根本没把人写进名单,后面一切精挑细选都无从谈起。

为了量化“漏得少不少”,工业界最常用召回率。设真实感兴趣物品集合为 G,召回路径返回的候选集合为 C,则:

派对结束后,主理人复盘时最关心的正是这个数:我想请的 80 位核心朋友里,猎头替我找到了几个?多派一路猎头,名单就更厚一层,漏掉重要人物的概率自然更小——这正是多路召回诞生的出发点。

Recall=∣C∩G∣∣G∣\displaystyle \text{Recall} = \frac{|\mathcal{C} \cap \mathcal{G}|}{|\mathcal{G}|}
这个比值就是“想请的人里,猎头最终找到的比例”。
  1. 分子交叠C 与 G 的交集,表示“该请的人里面有多少被猎头写在了名单上”。
    C∩G\mathcal{C} \cap \mathcal{G}
  2. 分母全集G 是用户真实感兴趣物品的总数,即真正值得邀请的人。
    ∣G∣|\mathcal{G}|
  3. 比例含义交叠数量除以全集数量,得到被捞回的比例,衡量“漏人”程度。
    ∣C∩G∣∣G∣\frac{|\mathcal{C} \cap \mathcal{G}|}{|\mathcal{G}|}

多路思想起源

只有一位猎头时,他的眼光再毒也有限。整天泡在棋牌室的人,认识的全是棋友;天天跑健身房的人,认识的全是健身达人。主理人渐渐发现,任何单一视角找人,都会留下结构性盲区:不是猎头不努力,而是他的信息来源本身就窄。推荐系统里同样如此,只靠“热门榜”一路召回,小众长尾内容永远出不了头;只靠“相似物品”一路召回,新上映的冷门佳片又无人问津。

多路召回的思想很简单:既然每条路只能看到“偏好的一角”,那就多派几位不同专长的猎头并行走访,把各自的名单合并起来。工业界往往是 K 条路并行,各自基于不同信号——用户行为、内容属性、场景信息——独立召回,最后把候选合并成一个更大的集合:

并集有几个天然好处:单路漏掉的,其他路可能补上;候选覆盖面变广的同时,路的多样性也保护了长尾与冷启动物品。当然,这也换来了新问题——合并后的候选量会膨胀,去重、截断、控制规模成为后续动作。简单说,多路召回的本质就是把“一己之见”换成“众家之长”,再用工程手段消化膨胀的名单。

C=⋃i=1KCi\displaystyle \mathcal{C} = \bigcup_{i=1}^{K} \mathcal{C}_{i}
多路召回的并集,相当于把每位猎头带回来的名单叠在一起,同一个客人只保留一次。
  1. 并集符号把多张名单合成一张,同一个嘉宾只出现一次。
    ⋃\bigcup
  2. 循环下标i 从 1 到 K,表示逐条收起每一路猎头的候选。
    i=1,…,Ki = 1, \ldots, K
  3. 候选集合C_i 是第 i 路召回返回的候选子集,各路信号来源不同。
    Ci\mathcal{C}_{i}

常用召回策略

每个猎头的绝活各不相同,但大体可以分成四类。第一类是“兴趣雷达”,对应向量召回:双塔模型把用户和物品各自投影到一个向量空间,用余弦相似度判断“气味相投程度”。第二类是“熟人搭桥”,对应协同过滤:一看你朋友最近喜欢什么,二看“和你有共同品味的人”常看什么。第三类是“花名册检索”,对应倒排索引:按类目、价格、标签等显式字段快速过滤,可解释、易控制。第四类是“新人雷达”,对应规则热门召回:新房客、社区热门人物,保证冷启动和基础曝光。

向量召回是当前工业界的绝对主力,它的匹配核心是余弦相似度。设用户向量为 u、物品向量为 v,则:

主理人把这些猎头聚在一起开会时发现,每位猎头都只认自己那一亩三分地,但偏偏是这种“偏科”让四张名单合在一起时格外全面。向量管语义、协同管行为、倒排查条件、规则保底线——多路并存,才是召回正确打开方式。

sim(u,v)=u⋅v∥u∥ ∥v∥\displaystyle \text{sim}(\mathbf{u}, \mathbf{v}) = \frac{\mathbf{u} \cdot \mathbf{v}}{\|\mathbf{u}\| \, \|\mathbf{v}\|}
余弦相似度衡量两个向量方向是否一致,数值越接近 1,说明用户与物品越“合拍”。
  1. 分子内积u 与 v 逐维相乘后求和,衡量两个向量的同向程度。
    u⋅v\mathbf{u} \cdot \mathbf{v}
  2. 分母模长两个向量各自长度的乘积,用来抵消向量本身长短的影响。
    ∥u∥ ∥v∥\|\mathbf{u}\| \, \|\mathbf{v}\|
  3. 相似度结果比值落在 [-1, 1] 区间,越接近 1 代表语义越接近。
    u⋅v∥u∥ ∥v∥\frac{\mathbf{u} \cdot \mathbf{v}}{\|\mathbf{u}\| \, \|\mathbf{v}\|}

融合调控机制

名单汇拢后,主理人不能简单“叠起来”:猎头 A 看人极准但爱带一堆充数的;猎头 B 人头很熟但总推荐同一伙人。于是要定权重与去重规则。工程上最常用的是加权融合:每路内部先做分数归一化,再按经验权重线性叠加,得到合并后候选得分:

除了线性加权,还有基于名次的倒数排名融合(RRF)——不看绝对分数只看排名,能规避各路分数尺度不齐的问题;多样性调控则用最大边界相关(MMR)等策略,让候选集不要被单一审美占领。主理人给棋友猎头调高权重、给健身猎头调低一些,同时规定每张名单里“同一卦气”的人最多几个,派对才能百花齐放、不会变成棋友专场。

score(x)=∑r=1Kwr⋅sr(x)\displaystyle \text{score}(x) = \sum_{r=1}^{K} w_{r} \cdot s_{r}(x)
加权融合就像给每位猎头的推荐打分乘以一个“信任系数”,再相加排序。
  1. 权重系数w_r 表示对第 r 路猎头的信任程度,各路权重通常归一化为总和 1。
    wrw_{r}
  2. 路内得分s_r(x) 是第 r 路给出的归一化候选得分,不同路的分数尺度需先对齐。
    sr(x)s_{r}(x)
  3. 求和融合各路分数加权相加,得到候选最终得分,再按得分截断取 TopN。
    ∑r=1Kwr⋅sr(x)\sum_{r=1}^{K} w_{r} \cdot s_{r}(x)

性能优化方法

猎头跑腿也要讲效率。主理人只给了三小时,猎头们就得借助通讯录、自行车和传呼机,而不是挨家挨户敲门。召回在线延迟预算往往是几十毫秒到百毫秒级,每一条路都要压耗时:向量路一般用近似最近邻索引(如 HNSW、IVF),只在索引树上走一小段;倒排路则靠压缩倒排表、跳表指针加速取链;热门路候选结果直接做缓存,实时请求不再重复计算。多路并行执行、等待最慢的一路返回后合并开查,整体耗时近似写作:

为了不让总预算超时,工程上常用的做法是给每路设硬性 TopK 截断,宁可少采一些也不能拖慢线上链路。三小时后猎头们气喘吁吁准时回来,主理人意识到:效率不是靠猎头跑得快,而是靠他们用对了工具、分好了工。

Ttotal≈Toverlap+∑r=1KTr\displaystyle T_{\text{total}} \approx T_{\text{overlap}} + \sum_{r=1}^{K} T_{r}
召回总耗时等于各路开销之和,外加多路同步与去重的公共开销。
  1. 总耗时T_total 是整条召回链路从发起请求到合并完成的端到端时间。
    TtotalT_{\text{total}}
  2. 公共开销T_overlap 是多路同步等待、去重与调度的公共时间。
    ToverlapT_{\text{overlap}}
  3. 各路耗时求和各路查询耗时相加,提示我们优化最慢的那一路收益最大。
    ∑r=1KTr\sum_{r=1}^{K} T_{r}

评估调优手段

猎头干得好不好,不能只听自我汇报。主理人在会后逐一核对:我真正想请的 80 人里,名单覆盖了多少?每位猎头贡献了几成?名单上的嘉宾各色人等都齐全吗?离线评估常用三件套:召回率衡量命中能力,HitRate@K 衡量用户真实关注物品是否进入候选,覆盖率衡量候选集在各品类、各人群上的铺开程度。

其中覆盖率定义为:

调优时先用离线指标对比多路组合,再上线做 AB 实验,最后结合 Badcase 逐例确认哪一路引入了不合格的“嘉宾”。主理人发现名单里棋友占比过高,马上减少了棋类猎头的名额,让乐队、读书会的新面孔比重升上来——评估的意义从来不在于数字本身,而在于指出下一步往哪使劲。

Coverage=∣⋃u∈UC(u)∣∣I∣\displaystyle \text{Coverage} = \frac{|\bigcup_{u \in \mathcal{U}} \mathcal{C}(u)|}{|\mathcal{I}|}
覆盖率看的是“多路猎头一共捞了多少种面孔”,太低说明视野太窄。
  1. 分子并集所有用户被召回到的唯一物品数,体现候选在全库中的铺开面。
    ⋃u∈UC(u)\bigcup_{u \in \mathcal{U}} \mathcal{C}(u)
  2. 分母物品全集I 表示系统全部可推荐物品的集合。
    I\mathcal{I}
  3. 覆盖率含义比值越接近 1,候选对全库的覆盖面越广,多路越“百花齐放”。
    ∣⋃u∈UC(u)∣∣I∣\frac{|\bigcup_{u \in \mathcal{U}} \mathcal{C}(u)|}{|\mathcal{I}|}

工程落地挑战

多路召回是有代价的:养猎头要发工资,维护情报线人要更新通讯录,线人话费还得报销。工程落地正是这样。存储上,向量索引和倒排索引都要额外空间;时效上,模型分钟级甚至天级更新,用户刚看完一部纪录片,兴趣向量还停留在上一部;冷启动上,新用户行为稀疏,协同与向量路几乎集体“哑火”;监控上,多路链路庞杂,哪一路超时、空转、候选为 0,都要能一眼发现。

其中时效对覆盖的影响可以建模成衰减:索引刚更新完时覆盖率最高,随后随时间推移逐渐回落:

工程对策包括:存储分冷热层、向量与倒排各自做增量更新、新用户先用规则路兜底、全链路打点并设置候选数量告警。主理人也给猎头们配了每周固定复盘和应急联系方式,团队运转起来才不会在关键时刻失灵。

Cov(t)=Cov^⋅e−λ(t−t0)\displaystyle \text{Cov}(t) = \widehat{\text{Cov}} \cdot e^{-\lambda (t - t_0)}
覆盖率从新鲜值开始指数下滑,更新越频繁、间隔越短,覆盖率维持得越好。
  1. 初始覆盖率Cov_hat 是最近一次索引更新完成时的覆盖率,代表“刚焕新”的水平。
    Cov^\widehat{\text{Cov}}
  2. 指数衰减项e 的负幂次随 (t - t0) 增大快速变小,表示候选随时间逐渐变旧。
    e−λ(t−t0)e^{-\lambda (t - t_0)}
  3. 衰减速率λ 越大,覆盖率从新鲜值跌落得越快,更新频率必须跟上 λ 的节奏。
    λ\lambda

衔接排序阶段

名单合并并不等于发邀请。主理人先请一位眼光稳的“选角导演”按简历粗筛,再自己挨个面试精挑,最终敲定一百人。推荐链路亦然:召回产出候选后,通常先过粗排,再进精排。粗排用轻量模型把候选从几千剪到几百,精排再用重模型逐一打分。为了让排序不“盲人摸象”,各路召回路径的标识、截断信息乃至召回得分,都会以特征形式透传给排序模型:

排序结果上线后,经过用户行为反馈,逆向修正各路权重与训练样本,形成“召回 → 粗排 → 精排 → 反馈 → 召回”的完整闭环。这就像主理人每场派对后都会复盘:发现棋友猎头眼光奇特但每次带回来的人都玩得很尽兴,就默默提高他的下回权重;发现健身猎头推荐的人总是中途离场,就把他的权重调低——多路策略因此越用越聪明。

y^u,i=fθ(ϕu,ϕi,ϕu,i,route)\displaystyle \hat{y}_{u,i} = f_{\theta}(\phi_{u}, \phi_{i}, \phi_{u,i}, \text{route})
排序模型不仅看用户和物品长什么样,还会看这个候选究竟是从哪一路猎头手里来的。
  1. 用户特征与物品特征φ_u 是用户侧特征,φ_i 是物品侧特征,φ_ui 是交互侧特征。
    ϕu,ϕi,ϕu,i\phi_{u}, \quad \phi_{i}, \quad \phi_{u,i}
  2. 召回路特征route 标识候选由哪一路或哪几路召回而来,让排序感知信息来源。
    route\text{route}
  3. 打分函数f_θ 是排序模型,输出用户对物品的预估偏好程度。
    fθf_{\theta}

AI 应用场景

电商商品多路召回

阶段:召回阶段(候选生成)

解决的问题:商品库千万级,逐商品打分会严重超预算;单一向量路看不见价格、品牌等硬性筛选条件。多路召回让向量、倒排、规则并行工作,秒级返回候选,兼顾个性化与可控性。

具体案例:某电商 App 首页 Feeds 流,向量路召回相似款 800 件,倒排路按价格带与类目过滤 600 件,热门路兜底 300 件,合并去重后约 1500 件进入粗排,商品曝光多样性明显提升,点击率与深度转化同步改善。

短视频信息流多路召回

阶段:召回阶段与近线索引更新

解决的问题:短视频用户兴趣变化快,线上时延要求严苛(P99 往往在 50ms 内),单路召回既不够丰富也不够快。多路并行配合 ANN 索引与热门缓存,兼顾新鲜度与性能。

具体案例:某短视频 App 采用“双塔向量召回 + 话题/作者倒排 + 同城热榜”三条路并行:向量路用 HNSW 索引做近似最近邻搜索,倒排路按话题标签过滤,热榜路直接读缓存。多路合并去重后进粗排,完播率与关注转化率均有 3%-5% 提升。

资讯 App 冷启动多路兜底

阶段:召回阶段与反馈闭环

解决的问题:新用户无行为数据,协同过滤与向量路全部“哑火”,如果只返回全网热榜,内容单一且无探索性。多路中引入“地域 + 设备型号 + 新近热文”作为探索路,配合快速反馈调权。

具体案例:某资讯 App 对新用户默认启用“同城热文 30% + 全站热榜 40% + 新近文章 30%”的混合候选,用户刷出 5-10 条后,兴趣向量快速成型,向量路权重从 0 逐步升到 60%,冷启动期人均阅读时长提升约 20%。

Python 演示

python37 行
import numpy as np rng = np.random.default_rng(42)N = 5000D = 32 user_vec = rng.normal(size=D)item_vecs = rng.normal(size=(N, D))item_ids = np.arange(N) sims = item_vecs @ user_vecprobs = np.exp(sims - sims.max())clicked = rng.choice(item_ids, size=80, replace=False, p=probs / probs.sum())true_likes = set(clicked.tolist()) def vec_retrieve(k=200):    scores = item_vecs @ user_vec    return set(item_ids[np.argsort(-scores)[:k]].tolist()) popularity = rng.integers(0, 10000, size=N) def cf_retrieve(k=200):    return set(item_ids[np.argsort(-popularity)[:k]].tolist()) def hot_retrieve(k=150):    return set(rng.choice(item_ids, size=k, replace=False).tolist()) def hit_rate(pred, ground_truth):    hit = len(pred & ground_truth)    return hit / len(ground_truth) single = vec_retrieve()multi = vec_retrieve(80) | cf_retrieve(120) | hot_retrieve(60) print("单路候选数", len(single), "召回率 %.2f" % hit_rate(single, true_likes))print("多路候选数", len(multi), "召回率 %.2f" % hit_rate(multi, true_likes))print("三路原始合计", 80 + 120 + 60, "去重后", len(multi))
目的:模拟一个 5000 物品池,对比“单路向量召回 200 个”与“三路召回合计 260 个”的召回率差异,直观展示多路并集的互补收益。
  1. probs = np.exp(sims - sims.max())把相似度转为点击概率分布,模拟用户真实感兴趣集合。
  2. true_likes = set(clicked.tolist())按概率采样 80 个“真实喜欢”的物品,作为评估基准。
  3. def vec_retrieve(k=200):第 1 路:向量语义召回,返回相似度最高的 k 个候选。
  4. def cf_retrieve(k=200):第 2 路:协同流行度召回,返回活跃度最高的 k 个候选。
  5. def hot_retrieve(k=150):第 3 路:随机热门兜底,保证覆盖面与冷启动。
  6. multi = vec_retrieve(80) | cf_retrieve(120) | hot_retrieve(60)三路并集,预算是各路名额之和 260。
  7. return hit / len(ground_truth)召回率:命中的真实兴趣物品数除以真实兴趣总数。
  8. print("多路候选数", len(multi), "召回率 %.2f" % hit_rate(multi, true_likes))输出多路去重后的候选规模与召回率。

常见误区

误区我只要不停扩大候选集,把 TopK 从 500 提到 5000,召回率涨了,系统效果一定更好。

正解派对主理人让猎头把半城居民的名字都写上,名单厚到读不完,反而没法挑。召回率提升必然伴随噪声和排序压力——排序模型要处理更多垃圾候选,在线延迟也会变差。正确做法是在延迟、存储、排序能力给定的预算内最大化召回率,而不是无止损扩量。

为何常见:学习阶段只看准确率/召回率这些数字,容易忽略真实系统里的工程约束。

误区多路召回不就是把几路的候选结果直接拼起来吗?并集就是全部结果。

正解直接把名单叠起来会出现大量重复嘉宾,也会被“音量最大”的热门路淹没。真正落地时要先做路内去重、再跨路去重,还要做分数归一化、权重加权与多样性调控,合并的口子也要有截断控制。只做简单相加,多路互补的优势会被重复和噪声抵消。

为何常见:看到“候选 = 并集”的数学表达,忽略了工程上“如何合并”才是核心难点。

误区双塔模型这么强,向量召回覆盖了相似语义,其他召回路都可以下线了。

正解向量路擅长捕捉“说不清但感觉像”的暗语义,但对显式筛选(价格、类目、库存)无能为力,对冷启动用户也没有行为信号可嵌入。协同过滤管行为共现、倒排管显式约束、规则管冷启动兜底,各自负责不同的信号面。多路策略的设计原则正是“互补共存”,而不是“一强替全”。

为何常见:向量召回在论文和开源项目里最亮眼,导致初学者以偏概全。

误区离线评估召回率从 0.5 涨到 0.6,上线后点击率肯定也跟着涨。

正解离线指标看不到时延、新鲜度、用户即时反馈和候选挤压效应。猎头在纸上名单找得很全,真到了现场嘉宾是否玩得开心完全是另一回事。工业界通常先做离线小流量验证,再上 AB 实验观察核心业务指标,最后结合 Badcase 分析确认没有引入系统性噪声,才算真正有效。

为何常见:离线实验便宜、可复现,容易让人把它当成唯一决策依据。

误区新用户没有行为数据,直接把全站热门榜塞给他就完事了。

正解热门榜只是多路中的“新人雷达”一路,光靠它会导致内容单一。更稳的做法是热门、地域、设备型号、新近优质内容多路组合,并在用户产生几条反馈后快速调整各路权重,让兴趣向量路逐步接管主导权。猎头面对新住户也不会只推荐全村最热闹的人,而是先问清楚他住哪栋、什么职业,再给几类候选。

为何常见:把“冷启动阶段可用热门兜底”误解为“只给热门”。

面试题

Q1. 推荐系统中召回阶段的首要目标是?

单选题 · easy

  • A.对全库物品做精细打分
  • B.快速筛出少量候选物品← 正确答案
  • C.训练一个超大排序模型
  • D.统计用户全部点击历史

答案:B。召回是两阶段漏斗的第一层,目标是从海量物品中快速筛出小候选集,而不是精细打分。好比主理人先圈定初筛名单,深聊是排序的活,统计历史也不是召回的直接目标。

Q2. 多路召回的核心思想是?

单选题 · easy

  • A.多模型投票融合预测
  • B.用不同源头策略求并集← 正确答案
  • C.同一条路重复跑多次
  • D.只保留最强的一路召回

答案:B。多路召回让不同信号来源的召回路并行工作,把候选做并集合并、去重后送排序。重复跑同一路没有新增信息,只留最强一路又会丢失长尾覆盖。

Q3. 下列哪一路召回最适合解决新用户冷启动?

单选题 · easy

  • A.全网热门物品召回← 正确答案
  • B.用户兴趣向量召回
  • C.用户相似物品召回
  • D.长期行为序列召回

答案:A。新用户没有行为数据,向量路和协同路都会“哑火”,热门路不依赖个人行为,能保证基础体验。好比面对刚搬来的新住户,猎头只能先推荐社区里大家都知道的热门去处。

Q4. 多路候选合并后发现并集过大,优先采取的措施是?

单选题 · mid

  • A.将每路截断到低 TopK← 正确答案
  • B.把所有结果随机丢弃
  • C.只保留命中数最多路
  • D.增大排序模型容量参

答案:A。并集过大通常由每路各自 TopK 过高导致,先把每路截断到合理 TopK 再合并,是控制候选规模最直接的手段。随机丢弃破坏质量,只留一路又失去多路互补意义。

Q5. 向量召回中衡量用户与物品匹配程度最常用的是?

单选题 · mid

  • A.余弦相似度来度量← 正确答案
  • B.编辑距离精确度量
  • C.Jaccard 距离来度量
  • D.哈夫曼编码来度量

答案:A。双塔向量召回通常用余弦相似度衡量向量方向一致性。编辑距离用于字符串,Jaccard 用于集合重叠,哈夫曼编码与匹配度量无关。

Q6. 下列哪些属于召回阶段常用的策略?

多选题 · mid

  • A.双塔向量召回← 正确答案
  • B.倒排标签召回← 正确答案
  • C.深度精排模型
  • D.规则热门召回← 正确答案

答案:ABD。双塔向量、倒排标签、规则热门都是典型的召回路,负责从海量物品中筛候选。深度精排模型属于排序阶段,作用是在候选集上精细打分,不属于召回。

Q7. 多路召回合并去重时,需要考虑哪些问题?

多选题 · mid

  • A.各路候选权重← 正确答案
  • B.单路内部去重← 正确答案
  • C.各路之间去重← 正确答案
  • D.排序参数量级

答案:ABC。合并时要分配各路权重、做路内与跨路去重,还要控制多样性。排序参数量级是排序模型自身的设计问题,与召回阶段的合并去重无直接关系。

Q8. 在多路召回与精排之间加入粗排,主要目的是?

单选题 · hard

  • A.替代精排做最终打分
  • B.在两级间做缓冲控成本← 正确答案
  • C.减少召回路的数量
  • D.替换掉全部特征工程

答案:B。召回返回的候选可能仍有数千个,直接全部送精排太贵。粗排用轻量模型先把候选剪到几百,再做精排,是在效果与成本之间做缓冲。它不替代精排,也不减少召回路数量。

Q9. 某一路召回在 AB 实验中拖低了整体互动率,合理的排查思路有哪些?

多选题 · hard

  • A.抽查该路命中的样本← 正确答案
  • B.调整权重或截断上限← 正确答案
  • C.直接删除整个排序模型
  • D.复核时延与新鲜度指标← 正确答案

答案:ABD。先看该路命中的 Badcase,确认是不是引入了噪声;再调整该路权重或截断数,观察指标变化;同时检查时延与新鲜度,排除候选过期因素。删除排序模型属于破坏性操作,不在多路调优的合理范围内。

Q10. 关于召回与排序的“嵌入式反馈”,正确的做法是?

单选题 · extreme

  • A.排序特征中加入召回路信息← 正确答案
  • B.召回结束即关闭全部日志
  • C.完全忽略线上反馈信号
  • D.不把排序结果反馈召回

答案:A。召回与排序的闭环体现在:排序把“候选来自哪一路”作为特征输入,让排序感知召回来源;同时线上行为反馈回流到召回侧,调整后续各路权重和训练样本。其余三项都会切断闭环,导致系统无法自我进化。