Skip to content

推荐系统基本技术架构

推荐系统是现代互联网产品的核心引擎,广泛应用于电商、内容平台、社交应用等领域。本章将带你从零开始了解推荐系统的基本概念、技术架构和核心组件。

1. 为什么要学习推荐系统

1.1 岗位重要

推荐算法工程师是目前互联网行业最热门的岗位之一,原因很简单——推荐系统为企业创造了巨大的商业价值:

  • 亚马逊:推荐系统带来了 35% 的销售收入
  • YouTube:主页上 60% 的浏览来自推荐服务
  • Netflix:推荐系统带来了高达 75% 的内容消费

1.2 发展前景广阔

推荐系统技术方向涉及多个前沿领域:

  • 大数据处理
  • 流式计算
  • 数据挖掘
  • 机器学习
  • 高并发服务
  • 用户体验

无论向广度发展(成为全栈工程师)还是深度发展(成为算法专家),推荐系统都提供了丰富的职业发展路径。

1.3 流量分发的核心手段

在信息爆炸的时代,推荐系统是流量分发的核心手段,解决了两个关键问题:

  1. 信息过载:用户怎样找到自己感兴趣的产品?
  2. 长尾挖掘:大部分冷门物品得不到暴露,但它们的总价值往往超过热门物品

推荐系统通过智能匹配,为用户推荐他们感兴趣但自己很难发现的物品,提升用户体验,增大系统留存和转化率。

2. 什么是推荐系统

推荐系统是根据用户的历史信息和行为,向用户推荐他感兴趣的内容的智能系统。

2.1 核心原理

  • 基于行为的协同过滤:根据用户行为找相似用户或物品
  • 基于内容的推荐:根据物品特征相似性推荐

2.2 解决的问题

  • 用户不知道自己想要什么
  • 用户有模糊的需求,不知道具体产品
  • 个性化信息过滤

3. 推荐系统的核心环节

一个完整的推荐系统包含以下 5 个环节:

3.1 数据层

收集和存储所有可用的数据,包括:

  • 用户行为数据(点击、浏览、收藏、购买等)
  • 物品内容数据(标题、描述、标签、图片等)
  • 用户画像数据(年龄、性别、兴趣偏好等)
  • 上下文数据(时间、地点、设备等)

3.2 召回层

从海量物品中快速筛选出候选集,召回策略包括:

  • 协同过滤召回
  • 内容相似召回
  • 热门推荐
  • 个性化推荐

3.3 排序层

对召回的候选集进行精排打分:

  • 计算每个物品的推荐分数
  • 考虑多样性、新颖性等因子
  • 输出排序后的推荐列表

3.4 重排序层(调整)

对排序结果进行微调:

  • 多样性打散
  • 过滤已曝光/已购买物品
  • 业务规则调整(如促销商品插播)

3.5 展示与反馈

  • 将推荐结果展示给用户
  • 收集用户反馈(点击、收藏、购买等)
  • 反馈数据回流到数据层,形成闭环

4. 推荐系统的召回路径

召回层是推荐系统的"第一关",决定了用户最终能看到哪些候选物品。常见的召回路径有 5 种:

4.1 i2i (Item to Item) - 物品到物品

示例:看了这本书的人也看了那本书

原理:基于物品相似度,为用户推荐与他感兴趣的物品相似的物品。

优势:解释性强,用户容易理解

4.2 u2i (User to Item) - 用户到物品

示例:根据用户兴趣直接推荐相关物品

原理:基于用户画像和偏好,直接计算用户对每个物品的匹配度。

优势:个性化程度高

4.3 u2i2i (User → Item → Item) - 用户→物品→物品

示例

  1. 先找用户喜欢的历史物品
  2. 找这些物品的相似物品
  3. 推荐这些相似物品

优势:结合了用户偏好和物品相似性

4.4 u2u2i (User → User → Item) - 用户→用户→物品

示例

  1. 找与目标用户相似的用户群体
  2. 找这些相似用户喜欢的物品
  3. 推荐这些物品

原理:协同过滤的核心思想,也称"找朋友看他们喜欢什么"

优势:挖掘潜在兴趣,推荐新颖内容

4.5 u2tag2i (User → Tag → Item) - 用户→标签→物品

示例

  1. 提取用户的兴趣标签
  2. 找带有这些标签的物品
  3. 推荐这些物品

优势:可解释性强,便于运营干预

5. Netflix 经典推荐系统架构

Netflix 是推荐系统的先驱,其架构演进代表了推荐系统技术的最佳实践。

5.1 核心挑战

推荐系统架构需要同时满足两个看似矛盾的要求:

  1. 处理海量数据:每天处理亿万级别的用户行为和物品信息
  2. 实时响应:毫秒级响应用户请求

5.2 架构演进历程

Netflix 的推荐系统经历了从单一引擎到分层架构的演进:

  • 早期:单一推荐引擎,所有计算都在线完成
  • 中期:召回与排序分离,提高效率
  • 成熟:实时与离线计算结合,三层架构

