Skip to content
Charles Shao
Go back

推荐系统召回总览:漏斗定位、8 大召回家族、Recall@K / Coverage 与 SSB 铁律

views

这是「推荐系统系列」的开篇。这个系列会把一套能跑的推荐链路——召回 → 排序 → 过滤 → 重排 → 全链路评估——从直觉到代码逐段讲透。本篇先用一个统一比喻建立**召回(recall / candidate generation)**的整体心智模型:它在系统里管什么、不管什么、怎么评估、有哪些流派。后续每一篇再逐一深挖:ItemCF 协同过滤热门召回双塔召回多路融合 RRF排序精排过滤与重排全链路离线评估

Table of contents

Open Table of contents

一句话理解

召回 = 录像带出租店里的「挑片员」。从全店 1 亿部片(工业界规模)里,几十毫秒帮你粗筛出 200 部候选,交给后面的「老板」(排序)精挑细选。

它管「不能漏掉你的真爱片」,不管「哪部更好看」——那是老板的活。

一旦挑片员没把对的片放进 200 部名单里,后面老板再会挑也救不回来


1. 召回在整个系统里的位置(漏斗)

推荐漏斗:从全库 1 亿候选,经召回(不漏)粗筛到 200,排序(选对)精排到 10,重排(兜底/调味)到 3,最终呈现 1 个;召回只问「在不在候选集里」,不在乎排第几

全链路是一层层收窄的漏斗:召回负责「大海捞针不漏片」,排序负责「精挑细选排对序」,重排负责「兜底与调味」。

阶段干啥关心
召回大海捞针,从 10⁸ 选 10³你的真爱片在不在 200 部名单里?
排序200 部里精挑 10 部哪部更好看?打分排序
重排加多样性 / 加广告 / 去重别让 10 部都是同一类型

关键洞察:召回这步只问「在不在候选集里」,根本不在乎排第 1 还是排第 200。这就是它跟排序的本质区别。


2. 召回的 3 个 KPI = 挑片员的 3 个考核

KPI挑片员语言recsys-mini 实测
Recall@K「你给我 200 部,我的真爱片在里面吗?」50.20%(每 2 个用户里有 1 个的真爱被捞中)
Coverage@K「整个片库你用了多少?还是只反复推那几部爆款?」69.36%(70% 的电影至少出现在某人的候选里)
Latency「给我 200 部,能不能 50ms 内出?」现在还没上线

注意:召回不评 NDCG——排序会把 200 部全打散重排,你召回内部排第几,根本不重要。


3. 8 大召回家族 = 8 种「挑片员流派」

每种都是真实业务里的一类召回算法:

#挑片员流派推荐术语干啥
1口碑老挑片员CF(协同过滤)「跟你品味相同的客人,最近租了并喜欢哪些片 → 也推给你」
2气质速配双塔(向量召回)给用户和每部片各填「气质问卷」转成向量,向量近的就匹配
3顺藤摸瓜图召回(LightGCN)通过「看过它的人还看过」链路找候选
4标签速配倒排召回(tag)你说「喜欢科幻、悬疑、90 年代」,三个标签的片立刻调出来
5关注推送关注 / 社交召回你关注的导演 / 演员出新片,直接推
6场景挑片上下文召回(LBS)同城、周末、雨天 → 推适合当下的片
7保底兜底热门召回啥都失败时,给你看本周热租爆款
8新客专属冷启动召回新用户 / 新片,用 Bandit、look-alike 等专门策略

真实平台同时跑 6–12 种——每种擅长不同场景,互相补盲。冷启动相关的召回策略详见冷启动问题


4. 三个最核心的玩法,用大白话讲清楚

4.1 ItemCF — 「口碑老挑片员」

逻辑:
  「你之前租过《美国往事》《教父》都看得很过瘾」
  「历史上,喜欢这两部的人也大都喜欢《华尔街之狼》」
  「→ 把《华尔街之狼》推给你」

完全不看《华尔街之狼》讲了啥、谁演的——只看「历史上有没有跟它常被同一批人一起喜欢的片,正好你也喜欢」。

公式 1 行就能写:

两部片有多像 = 「同时喜欢两部的客人数」 / √(喜欢 A 的人 × 喜欢 B 的人)

致命弱点:新片还没人租过 → 算不出相似度 → 永远召不出来(冷启动)。展开细节见 ItemCF 协同过滤

4.2 双塔 — 「气质速配」

用户塔 → 把你(年龄、爱好、最近看过的片)→ 压成 128 个数字(向量)
物品塔 → 把每部片(类型、年代、主创、简介)→ 也压成 128 个数字

  把两个向量塞进同一个「气质坐标系」(同一个向量空间)

  向量靠得近 = 越对味

训练目标:让「历史上你看了并喜欢的片」向量靠近你,没看 / 不喜欢的离远。

关键设计:两个塔互相不能偷看对方的资料——否则你就没法离线把全库片的向量都算好。一旦「得看见你才能算出片的向量」,1 亿部片每次都要重算,毫秒级响应做不到

离线(每晚跑一次):
  → 把 1 亿部片的向量都算好,建索引

在线(你刷新一次):
  → 算一下「你」的向量(你的塔,毫秒级)
  → 去索引里找最近的 200 个向量
  → 完成,p99 < 30ms

为什么这是工业界标准:YouTube DNN 2016 年提出,10 年了基本没换过框架。完整拆解见 双塔召回

4.3 ANN — 「片库的卡片柜」

