设计推荐系统:召回、排序与重排

FreeGuideOnline 最新 2026-06-19

推荐系统核心流程:从海量内容到精准推荐

推荐系统负责在用户与海量物品之间建立连接。一个工业级推荐系统通常将推荐过程拆分为 召回 (Recall)排序 (Ranking)重排 (Re-rank) 三个递进阶段。这种漏斗式架构可以在保证推荐效果的同时,严格控制计算耗时,使系统具备实时响应能力。

1. 召回:快速缩小候选集

召回阶段的目标是从百万乃至亿级别的全量物品库中,快速筛选出数百到数千个用户可能感兴趣的候选物品。这一阶段要求极高的计算效率,常用策略包括:

1.1 多路召回策略

单一召回方式容易存在盲区,工业界普遍采用多路召回并行的方式,后续再进行合并去重。

  • 基于用户画像的召回:根据用户的基础属性(年龄、地区等)或长期兴趣标签,匹配对应物品池。
  • 基于协同过滤的召回
    • Item-based CF:计算物品间的相似度,推荐与用户历史行为物品相似的物品。
    • User-based CF:找到与目标用户相似的用户群,推荐他们喜欢的物品。
  • 基于向量的召回:将用户和物品映射到同一向量空间,通过近似最近邻搜索快速找到与用户向量最接近的物品向量。双塔模型是该类方法的典型代表。
  • 基于热度的召回:作为冷启动或兜底策略,补充全局热门内容。
  • 基于图的召回:利用随机游走、图神经网络等方法,挖掘用户-物品交互图中的高阶关联。

1.2 向量化召回的实现要点

  • 特征工程:用户侧特征(历史行为序列、实时上下文等)和物品侧特征(类别、发布时间、文本/图像表示)需分别输入双塔。
  • 相似度计算:通常使用余弦相似度或内积。离线时物品向量提前建好索引。
  • 近似最近邻(ANN)检索引擎:引入 Faiss、ScaNN、HNSW 等工具,实现毫秒级向量检索。

1.3 召回阶段的评估

召回阶段侧重评估 覆盖率召回率。需要监控每条召回通道的占比、命中率以及总的召回覆盖率,避免优质内容因通道失效而无法进入后续环节。

2. 排序:精细化预估用户偏好

排序阶段接收到召回的数千个候选物品,核心任务是利用复杂的模型和丰富的特征,精确预估用户对每个物品的点击率、转化率、停留时长等目标,并据此进行粗排到精排的筛选。

2.1 粗排:轻量模型初步筛选

精排模型往往结构复杂、耗时长,难以对全部召回结果打分。粗排环节承上启下,使用相对轻量的模型(如双塔、简化版深度神经网络)将候选集从数千个进一步压缩到数百个,同时尽可能保持与精排一致的质量排序。

2.2 精排:深度模型的精准预估

精排是推荐系统的核心大脑,运用大量特征进行深度交叉和序列建模。

  • 特征体系
    • 用户侧:基础属性、长期统计特征、短期行为序列、实时上下文(时间、网络状态)。
    • 物品侧:静态属性、历史表现统计、多模态嵌入表示。
    • 交叉特征:用户-物品共现统计、用户类别偏好程度。
  • 经典模型演进
    • Wide & Deep / DeepFM:联合记忆(特征交叉)与泛化能力。
    • DIN / DIEN:引入注意力机制处理用户行为序列,捕获动态兴趣。
    • 多任务学习(ESMM / PLE):同时预估点击率与转化率等关联目标,缓解样本选择偏差。
  • 训练目标:点级损失(二分类交叉熵)配合辅助目标(如信息熵、梯度冲突缓解),并引入位置偏差等消偏策略。

2.3 排序模型的评估与校准

  • 离线指标:AUC GAUC LogLoss。需按时间、用户分层细拆,防止整体虚高。
  • 偏差问题:位置偏差(展示位置影响点击)、选择偏差等需在模型训练或评估时进行纠偏,如采用反事实学习框架。
  • 校准:确保预估点击率与实际点击率均值接近,为后续混排和竞价提供可靠依据。

3. 重排:提升列表整体体验

经过精排得到排序列表后,如果仅按分数从高到低展示,往往会出现视觉同质化、相关性断层等问题。重排阶段在精排结果的基础上进行二次调整,优化序列的整体效用与多样性。

3.1 多样性优先

  • MMR(最大边际相关性):在相关性与多样性之间寻找平衡,迭代选取与已选结果最不相似且分数还高的物品。
  • 类目打散:设定滑动窗口内同一作者、同一类目的最大出现次数,强制分散。
  • DPP(行列式点过程):将整个推荐列表作为集合进行概率建模,天然兼顾质量与集合的多样性。

3.2 业务规则与上下文适配

  • 已读已购过滤:全局去重,同一会话不重复推荐。
  • 疲劳度控制:对同一物品或同一主题设置曝光上限。
  • 位置强控:如首位必须为广告,第二位固定为强插运营位,再对剩余位置进行重排。
  • 上下文感知:用户当前网络状态(Wi-Fi/移动数据)影响视频自动播放策略;上下滑动方向影响视觉焦点。

3.3 体验驱动的序列生成

  • 序列生成算法:将重排建模为序列决策问题,利用强化学习或生成模型产出整体点击率最高的序列。
  • 插入式调整:在精排序列中按规则插入强插内容,并局部微调周边位置以保证流畅度。
  • 滑动窗口平滑:确保用户连续下滑时,信息流的感官节奏与新鲜感不会突变。

4. 系统架构与工程实践

将召回、排序、重排串联为一个可用的推荐系统,需兼顾在线与离线链路。

  • 在线服务层:使用高性能服务器,通过并发方式请求多条召回通路,聚合后送入粗排、精排、重排模型。每个环节需设置超时和降级逻辑,当精排超时时自动退回粗排结果。
  • 近线/离线数据层:实时行为日志经 Kafka 等消息队列,进入 Flink 流处理生成实时特征;离线 Spark 任务负责模型全量训练和物品向量更新。
  • 模型工程:模型可通过 TensorFlow Serving 或 TorchServe 部署,支持模型热更新和 A/B 实验框架。
  • 特征平台:提供统一的特征注册、回流、在线获取服务,确保训练和推理时的特征一致性。

5. 推荐效果评估体系

离线指标只能作为参考,真实的迭代效果必须通过在线实验验证。

  • A/B 实验:将用户随机分桶,对比实验组与对照组在核心业务指标(点击率、人均时长、留存率、营收等)上的差异。
  • Interleaving 评估:用于快速淘汰明显劣势的排序模型,将两个模型的推荐结果交叉混排,根据用户偏好归因。
  • 长期价值指标:关注多样性、可靠性带来的用户生命周期价值,避免单一追逐短期点击。

通过环环相扣的召回、排序与重排设计,再辅以稳定的工程架构和严谨的评估闭环,方能构建一个高效且持续优化的推荐系统。