推荐系统架构 “多阶段级联” 为核心的经典工业架构
多阶段级联架构:完整技术细节
文档信息
- 版本:v2.0(深化版)
- 适用场景:推荐系统、搜索、广告系统的工程架构设计与技术选型
- 核心读者:推荐算法工程师、后端架构师、技术管理者
一、架构总览
1.1 设计哲学
多阶段级联架构(Multi-Stage Cascading Architecture)是当前工业推荐系统的主流工程范式。其核心设计哲学是漏斗式筛选:候选物品数量逐级减少,模型复杂度逐级增加,在有限延迟内平衡效果与效率。
这一设计的根本原因在于计算成本的约束。假设一个电商平台有1亿件商品,用户每次刷新首页,如果用最复杂的深度学习模型给这1亿件商品打分,即使单次预测只需10毫秒,总耗时也要277个小时。推荐系统本质上是在解决一个用有限计算资源找到最优结果的工程问题,分层架构是优雅解决这一矛盾的工程方案。
1.2 整体链路
召回(亿→千)→ 粗排(千→百)→ 精排(百→十)→ 重排(十→最终列表)
| 阶段 | 输入规模 | 输出规模 | 核心目标 | 延迟预算 |
|---|---|---|---|---|
| 召回 | 百万~亿级 | 千~万级 | 高覆盖率、低延迟 | 10~30ms |
| 粗排 | 千~万级 | 百~千级 | 平衡精度与性能 | 10~20ms |
| 精排 | 百~千级 | 十~百级 | 精准预测用户行为 | 20~50ms |
| 重排 | 十~百级 | 十~数十条 | 全局约束与多样性 | 5~10ms |
各阶段承担不同职责:召回决定天花板,粗排为了性能效率,精排决定最终推荐精度。
1.3 系统分层视角
从工程系统角度看,推荐系统可划分为四层:
| 层级 | 职责 | 典型组件 |
|---|---|---|
| 离线层 | 日志收集、模型训练、特征工程 | Hive/Spark、TensorFlow/PyTorch |
| 近线层 | 索引构建、画像生成、特征库更新 | Flink、Kafka、Redis |
| 在线层 | 模型推理(召回→粗排→精排→重排) | TF Serving、Triton、Faiss |
| 前端层 | 场景展示适配、端侧重排 | 客户端SDK、Web前端 |
二、召回层
2.1 核心定位
召回是推荐系统的第一级漏斗,负责从海量候选池(百万/亿级)中快速筛选出几百到几千条与用户可能相关的候选集。其核心目标是全面覆盖用户可能消费的item,决定着整个推荐算法的天花板。
召回追求的是广度而非精度——由于后续有排序模块作为保障,召回不需要十分准确,但必须保证不要遗漏和低延迟。
2.2 多路召回机制
召回层并非单一路径,而是多路并行召回再融合。每条召回通道都有其偏差,多路机制类似于集成学习的思想——“弱弱为强,各取所长,平衡误差”。
| 召回路径 | 原理 | 典型代表 |
|---|---|---|
| 协同过滤召回 | 离线生成item-item、tag-item、user-user相关矩阵,线上通过用户行为key查相关item | I2I、Tag2I、U2U2I |
| Embedding召回 | 通过用户行为序列构建图或随机游走生成序列,用w2v生成graph embedding,再通过Faiss向量检索 | Item2Vec、Graph Embedding |
| 深度召回 | 双塔模型(DSSM、MIND等),离线生成item embedding推送至Faiss,线上实时计算user embedding | DSSM、MIND、TDM |
| 热门/趋势召回 | 基于群体热度和时效性 | 热门榜单、趋势内容 |
| 规则/探索召回 | 业务规则兜底、冷启动探索 | 新品、新用户冷启动 |
在实际工业系统中,召回路径可达几十路,少者也有7-8路。
2.3 多路召回的融合与去重
2.3.1 配额控制模型
多路召回后需要统一融合。以阿里云多路搜索API为例,priority(优先级)相同的path组成一个查询组,组内的path共享召回配额(quota)。例如一个组内有A和B两路查询,quota均为100,若A路实际只召回了70个文档,则剩余的30个quota可被B路使用,使B路最多可召回130个文档。
2.3.2 两种截断策略
PriorityAdjustCountFilter(按优先级截取) :将所有候选item按RetrieveId分组,按配置顺序从高到低依次从每路中取N个item,每路内部按Score降序排列。支持两种计数模式——fix(每路固定取N个)和accumulator(累计取满N个后停止)。
配置示例:
{
"FilterConfs": [{
"Name": "priority_truncate",
"FilterType": "PriorityAdjustCountFilter",
"AdjustCountConfs": [
{ "RecallName": "u2i_recall", "Type": "fix", "Count": 80 },
{ "RecallName": "vector_recall", "Type": "fix", "Count": 60 },
{ "RecallName": "hot_recall", "Type": "fix", "Count": 40 },
{ "RecallName": "new_recall", "Type": "fix", "Count": 20 }
]
}]
}
效果:从u2i取80个 → 向量召回取60个 → 热门取40个 → 新品取20个,总共200个进入精排。
SnakeFilter(按权重蛇形交错分配) :根据各路的Weight按比例计算每路应分配的item数量,按“蛇形”方式轮流从各路取item。遇到重复item时支持两种策略:REFILL_ON_DUPLICATE(跳过重复但不消耗配额)和SKIP_ON_DUPLICATE(跳过重复且消耗配额)。
2.3.3 统一排序
多路召回后需要对结果进行统一的排序和合并。阿里云多路搜索API支持三种统一排序类型:rrf(Reciprocal Rank Fusion算法对多路结果进行融合排序)、cava_script(使用自定义脚本进行排序)和none(跳过统一排序阶段)。参与统一排序的文档总数可通过unified_rank_size参数控制,取值范围为[1, 10000]。
2.4 负采样策略
深度召回模型的核心挑战之一是负采样(“负样本为王”),主要因为存在sample selection bias问题。常用策略包括:
- 全局随机负采样:从全场景曝光过的item中随机采样,以listwise存储负样本,最大程度保证数据分布一致。
- In-batch负采样:batch内的user vector与item vector构建cosine对角线矩阵,对角线为正样本,其余作为负样本。这种采样方式有损但实验对比在可接受范围内,且具有一定热度打压作用。
- Popularity随机负采样:在随机负采样基础上加入热度item作为负样本,因为热门item没有被作为正样本,极可能是不相关或用户不感兴趣的。
深度召回在召回队列的quota只有约10%,但曝光占比却可达60%,说明其在召回中举足轻重。
三、粗排层
3.1 核心定位
粗排位于召回和精排之间,需要从千级别候选item集合中筛选出百级别item集合送给精排层。粗排被形容为“精排的影子”,其目标是拟合精排结果的排序。
从全链路视角审视,粗排层面临三大挑战:
- 样本选择偏差(SSB) :级联排序系统下,粗排离最后的结果展示环节较远,导致粗排模型离线训练样本空间与待预测的样本空间存在较大的差异。
- 粗排精排联动:粗排处于召回和精排之间,需要更多获取和利用后续链路的信息来提升效果。
- 性能约束:线上粗排预测的候选集远远高于精排模型,然而整个系统对性能有严格要求。
3.2 技术演进路线
以美团搜索粗排为例,其演进路线具有代表性:
| 阶段 | 时间 | 方法 | 特点 |
|---|---|---|---|
| 线性加权 | 2016 | 相关性+质量度+转化率加权 | 简单但特征表达弱,权重人工确定 |
| LR模型 | 2017 | 基于机器学习的Pointwise预估 | 引入简单特征实现初步个性化 |
| 双塔模型 | 2018 | 用户/物料向量内积计算 | 可提前计算商户向量,在线预测快,但交叉能力有限 |
| 双塔+GBDT | 2019 | 双塔输出作为特征与交叉特征通过GBDT融合 | 弥补双塔无法建模交叉特征的问题 |
| NN端到端 | 2020至今 | 神经网络端到端粗排模型 | 算力提升后开始探索 |
当前工业界粗排模型常用的有双塔模型(如腾讯、爱奇艺)和交互式NN模型(如阿里巴巴)。
3.3 样本选择偏差(SSB)问题
如果只用精排下发的真实曝光样本来训练粗排模型,粗排对精排的拟合就会出现较大偏差。相比精排,粗排解空间更大,和精排一样只使用曝光样本会导致严重的样本选择偏差问题。
常见解决方案:
- 从精排未下发样本中采样:从精排的队列中采样未曝光的物料作为负样本,可以随机采样或对队列划分不同档位采样。
- 全局随机负采样:对每个用户从全局候选物料中随机抽取非正例的item作为负例,样本空间是全库的,极大缓解SSB问题。
- 动态负采样:对每个用户的未曝光物料池随机抽取负样本,兼顾实时性和多样性。
- 样本权重优化:正样本全保留,负样本下采样以控制样本比例。
3.4 知识蒸馏(精排联动)
粗排模型受限于性能约束,模型结构比精排简单、特征数量也少,因此排序效果差于精排。知识蒸馏是业界简化模型结构并最小化效果损失的普遍方法,采取Teacher-Student范式:结构复杂、学习能力强的精排模型作为Teacher,粗排模型作为Student,通过Teacher模型来辅助Student学习。
具体做法包括:
- 将粗排模型作为Student,精排的复杂模型作为Teacher,两者同时联合训练,要求Student学习Teacher的Logits,同时采取特征Embedding共享。
- 引入精排级交叉特征,使粗排模型学习精排决策模式,突破双塔模型无法交叉的局限。
- 采用对比学习使精排和粗排联动优化粗排效果。
四、精排层
4.1 核心定位
精排是推荐系统中最复杂的部分,对粗排结果进行精细化排序,输出用户最可能交互的Top结果。其特点是:复杂模型(如DeepFM、DIN、Transformer)融合多维度特征(用户、内容、上下文),预测CTR、时长、转化率等目标,按业务目标加权排序。计算代价高,特征工程复杂,模型参数量大,需分布式推理。
精排模块的技术核心包括四大方向:特征交叉、用户行为序列建模、Embedding表征学习和多任务学习。
4.2 特征交叉
特征交叉是精排模型的基础能力,其演进经历了:
- 统计学习阶段:以LR为核心,通过FM模型捕捉二阶特征交互。优势在于可解释性强,但无法建模高阶特征关系。
- 深度学习阶段:MLP通过非线性变换实现高阶特征组合,但存在特征交互不可控的问题。DIN通过引入注意力机制,使模型能够动态计算用户历史行为与当前候选内容的关联度。
- 经典模型:DCN(Deep & Cross Network)显式建模高阶交叉,DeepFM融合因子分解机与深度网络,Wide&Deep结合记忆与泛化能力。
近年来,Transformer提出的Attention机制逐渐成为CTR模型里高阶特征交互的重要方式。18年AutoInt提出将Multi-head self-attention应用在CTR模型里,在增强模型可解释性的同时具备高阶特征交叉的能力。
4.3 用户行为序列建模
用户行为序列建模是精排的核心竞争力之一。从业界的演化来看,主要从两个角度提升模型个性化:特征的交叉角度和用户的行为序列建模角度。
代表模型包括:
- DIN:引入注意力机制,动态聚焦用户历史行为中的关键信息。
- DIEN:在DIN基础上引入GRU建模兴趣演化。
- Transformer-based:用自注意力机制建模长序列行为。BST直接使用Transformer对用户行为序列建模。
快手的实践包括:CTR模型PPNet、多domain多任务学习框架、短期行为序列建模、长期行为序列建模。
4.4 多任务学习与多目标优化
精排需要同时优化点击率、转化率、停留时长等多个目标,核心矛盾是不同业务指标之间可能存在负相关关系。
主流多目标建模技术包括:
| 模型 | 原理 | 特点 |
|---|---|---|
| ESMM | 全空间多任务建模,解决CVR样本选择偏差 | 适合转化率预估 |
| MMOE | 多门控混合专家,多个专家子网络+门控网络动态分配权重 | 解决多目标冲突 |
| PLE | 渐进式分层提取,在MMOE基础上改进 | 多个大厂验证后结论一致:PLE比MMOE更稳、更可控、更适合多目标推荐系统 |
MMOE通过三个机制实现多目标平衡:专家网络(多个专家子网络分别学习不同目标的特征表示)、门控网络(动态计算各专家对不同目标的贡献权重)和任务塔(将加权后的专家输出融合生成最终预测值)。
4.5 精排模型Scaling趋势
最近一年,搜推中的精排模型迭代逐渐走向大模型方向,通过参数scaling law、序列和特征交叉建模等方式提升效果。从字节的代表工作可以看出,基础特征建模和序列建模正在走向统一融合的过程,借鉴NLP、CV领域大模型的经验,将底层特征统一token化,再使用Transformer建模,配合序列压缩的方法,实现高效的精排模型Scaling Up,是未来精排进一步迭代的发展方向。
五、重排层
5.1 核心定位
重排是推荐链路的最后阶段,对精排结果进行业务规则调整,优化用户体验和系统指标。其特点包括:
- 策略导向:去重、打散相似内容、插入广告/运营位、多样性控制、实时反馈融入。
- 动态调整:结合上下文(如当前页面已曝光内容、实时点击率波动)。
- 端侧协同:部分策略在客户端实时执行。
5.2 规则打散策略
重排需要满足业务需求的各种规则约束,典型规则包括:
- 最多连续k次出现某类笔记:如小红书最多连续出现k=5篇图文笔记,最多连续出现k=5篇视频笔记。
- 每k条内容最多出现一个某类内容:如广告不能太多,每k=9条笔记最多一条。
- 前t篇内容最多出现k篇某类内容:如开屏第一次推送不能太多广告。
工业实践中,为防止同一类目或同一品牌的商品过于集中,通过滑动窗口机制进行打散。热门物品打散规则可设定为:每10个推荐位中,热门物品最多出现3次,且相邻热门物品间隔至少2个推荐位。
在运营有强插规则时,技术上应采用分层重排策略——先执行“必出/必不出”的硬逻辑,再在剩余槽位中运行多样性算法,最后进行广告混排。
5.3 多样性算法
MMR(最大边际相关性)
MMR每次选择与已选集合最不相似且与查询最相关的物品加入结果集。排序模型先给物品打分,然后在后处理中提高多样性,在n个候选品中选出k个多样化的物品。MMR的时间复杂度为O(k · n · d),推荐diversity参数范围为0.4~0.7。
MMR存在局限:如果已选集合很大(已经包含了非常多样化的物品),MMR算法会趋于失效,此时需要使用滑动窗口优化——只考虑最近N个物品的相似度。
DPP(行列式点过程)
DPP是推荐系统重排任务中实现多样性的最佳方法之一。其核心思想是用超平行体的体积来衡量物品集合的多样性——将物品表示为向量,用行列式来描述所有子集的概率,行列式值越大表示集合越多样化。
DPP的时间复杂度为O(k · n · d + n · k²) ,推荐diversity参数范围为0.5~0.8。在基准测试中,DPP整体表现最佳——兼具最高的准确性和多样性。
Hulu的主要贡献是给出了DPP的高效算法,使用贪心算法求解,通过Cholesky分解的增量更新来加速计算。DPP算法同样可能存在失效的情况(物品已经非常多样化,趋于线性相关),需要使用滑动窗口来进行优化。
策略选择指南
| 策略 | 复杂度 | 适用场景 | 推荐diversity |
|---|---|---|---|
| MMR | O(k·n·d) | 简单基线,快速实现 | 0.4~0.7 |
| MSD | O(k·n·d) | 最大化多样性 | 0.3~0.5 |
| DPP | O(k·n·d + n·k²) | 推荐默认,整体最佳 | 0.5~0.8 |
| COVER | O(k·n²) | 话题覆盖或聚类场景 | — |
| SSD | O(k·n·d) | 无限滚动内容流 | — |
六、全链路工程挑战
6.1 特征一致性
特征一致性是多阶段级联架构的关键工程要求。召回、粗排、精排各阶段使用的特征必须同源、同时刻,否则会出现特征不一致导致的效果损失。
B站的一致性架构实践具有代表性。其早期架构存在两类不一致问题:
数据不一致的三个原因:
- 访问时间差异:推理服务和Label Join/Feature Extract模块访问同一个特征的时间不同,秒级更新的实时特征差异被放大。
- 新稿件问题:在线推理服务有稿件服务可获取新稿件的特征,而离线没有这个服务。
- 特征穿越问题:LabelJoin有N分钟的固定时间窗,Feature Extract在查询批量特征时可能批量特征版本已经更新,查到的是最新版本特征。
计算不一致:特征计算有三个地方——在线推理(C++实现)、Online Feature Extract(Java实现,基于Flink)、Offline Feature Extract(Python实现,基于Spark),需要用户开发3种特征计算逻辑并小心对齐。
B站的解决方案是升级为一致性架构:
- 数据一致性:将在线推理的原始特征现场snapshot dump到近线,近线基于snapshot做Label Join和Feature Extract,保证数据完全一致。
- 计算一致性:特征计算逻辑算子化,基于TensorFlow实现一个C++ lib。推理服务直接调用特征抽取lib,离线Feature Extract通过Java JNI调用C++ lib,用户只需定义一次。
6.2 延迟与算力分配
多阶段级联架构的工程核心是在严格延迟约束(通常<100ms)下运行。各阶段资源分配策略:
- 召回层:依赖大规模向量检索(如Faiss、HNSW),需配置GPU加速或专用向量数据库。
- 粗排层:采用轻量级模型,需低延迟计算资源(如CPU优化实例)。
- 精排层:部署深度学习模型,需GPU集群支持分布式推理。
- 重排层:结合业务规则,需通用计算资源与规则引擎。
6.3 级联架构的系统性局限
传统多阶段级联架构虽然取得了显著的工业成功,但存在系统性的效率问题:
- 语义鸿沟:召回阶段查询和物品的分离编码阻止了深度交叉特征交互。
- 阶段不一致:不同模块采用冲突的优化目标或容量预算,导致预测差异逐级累积。
- 特征碎片化:各阶段特征工程独立,信息损失逐级累积。
- 模块割裂导致目标不一致:召回追求覆盖,精排追求CTR,各阶段优化目标不完全对齐。
- 实时意图感知弱:难以建模用户会话级动态意图迁移。
七、前沿演进
7.1 生成式推荐的范式挑战
生成式推荐(Generative Recommendation)是当前工业界最前沿的探索方向。其核心思想是将推荐问题重新定义为序列生成问题:基于用户的历史行为序列,直接预测下一个可能交互的物品,类似大语言模型预测下一个Token。
大语言模型的快速发展引发了推荐系统设计的范式转变,正在将传统的判别式排序架构转变为统一的生成式框架。新兴的生成式推荐系统将推荐表述为序列生成任务,利用Transformer架构和tokenized item表示,在单一生成骨干中统一召回、排序和推理。
7.2 主流技术路径
分层序列转导单元(HSTU) :由Meta提出,将用户行为序列直接输入改进的Transformer架构,摒弃传统特征工程,通过注意力机制学习序列表示。
语义ID(Semantic ID) :将每个物品映射为离散的语义ID,将推荐转化为标准的自回归生成任务。TIGER、PLUM、快手OneRec等架构均基于此思路。
7.3 发展趋势
研究表明三个汇聚趋势正在形成:
- 召回与排序在共享生成式架构下统一。
- 偏好对齐、奖励驱动的学习目标整合。
- 多模态和跨域基础模型的快速采用。
同时,开放挑战仍然存在,包括延迟-可扩展性权衡、分布漂移下的鲁棒性、生成式推理的可解释性以及多模态集成。
7.4 短期务实判断
尽管生成式推荐发展迅速,绝大多数工业系统仍运行在多阶段级联架构上。存量优化的重点在于精排模型的Scaling和多模态特征的深度融合。一个可能的混合架构是:召回层保留多路融合以保证性能和覆盖度,粗排和精排逐步被生成式模型替代以提升效果,重排层保留规则策略以满足业务约束。
附录:关键术语表
| 术语 | 全称 | 说明 |
|---|---|---|
| SSB | Sample Selection Bias | 样本选择偏差,粗排核心挑战 |
| ANN | Approximate Nearest Neighbor | 近似最近邻检索 |
| MMR | Maximal Marginal Relevance | 最大边际相关性,多样性算法 |
| DPP | Determinantal Point Process | 行列式点过程,多样性算法 |
| RRF | Reciprocal Rank Fusion | 倒数排名融合,多路融合算法 |
| DSSM | Deep Structured Semantic Model | 深度结构化语义模型(双塔) |
| MMoE | Multi-gate Mixture-of-Experts | 多门控混合专家 |
| PLE | Progressive Layered Extraction | 渐进式分层提取 |
| HSTU | Hierarchical Sequential Transduction Unit | 分层序列转导单元 |
| MFU | Model FLOPs Utilization | 模型算力利用率 |
最后更新于 2026-09-13 04:47:27 并被添加「推荐系统」标签,已有 32 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
此处评论已关闭