简单搜推链路的简单解析
整体架构遵循一个经典的漏斗型(Funnel)链路,主要包含以下四个核心阶段:
-
召回(Recall/Matching):
这是‘海选’阶段。面对亿级的候选池(广告库或内容库),我们需要在毫秒级内快速筛选出几百到几千个与用户可能相关的候选项。
- 常用手段: 多路召回。包括基于协同过滤(ItemCF/UserCF)、基于内容的召回(向量检索/Embedding)、基于热点的召回、以及基于地理位置(LBS)的召回等。现在的趋势是大量使用**双塔模型(Two-Tower)**进行向量检索。
-
粗排(Pre-Ranking):
这是‘初筛’阶段。为了平衡召回的数量和精排的计算成本,通常会加一层轻量级的排序。
- 常用手段: 使用简化版的深度学习模型(如蒸馏后的小模型)或简单的线性加权公式,将候选集从几千缩减到几百。
-
精排(Ranking):
这是‘核心决策’阶段。对剩下的几百个候选项进行精准的分数预测(如预估点击率 pCTR、预估转化率 pCVR)。
- 常用手段: 复杂的深度学习模型,特征工程极其丰富(用户画像、上下文、广告属性、交叉特征等)。
-
重排(Re-Ranking):
这是‘业务干预’阶段。在精排分数的基础上,加入业务规则。
- 常用手段: 去重(打散同类广告)、强插(保量合同)、多样性控制(MMR算法)、频控、以及最终的竞价机制(如GSP广义第二价格拍卖)决定最终胜出者。”
召回名词:
1. 基于协同过滤 (Collaborative Filtering, CF)
核心逻辑:“物以类聚,人以群分”。不看内容本身,只看用户和行为数据。
- UserCF (基于用户的协同过滤)
- 原理:找到和你口味相似的其他用户(“邻居”),把他们喜欢但你还没看过的东西推荐给你。
- 例子:你和小明都买了《哈利波特》和《指环王》,小明还买了《霍比特人》,系统就推测你可能也喜欢《霍比特人》,于是推给你。
- 特点:擅长发现热点和社交属性强的内容;但用户量极大时,计算“谁和谁相似”非常慢。
- 适用场景:新闻热点、社交网络关注。
- ItemCF (基于物品的协同过滤)
- 原理:找到和你刚才看过的物品相似的其他物品。
- 例子:你买了《手机》,系统发现买过《手机》的人大概率也买了《手机壳》,于是推给你《手机壳》。
- 特点:物品之间的关系比用户关系更稳定(手机和手机壳的关系不会天天变),计算效率高,是电商最常用的基础召回。
- 适用场景:电商“猜你喜欢”、视频“相关推荐”。
- 基于内容的召回 (Content-Based) & 向量检索 (Vector Retrieval)**
核心逻辑:“看脸(特征)”。分析物品本身的属性(文本、图片、标签),找长得像的。
- 传统基于内容
- 原理:提取标签(Tag)。比如一个视频标签是“搞笑、猫、宠物”,系统就去数据库里找其他标签也是“搞笑、猫、宠物”的视频。
- 缺点:依赖人工打标,且无法发现深层语义(比如“开心”和“快乐”字面上不同,但意思一样,传统方法很难关联)。
- 向量检索 / Embedding (嵌入)
- 原理:利用深度学习模型,把用户和物品都变成一串数字向量(比如
[0.1, -0.5, 0.9...])。 - 核心思想:在数学空间里,语义相似的物品,它们的向量距离就很近。
- 操作:计算用户向量和物品向量的余弦相似度或内积。
- 优势:能捕捉深层语义,解决“冷启动”(新物品只要有内容就能算出向量),不再依赖人工标签。
- 技术栈:通常配合 Faiss、HNSW 等近似最近邻搜索引擎使用,实现毫秒级从亿级数据中找回相似项。
- 原理:利用深度学习模型,把用户和物品都变成一串数字向量(比如
3. 基于热点的召回 (Hot/Trending Recall)
核心逻辑:“随大流”。不管你是谁,现在大家都在看这个,你也可能想看。
-
原理:统计全局或分地域/分人群的实时点击率、曝光量、增长速度。
-
策略
:
- 全局热榜:微博热搜、抖音热歌。
- 实时突发:某条新闻突然爆发,权重瞬间调高。
- 时间衰减:热度会随时间降低,保证推荐的是“当下”最火的。
-
作用:保证系统的覆盖率和时效性,防止用户只看到自己狭窄兴趣圈里的东西(信息茧房),同时满足新用户(没有历史行为)的推荐需求。
- 基于地理位置的召回 (LBS - Location Based Services)**
核心逻辑:“就近原则”。
-
原理:获取用户当前的经纬度,筛选出物理距离在一定范围内(如3公里、5公里)的物品。
-
应用场景
:
- 本地生活:美团/大众点评推附近的餐厅。
- 同城交友:探探/陌陌推附近的人。
- 线下广告:走到商场附近,推送该商场的优惠券。
-
技术点:通常使用 GeoHash 或 Google S2 算法将地球网格化,快速索引附近的候选集。
5. 双塔模型 (Two-Tower Model / DSSM) —— *现在的趋势*
这是目前工业界最主流的召回模型架构,必须重点理解。
-
为什么要用双塔?
- 以前算相似度是:拿1个用户去和1亿个物品逐个做复杂的神经网络计算 →→ 太慢了,线上扛不住。
- 双塔的思路:离线提前算好。
-
架构长什么样?
- 左塔(User Tower):输入用户特征(年龄、性别、历史行为),输出一个用户向量。
- 右塔(Item Tower):输入物品特征(标题、类别、图片),输出一个物品向量。
- 关键点:两个塔在训练时通过损失函数让它们匹配,但在在线服务(预测)时,两个塔是完全独立的。
-
为什么快?(核心优势)
- 物品向量可以离线预计算:1亿个物品的向量,每天晚上算好存进数据库(向量索引库)。
- 在线只需算用户向量:用户来了,只用过左塔算出1个用户向量(耗时极短)。
- 极速检索:拿着这1个用户向量,去向量库里做近似最近邻搜索(ANN),瞬间就能捞出最相似的几百个物品。
- 复杂度:从 O(N)O(N) (遍历所有物品)降低到了 O(logN)O(logN) 甚至常数级。
-
总结:双塔模型完美平衡了深度学习的效果(能捕捉复杂特征)和在线服务的速度(解耦计算),所以成为了大规模召回的首选。
粗排
-
背景变化
:
- 以前:召回只有几十路,总共几百个候选,直接全部进精排(Ranking)没问题。
- 现在:为了提升覆盖率,召回路数越来越多(双塔、向量、图神经网络等),召回总数可能达到 几千甚至上万。
-
矛盾点
:
- 精排模型太贵:精排通常使用极其复杂的深度学习模型(如DeepFM, DIN, MMOE),特征交叉多、网络层深,单次推理耗时可能在 10ms~50ms。如果对 5000 个候选都跑一遍精排,总耗时就是 5000×10ms=50s5000×10m**s=50s ,这远超用户能忍受的 100ms~200ms 总延迟。
- 简单规则太傻:如果只用简单的逻辑回归(LR)或规则过滤,会误杀很多高价值但特征复杂的广告,导致最终收益下降。
-
粗排的使命
:
- 在极短的耗时限制内(通常要求整体耗时 < 10ms),从几千个候选中尽可能准地选出 Top N(如 500 个)给精排。
- 目标:在速度和精度之间寻找最佳平衡点(Trade-off)。
“粗排在整个链路中扮演着**‘过滤器’和‘守门员’的角色,核心目的是解决海量候选集与精排高计算成本之间的矛盾**。
随着召回策略的丰富,候选集往往达到数千量级,而精排模型(如DIN、MMoE)结构复杂、特征繁多,全量计算会导致系统延迟不可接受。因此,我们需要一个高性价比的中间层。
关于常用手段,业界目前主要有三个流派:
- 知识蒸馏(主流):这是目前效果最好的方案。我们将复杂的精排大模型作为‘教师’,训练一个结构极简(如浅层MLP)的‘学生’模型。学生模型不直接拟合Label,而是拟合教师的输出分布。这样既继承了精排的排序逻辑,又将推理速度提升了10倍以上。
- 双塔架构升级:利用双塔模型物品向量可离线计算的特性,在线仅计算用户侧,通过向量内积快速完成打分。这种方式工程落地成本低,且易于扩展。
- 特征与结构剪枝:直接对精排模型进行‘瘦身’,只保留头部强特征,去除高阶交叉网络,配合模型量化(Int8)技术来加速。
精排
-
核心任务:
在极短的时间(通常要求 < 50毫秒,也就是眨眼的一瞬间)内,对粗排筛选剩下的几百个候选内容,进行最精准的打分和排序。核心目标:
在 “算得准”(预测用户喜不喜欢)和 “算得快”(不让用户等待)之间找到最佳平衡点,确保最终推给用户的内容,点击率和转化率最高。
*1. 用什么算?(更聪明的模型)*
不再使用简单的规则,而是采用复杂的深度学习模型(如 DNN、DeepFM、DIN、Transformer 等)。
- 怎么做:这些模型像“超级大脑”,能同时分析用户是谁(画像)、当前环境(时间/地点)、内容是什么(广告属性)以及它们之间复杂的组合关系。
- 目的:精准预测两个关键概率——pCTR(用户点击的可能性)和 pCVR(用户购买/转化的可能性)。
*2. 怎么算得快?(工程加速技巧)*
既然模型很复杂,为了保证 50ms 内算完,必须用各种手段“提速”:
- 特征优化:把能提前算好的数据(离线特征)先存好,实时只算变化的数据(在线特征);剔除没用的数据(特征剪枝)。
- 模型瘦身:给模型“压缩”(量化为 Int8),或者让大模型教小模型(蒸馏),在保证准确率几乎不降的前提下,让计算速度提升几倍。
- 缓存策略:把常用的数据(如用户偏好、内容特征)直接存在内存或高速缓存(Redis)里,随用随取,避免临时去数据库查,节省大量时间。
*3. 还要考虑什么?(多目标与业务规则)*
精排不仅仅是猜“点不点”,还要帮平台做全局平衡:
- 多目标兼顾:除了点击率,还要同时考虑转化率、用户观看时长、新内容扶持(给新人机会)以及广告主多样性(别全是同一家广告)。
- 配合重排:精排算出理论上的“最优解”后,会传递给下一个环节(重排),由重排阶段根据具体的业务规则(如去重、打散、强插)做最后调整,确保最终结果既精准又合规。
重排
*核心任务*
对精排输出的几十到几百条候选结果,进行业务规则校验与用户体验优化。它是推荐链路的最后一道工序,确保最终呈现给用户的内容,既符合算法预测的“高兴趣”,又满足平台运营的“硬约束”。
核心目标
在 “模型精准度” 和 “业务合规性” 之间找到最佳平衡点。
- 不仅要保证点击率(CTR)高;
- 还要强制满足曝光均衡、内容多样性、去重、广告保量等策略,防止列表“虽然准但很单调”。
- 为什么需要重排?(模型做不到的事)
精排模型是“数学最优解”,但它不懂业务潜规则,容易陷入局部最优(例如:因为某类商品点击率高,就连续推10个同类商品)。
重排阶段专门解决以下问题:
-
去重(De-duplication):防止用户连续看到同一个商品,或同一位作者/商家的内容刷屏。
-
多样性(Diversity):强制打散同类目内容,确保列表里有“吃的、穿的、用的”,丰富用户视野,避免审美疲劳。
-
权重调整(Business Boosting)
:
- 新内容扶持:给新品/新作者加权,帮他们冷启动。
- 广告优先级:确保签约广告主按合同获得足够曝光。
- 用户分层:针对新用户、老用户、流失用户应用不同的展示策略。
-
目的:让最终结果既**“懂用户”(算法准),又“懂生意”**(规则对)。
- 怎么做?(常用手段)
-
规则打分/加权(Score Adjustment)
:
- 在精排原始分数的基础上,根据业务策略进行加减分。
- 公式示例:
最终分 = 精排分 × 业务系数 + 扶持加分 - 频控扣分。
-
智能排序策略(Re-ordering)
:
- 打散算法:使用滑动窗口或贪心算法,强制将同类内容隔开(如:每3个视频中最多出现1个游戏类)。
- 固定位插入:在特定位置(如第1位、第6位)强行插入置顶活动或品牌广告。
- 流量调控:动态调整新内容在列表中的占比(如:强制保证前20名里至少有2个是新发布的)。
-
灰度与分段实验(A/B Testing)
:
- 将用户分成不同组别,对部分用户应用新的重排规则(如“更激进的多样性”),小范围验证效果后再全量推广,确保策略安全可控。
- 工程与性能考虑
-
极低延迟要求
:
- 重排通常是在内存中对少量数据(几十到几百条)进行操作,耗时需控制在 5ms~10ms 以内,不能成为链路瓶颈。
-
高效计算
:
- 并行处理:部分规则指标(如用户已看列表、频控计数)可提前预加载或与精排并行计算。
- 缓存加速:将复杂的业务规则配置、黑白名单等缓存在本地内存,避免实时查库。
-
稳定与迭代
:
- 作为最后一道防线,重排逻辑必须高度稳定,即使上游模型波动,也能通过规则兜底保证输出不崩坏。
- 支持热更新策略,运营人员调整规则(如双11大促期间临时提高某类目权重)无需重启服务,即时生效。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)