问题:1 亿张片卡,你拿一张「你」的卡片去找最像的 200 张
  暴力法:1 亿张卡片一张张比 → 几分钟 → 不可能
  ANN 法:先按「楼层 → 分类 → 货架」导航 → 只跟某个小货架的卡片比 → 30ms 搞定

代价:偶尔会漏掉真正最相似的(比如它在另一个货架)。

收益1000 倍速度提升。99% 召得到 vs 100% 但慢 1000 倍——业务永远选前者。

主流算法:HNSW(最常用)、IVF + PQ(最省内存)、FAISS(最常用的库)。


5. 多路融合 — 「请 6 个挑片员并行选片」

多路召回融合:用户请求并行发给 6 路召回(口碑/气质/标签/社交/场景/兜底),各出一份候选,用 RRF 按排名融合成一份最终候选,交给排序

没有一路召回能覆盖所有场景,所以平台同时跑多路,各管一摊,再用 RRF 融成一份名单。

为啥不能只靠 1 个挑片员?

你的真实需求单一挑片员的盲区
我想看刚上架的这部冷门片老挑片员没数据,算不出
我是新客,从没租过任何片老挑片员束手无策
这个月全站最火的爆款个性化匹配可能漏
周末 / 下雨 / 我在外地静态匹配感知不到

怎么融合 6 个挑片员的名单?

最常用是 RRF(也是 recsys-mini 现在在用的):

每个候选的最终分 = Σ  1 / (60 + 它在第 N 个挑片员的排名)

翻译人话:只看每个挑片员把你排第几,不看打了几分。这样不同挑片员的「打分体系」不一致也不影响。RRF 的完整推导见 多路召回融合


6. 三个最常踩的评估坑

坑 1:召回阶段看 NDCG 没意义

召回只问「在不在 200 部里」
NDCG 是「排第几」
→ 你召回内部排第几,排序会全部打散重新排
→ 看 NDCG 等于自欺欺人

正确做法:召回阶段只看 Recall@K + Coverage

坑 2:Coverage 高 ≠ 候选多样

6,000 个用户,每人 200 个候选
总共覆盖 70% 的物品  ← 看似不错
但每个用户的 200 个候选可能高度雷同  ← 用户体验仍然单调

正确指标:要看 每个用户列表内的 ILD(Intra-List Diversity)。

坑 3:K 一变,指标就不可比

A 模型 Recall@10  = 6%
B 模型 Recall@200 = 50%
→ 这不能比!K 不一样

铁律:对比模型,K 必须固定。这是最常见的「伪提升」陷阱。


7. 一个隐藏的大坑 — SSB

SSB = Sample Selection Bias(样本选择偏差)

场景

昨天:店里只用「老挑片员 + 兜底」挑片
      → 老板打分系统就是基于「这些候选」训练的

今天:你给店里升级了「气质速配(双塔)」
      → 候选的分布完全变了(多了一堆从没推过的片)
      → 老板之前训练的打分体系不再适用
      → 排序质量暴跌

解决任何一次召回升级,都必须重新训练排序。这是 recall ↔ ranking 的「耦合契约」,跑不掉。这条铁律会在 双塔召回排序精排 里反复出现。


8. 一个可跑的召回基线

用 MovieLens-1M 搭的教学级推荐系统 recsys-mini,当前召回路线:

召回路线:
  ItemCF + Popular  →  RRF 融合  →  Recall@200 = 50.20%
排名下一步要做的期待收益工作量
⭐⭐⭐双塔召回(DSSM + FAISS)Recall@200 → 60%+3–5 天
⭐⭐⭐内容召回(用电影标题做 NLP 向量)解决冷门电影召不出的问题1–2 天
⭐⭐把「是哪个召回路出的」作为排序特征不动召回也能提升排序半天
⭐⭐学习式融合替代 RRF突破现在的 RRF 上限1 天

TL;DR — 三句话

  1. 召回 = 挑片员,排序 = 老板。 召回宁可多搬 200 部片上桌(高 Recall@K),也别漏掉你的真爱片(漏了老板救不回来)。

  2. 现代召回 = 双塔 + ANN 是主力。 双塔把用户和物品都压成向量,ANN 让 1 亿候选里秒找 200。这是过去 10 年没变过的工业界标配。

  3. 多路并行召回 + RRF 融合 + 重训排序,是一套「系统工程」。 没有一种召回路能 cover 所有需求,所以平台同时跑 6–12 路。每次召回改了,排序必须重训——这是 SSB 的铁律。


对照表 — 比喻 ↔ 术语

本文比喻推荐系统术语
挑片员Recall(candidate generation)
老板Ranking
老板娘 / 最终摆片Re-ranking / final mix
200 部候选top-K candidates
真爱片在不在Recall@K
挑片员用了多少片库Coverage@K
8 种挑片员流派8 families of recall
口碑老挑片员Collaborative filtering(CF / ItemCF / Swing)
气质速配Two-tower(DSSM / YouTube DNN)
卡片柜ANN indexing(HNSW / IVF / FAISS)
顺藤摸瓜Graph recall(LightGCN / PinSage)
标签速配Inverted recall(tag / category)
6 个挑片员并行选Multi-route fusion + RRF
SSB 隐藏大坑Recall ↔ ranking consistency(SSB)

下一篇进入召回的第一路、也是最经典的一路——ItemCF 协同过滤:一本 25 年前的「老账本」,凭什么今天还在抖音、淘宝、Netflix 的召回里活蹦乱跳。


views
Share this post on:

Previous Post
协同过滤 ItemCF:25 年不过时的召回骨架,从余弦相似度到 Swing / EASE / 双塔
Next Post
广告视觉构图与动态创意:构图法则、视线引导与视频钩子