5.3 三层架构详解

5.3.1 在线层(Online)

职责:实时响应用户请求

流程

  1. 接收用户请求(用户ID、上下文信息)
  2. 调用召回服务获取候选集(如 1000 个物品)
  3. 排序模型对候选集打分重排
  4. 返回 Top N 推荐结果

要求

  • 毫秒级响应(< 100ms)
  • 高并发处理能力
  • 熔断降级机制

技术栈

  • 语言:Java / Go
  • 缓存:Redis
  • 模型:TensorFlow Serving / ONNX Runtime

5.3.2 离线层(Offline)

职责:批量处理数据,训练模型

任务

  1. 批量处理用户行为数据(每天/每小时)
  2. 训练推荐模型(协同过滤、深度学习等)
  3. 计算物品相似度矩阵
  4. 生成用户画像

调度

  • 离线计算:Spark Batch / Hive
  • 模型训练:TensorFlow / PyTorch
  • 调度工具:Airflow / Azkaban

5.3.3 近线层(Nearline)

职责:准实时更新,平衡实时性和准确性

任务

  1. 增量计算用户兴趣(分钟级)
  2. 召回结果预计算
  3. 缓存热点数据
  4. 更新用户画像

技术

  • 流式计算:Spark Streaming / Flink
  • 消息队列:Kafka
  • 近似计算:Bloom Filter / MinHash

5.4 经典算法应用

Netflix 在不同层使用了多种经典算法:

协同过滤(CF)

  • User-based CF:基于用户相似度
  • Item-based CF:基于物品相似度

矩阵分解(SVD)

  • 将用户-物品矩阵分解为用户矩阵和物品矩阵
  • 捕捉潜在特征

深度神经网络

  • Wide & Deep 模型
  • DeepFM 模型
  • 双塔模型(用于召回)

6. 推荐系统通用技术架构

基于 Netflix 等大厂实践,我们总结出一个通用的推荐系统技术架构:

6.1 数据层

数据源

  • 行为日志:Kafka / Flume
  • 物品内容数据:MySQL
  • 用户画像数据:HBase
  • 本地/HDFS 文件:历史数据备份

数据治理

  • 数据清洗:去除异常值、噪声
  • 数据标注:用户标签、物品标签
  • 特征工程:特征提取、特征转换

6.2 计算层

6.2.1 近线计算(Spark Streaming)

任务

  • 实时特征计算:实时生成用户特征向量
  • 实时召回:基于实时行为更新召回索引
  • 实时排序:部分排序模型实时更新

产出

  • 特征向量
  • 排序列表
  • 召回索引

6.2.2 离线计算(Spark Batch)

任务

  • 批量特征计算:全量特征工程
  • 批量召回:生成物品相似度矩阵
  • 热度榜单:计算热门物品
  • 模型训练:训练 CTR 预估模型

产出

  • 特征向量
  • 排序列表
  • 召回索引
  • 热度榜单
  • 预估模型(Spark MLlib / TensorFlow)

6.3 存储层

存储选型

  • Hive:建模存储,数据仓库
  • 预估模型:Spark MLlib 训练的模型
  • Redis
    • Item 内容数据缓存
    • 推荐结果缓存
    • 特征向量缓存

性能要求

  • 高吞吐量
  • 低延迟
  • 高可用性

6.4 在线服务层

核心组件

  • 召回服务:多路召回,合并去重
  • 排序服务:模型打分,生成排序结果
  • 过滤服务:过滤不符合规则的物品
  • 打散服务:保证推荐多样性
  • 分页服务:按页返回结果
  • 内容合并:获取物品详细信息

技术要求

  • 微服务架构
  • 负载均衡
  • 熔断降级
  • 监控告警

6.5 客户端层

多端支持

  • Android / iOS 客户端
  • TV 端
  • PC Web 端
  • 小程序

客户端功能

  • 本地 LRU 缓存:缓存推荐结果,减少请求
  • AB 测试分桶:实验分流
  • 兜底补足:服务超时或错误时,展示默认推荐

7. 总结

本章介绍了推荐系统的基本技术架构,包括:

  1. 为什么要学推荐系统:商业价值巨大,发展前景广阔
  2. 推荐系统的核心环节:数据→召回→排序→重排→展示→反馈
  3. 多种召回路径:i2i、u2i、u2i2i、u2u2i、u2tag2i
  4. Netflix 三层架构:在线层、离线层、近线层
  5. 通用技术架构:数据层、计算层、存储层、服务层、客户端层

下一章我们将深入探讨具体的推荐算法和技术细节,包括基于内容的推荐、协同过滤、多路召回融合、AB 测试等内容。


💡 学习建议

  • 理解架构比记住技术栈更重要
  • 实际项目中根据业务需求灵活调整架构
  • 关注性能瓶颈,选择合适的技术方案

MIT