推荐系统召回机制全景指南:从经典算法到工业级实践


推荐系统召回机制全景指南:从经典算法到工业级实践

在推荐系统中,召回是离用户最近的一环,也是一道既要"快"又要"准"的技术难题。本文将系统梳理召回层常用策略,从协同过滤到向量检索,从算法原理到工程实现,带你全面理解推荐系统召回的底层逻辑与实际落地。


为什么要做召回?

在推荐系统的三大模块中:

  • 召回(Recall):从亿级候选集中快速选出几千个相关物品;
  • 粗排(Ranking):利用轻量模型对召回结果进行粗略排序;
  • 精排(Re-Ranking):利用复杂模型进一步优化排序结果;
  • 重排(Post-Ranking):多样性/新颖性处理。

其中召回作为入口,决定了推荐系统的"上限"。


协同过滤类召回通道

1️⃣ ItemCF(基于物品的协同过滤)

核心思想:"喜欢A的用户也喜欢B" → A 和 B 相似 → 推荐 B

  • 利用全体用户行为计算物品间的相似度;
  • 用余弦相似度衡量"看过《笑傲江湖》的用户也看了《鹿鼎记》"的频繁程度;
  • 建立两个索引:
    • 用户 → 最近交互物品;
    • 物品 → 相似物品集合。

优势:简单高效,易于实现; 局限:容易被"短时热点"干扰,缺乏多维信息建模能力。

2️⃣ Swing(ItemCF 改进版)

核心思想:在 ItemCF 基础上惩罚"小圈子"效应

  • 两个用户共同喜欢 A 和 B,但如果这两人行为重合度过高(如社群传播),则对相似度贡献较小;
  • 使用用户间的 overlap 降低噪声。

更稳健,适合社区产品。

3️⃣ UserCF(基于用户的协同过滤)

核心思想:"我" 和某个用户兴趣相似 → 他喜欢的我也可能喜欢

  • 计算用户之间的相似度;
  • 基于用户 → 用户 → 物品的链路进行召回。

优势:可解释性强; 局限:用户冷启动问题严重。


向量召回类模型

4️⃣ 矩阵补全(Matrix Factorization)

基础模型:将用户和物品映射到同一向量空间,内积表示兴趣值。

  • 用户 → 向量 a_u;
  • 物品 → 向量 b_i;
  • 兴趣估计:score(u, i) = ⟨a_u, b_i⟩。

工业实践中较少使用,缺点包括:

  • 仅用 ID embedding,缺少属性;
  • 训练方式落后(平方损失、内积);
  • 正负样本构造简单粗暴。

5️⃣ 双塔模型(Two-Tower Model)

工业级向量召回首选方案。

  • 用户塔:接入用户画像(性别、兴趣、活跃度等);
  • 物品塔:接入内容属性(类目、关键词、作者等);
  • 输出向量后做余弦相似度检索。

训练方式有:

  • Pointwise:正负样本二分类;
  • Pairwise:正负配对进行排序;
  • Listwise:同时对一正多负建模。

向量召回过程:

  1. 离线计算所有物品向量 → 存入 Milvus / Faiss 等;
  2. 线上实时计算用户向量 → 近似最近邻检索出 topK 个物品。

优势:

  • 强表达能力;
  • 灵活支持结构化与非结构化特征;
  • 支持在线更新用户 embedding。

正负样本构造策略

双塔模型训练的关键:

✅ 正样本:

  • 用户点击、点赞、收藏过的物品;
  • 为避免过拟合热门物品,需对其做降采样处理。

❌ 错误负样本:

  • 曝光但没点的不一定是负样本,可能只是"点击时机未到";
  • 精排中淘汰的候选更可能是"困难负样本"。

好的负样本策略:

  • 简单负样本:全量池中采样,注意防止对冷门物品不公平;
  • 困难负样本:来自排序淘汰、精排靠后内容;
  • Hybrid 采样:训练数据中混入易难负样本,提升泛化能力。

工程实现与线上更新机制

1️⃣ 向量数据库加速检索

  • 推荐使用 Milvus、Faiss、HnswLib;
  • 将物品 embedding 离线构建索引;
  • 线上用 query(用户向量)检索余弦相似度最大的候选。

2️⃣ 模型更新机制

  • 全量更新:每日训练、发布新模型;
  • 增量更新:实时数据微调 Embedding 层,保持在线个性化;
  • 两者结合,可提升准确率与实时性。

其他召回通道(用于增强多样性)

类型 示例 特点
地理位置 GeoHash召回、同城召回 无个性化,但贴近线下兴趣
作者相关 关注作者、有交互作者、相似作者召回 补充个性化召回路径
缓存召回 精排但未曝光的内容缓存 降低计算,复用历史结果

✨ 总结

推荐系统的召回策略,从规则驱动的协同过滤,到表达能力更强的深度模型,乃至多源融合的增强通道,已逐步形成丰富的技术体系。在实际工程中,往往会组合使用多种召回通道,形成一个"候选池联盟",为排序模块提供足够多样、质量稳定的候选集。

相关推荐
今天背单词了吗9801 小时前
算法学习笔记:19.牛顿迭代法——从原理到实战,涵盖 LeetCode 与考研 408 例题
笔记·学习·算法·牛顿迭代法
jdlxx_dongfangxing2 小时前
进制转换算法详解及应用
算法
why技术3 小时前
也是出息了,业务代码里面也用上算法了。
java·后端·算法
2501_922895583 小时前
字符函数和字符串函数(下)- 暴力匹配算法
算法
IT信息技术学习圈4 小时前
算法核心知识复习:排序算法对比 + 递归与递推深度解析(根据GESP四级题目总结)
算法·排序算法
愚润求学4 小时前
【动态规划】01背包问题
c++·算法·leetcode·动态规划
会唱歌的小黄李5 小时前
【算法】贪心算法入门
算法·贪心算法
轻语呢喃6 小时前
每日LeetCode : 两数相加--链表操作与进位的经典处理
javascript·算法
钢铁男儿6 小时前
C# 接口(接口可以继承接口)
java·算法·c#
zl_vslam6 小时前
SLAM中的非线性优化-2D图优化之激光SLAM cartographer前端匹配(十七)
前端·人工智能·算法