推荐系统设计:协同过滤、向量召回与排序
FreeGuideOnline
最新
2026-06-12
推荐系统设计:从协同过滤到向量召回与排序
推荐系统是现代信息产品的核心组件,它在海量内容与用户兴趣之间建立高效匹配。本教程聚焦推荐系统的算法原理与工程落地,围绕协同过滤、向量召回、排序三大模块展开,帮助你建立从理论到实践的完整认知。
1. 推荐系统概览
推荐系统的本质是估计用户对物品的偏好分数,并根据分数排序生成推荐列表。典型架构分为召回(Recall)和排序(Ranking)两层:
- 召回层:从全量物品库中快速筛选出数百个候选,注重覆盖率和效率。
- 排序层:对候选集进行精准打分排序,注重准确率和个性化。
早期的协同过滤直接承担了召回甚至排序的职责,随着数据量和业务复杂度增长,向量召回、深度学习排序逐渐成为主流。
2. 协同过滤:推荐系统的基石
协同过滤(Collaborative Filtering, CF)的核心思想是利用群体行为数据来做推荐,无需理解物品内容。主要分为两类:
2.1 基于用户的协同过滤(UserCF)
- 原理:找到与目标用户兴趣相似的用户群体,推荐这些相似用户喜欢且目标用户未接触过的物品。
- 步骤:
- 根据用户对物品的行为(如评分、点击),计算用户相似度(常用余弦相似度、皮尔逊相关系数)。
- 选出与目标用户最相似的 K 个用户。
- 聚合 K 个相似用户的物品偏好,预测目标用户对未交互物品的兴趣。
- 优缺点:天然支持惊喜度推荐,但用户数增长时相似度计算开销巨大,冷启动明显。
2.2 基于物品的协同过滤(ItemCF)
- 原理:基于用户行为计算物品间的相似度,推荐与用户历史喜欢的物品相似的其他物品。
- 步骤:
- 计算任意两个物品的相似度(利用对它们有过行为的用户池)。
- 根据用户历史行为物品,召回想似物品作为候选。
- 计算候选物品的累积偏好分数进行推荐。
- 优缺点:物品相似度相对稳定,可离线预计算,解释性强,但难以发现用户长期兴趣之外的物品。
2.3 矩阵分解(Matrix Factorization, MF)
- 动机:UserCF 和 ItemCF 仅利用近邻信息,稀疏矩阵下效果受限。矩阵分解将用户-物品交互矩阵分解为用户隐向量与物品隐向量。
- 模型:
评分 ≈ 用户偏置 + 物品偏置 + 用户向量 · 物品向量 - 训练:通过随机梯度下降(SGD)或交替最小二乘法(ALS)优化损失函数,常用均方误差损失加正则项。
- 优势:泛化能力强,可以预测任意用户对任意物品的偏好,为后续向量化召回奠定基础。
3. 向量召回:从矩阵分解到深度嵌入
当物品规模达到百万甚至亿级时,传统的协同过滤计算开销难以接受。向量召回(Embedding Recall)成为工程标准:将用户和物品映射到同一低维空间,通过近似最近邻(ANN)搜索快速召回。
3.1 用户-物品向量的生成
- 基于矩阵分解的向量:直接使用 MF 学到的用户向量和物品向量,通过内积大小做召回。但内积不满足距离三角不等式,工程上通常改用余弦相似度。
- 基于神经网络的深度向量:
- DSSM (Deep Structured Semantic Model) 类双塔架构:用户塔和物品塔分别将各自特征(用户画像、行为序列;物品属性、上下文)压缩为固定维度向量。训练目标是通过相似度匹配正负样本(如点击 vs 未点击、随机采样负样本)。
- 优化技巧:使用 in-batch 负采样、温度系数调整、L2 归一化后计算余弦相似度,可极大提升大规模训练的效率和向量质量。
- 图嵌入方法:如 DeepWalk、Node2Vec、EGES (阿里巴巴基于 Graph Embedding 的大规模召回)。在用户-物品交互图上进行随机游走,生成序列,再通过 Word2Vec 类算法学习节点嵌入。EGES 通过 side information 加权聚合增强物品向量表达。
3.2 近似最近邻检索(ANN)
- 目标:在亿级向量中快速找到与查询向量距离最近的 K 个向量。
- 主流方案:
- Faiss (Facebook AI Similarity Search):支持多种索引方法,如基于量化的倒排索引(IVF-PQ)、基于图的 HNSW 等。内存占用低,检索快,是工业界标配。
- 向量检索库:如 Milvus、ScaNN、Elasticsearch 的向量插件,可根据业务需求集成到推荐流水线中。
- 工程实现:离线训练产出物品向量后,构建索引;在线时用户向量实时计算,从索引中 KNN 检索,获得召回候选集。
3.3 多路召回融合
单一向量召回存在长尾、多样性不足等问题,工程中常采用多路召回策略:
- 向量召回:保证泛化性和个性化。
- 协同过滤召回:保证历史行为的强相关性。
- 热度/地理/时间召回:补充实时性和冷启动。
- 各路召回结果去重后合并送入排序层。
4. 排序:精排与重排的实战
召回层已经将候选集从亿级减少到千级,排序层需要在有限候选上做高精度排序,同时兼顾业务指标。
4.1 特征工程
排序模型能力上限由特征决定。推荐系统常用特征:
- 用户侧特征:用户ID、年龄、性别、注册时长、最近行为序列、兴趣标签。
- 物品侧特征:物品ID、类目、品牌、发布时间、点击率、转化率等统计特征。
- 上下文特征:时间(星期几、一天中的小时)、设备、网络类型、页面位置。
- 交叉特征:用户与物品的历史交互次数、CTR 期望、类别匹配度等。
- 序列特征:用户最近点击/购买序列,用于捕捉短期动态兴趣。
特征处理时需注意归一化、分桶、Embedding表示,减少稀疏特征噪声。
4.2 常用排序模型
- 逻辑回归(LR) + 人工特征交叉:简单、可解释,曾是工业界基线。需要手动设计大量组合特征。
- FM (Factorization Machines):自动学习二阶特征组合,解决稀疏特征下的交叉问题。推荐使用 FFM (Field-aware FM) 增强对不同特征域的处理。
- GBDT + LR 组合:GBDT 自动进行特征组合和高阶变换,将叶子节点作为特征喂给 LR,大幅提升表达能力。Facebook 的推荐系统曾广泛使用。
- Wide & Deep:Google 提出的经典结构。Wide 部分处理记忆性(强特征组合),Deep 部分负责泛化(Embedding + 全连接),综合两者优势。
- DeepFM、DCN、xDeepFM:在 Wide & Deep 基础上改进,通过多种网络结构显式/隐式学习高阶特征交叉。
- DIN (Deep Interest Network):引入注意力机制,根据候选物品动态激活用户行为序列中的相关兴趣,解决用户兴趣分散问题。
- 多目标排序:实际业务常需同时优化点击率、转化率、时长等多个目标。可采用共享底层网络的 MMoE (Multi-gate Mixture-of-Experts) 或 PLE 架构,为每个目标分配专家,学习目标之间的相互关联。
4.3 重排序(Re-Ranking)
重排序位于精排之后,通常只处理精排输出的头部几十个物品,进行策略干预:
- 打散与多样性:避免同一标签、同一作者的物品过于集中,使用 MMR 等算法控制多样性。
- 业务规则:强插运营位、新内容冷启动保护、负反馈过滤。
- 收益调控:基于策略梯度或线性加权调整排序,平衡短期点击率与长期用户留存、GMV 等指标。
4.4 模型服务与线上评估
- 特征存储:需构建高性能特征平台(Feature Store),保证线上线下特征一致性。常用 KV 存储(如 Redis)缓存用户特征。
- 模型部署:训练框架(TensorFlow/PyTorch)导出模型,通过 TensorFlow Serving 或 Triton Inference Server 提供在线推理。可采用异构硬件(CPU + GPU)加速。
- A/B 测试:严格对照实验评估算法迭代,关注核心指标(CTR、停留时长、转化率、次日留存等)的统计显著性。
5. 工程实践与架构演进
一个成熟的推荐系统需要工程支撑,典型架构分层:
数据层 → 召回层 → 粗排(可选) → 精排 → 重排 → 结果输出
| | | | |
特征平台 <--离线训练管道--> 在线模型管理/A/B测试/监控
- 数据管道:Kafka/Flume 实时采集用户行为 → 实时/离线特征计算 → 样本拼接生成训练数据。
- 召回服务:部署多路召回模块,使用 Faiss 等索引库,对多路结果做并发调用和归并。
- 排序服务:高并发低延迟(P99 < 50ms),通常采用微服务架构,模型预测和人工策略管道化。
- 冷启动策略:新用户使用注册信息、热门推荐、试探性推荐;新物品使用内容特征、协同种子扩散、强制曝光收集反馈。
- 监控与迭代:全链路延迟监控、点击率实时监控、特征覆盖率检查、模型漂移告警。
6. 总结与学习路径
本教程从核心算法到系统设计,梳理了推荐系统的主流程:
- 理解协同过滤,掌握 UserCF、ItemCF 和矩阵分解的数学原理与适用场景。
- 学习向量召回,掌握双塔模型训练与 ANN 检索,实现海量候选集下的高效召回。
- 深入排序模型,从 LR/GBDT 演进到深度学习精排、多目标优化,并理解重排序的业务价值。
- 构建工程思维,将算法落地为高性能、可维护、可迭代的线上系统。
下一步建议:动手实践一个最小化推荐系统,使用 MovieLens 数据集实现矩阵分解召回和基于 DNN 的排序,同时尝试部署 Faiss 向量服务,逐步增加在线特征和 A/B 实验框架,完成从理论到生产环境的跃进。