第4章:推荐系统企业实战
本章进入真实企业场景,使用 Python、Spark、TensorFlow 等工具实现完整的推荐系统,涵盖矩阵分解、标签推荐、深度学习排序模型和在线 API 服务。
22. Python 使用 Spark ALS 矩阵分解实现电影推荐
核心思路
利用 PySpark 的 ALS(交替最小二乘法)进行矩阵分解,将用户-物品评分矩阵分解为用户向量和物品向量,从而实现个性化推荐。
实现步骤
- 读取数据:PySpark 读取 CSV 格式的评分数据(userId, movieId, rating, timestamp)
- 训练模型:使用 Spark ALS 进行矩阵分解,保存 item embedding 和 movie embedding
- 生成推荐:对于给定用户,计算可能最喜欢的 10 部电影
- 查询目标用户的 embedding
- 计算目标用户 embedding 与所有 movie embedding 的相似度
- 过滤已看过的电影,取 Top 10
关键代码流程
评分数据 → Spark ALS 训练 → 用户向量 + 物品向量 → 相似度计算 → 推荐列表23. Python 实现基于标签的推荐系统
什么是标签推荐
标签泛指分类、关键词、作者、标签等一切离散的内部特征。基于标签的推荐简单高效,是工业界常用的推荐方式。
实现思路
- 用户标签偏好统计:根据用户看过的内容列表,聚合统计出(用户、标签、频次)数据,得到每个用户最喜欢的标签
- 标签内容热度统计:根据用户看过的内容列表,聚合统计出(标签、内容、频次)数据,得到每个标签最热的内容
- 加权推荐:对每个用户,根据最喜欢的标签,取出标签的热榜、最新、人工推荐列表,加权得到最终推荐列表
推荐流程
用户行为 → 标签偏好统计 → 标签热榜 → 加权融合 → 推荐列表24. TensorFlow 2 实现双塔 DNN 排序模型
双塔模型架构
双塔模型(Two-Tower Model)是推荐系统中经典的排序模型架构,将用户和物品分别通过独立的神经网络编码为向量,再通过点积计算匹配分数。
实现步骤
- 读取数据:电影数据集,包括用户信息、电影信息、评分行为信息
- 搭建模型:使用 Keras 构建,核心组件包括:
- Embedding 层:将稀疏 ID 映射为稠密向量
- 多层全连接网络:提取高阶特征
- 点积层:计算用户和物品的匹配度
- 模型应用:
- 在线预估:保存模型用于在线 predict 预估
- 召回:导出 embedding 用于向量召回
架构示意
用户特征 → Embedding → DNN → 用户向量 ─┐
├─ 点积 → 匹配分数
物品特征 → Embedding → DNN → 物品向量 ─┘25. TensorFlow 使用 LR、GBDT 和 DNN 实现二分类排序算法
背景
使用葡萄牙银行营销数据集(电话营销活动记录),对比不同排序算法的效果。
实现步骤
- 数据导入:用 Pandas 导入 CSV 文件
- 数据处理:用
tf.data.Dataset读取数据,进行分批(batch)、随机排序(shuffle)处理 - 特征映射:用
feature_column将 CSV 中的列映射到模型特征 - 模型训练与对比:分别训练 LR(逻辑回归)、GBDT(梯度提升树)、DNN(深度神经网络),对比 AUC 指标
算法对比
| 算法 | 特点 | 适用场景 |
|---|---|---|
| LR | 简单高效,可解释性强 | 基线模型、快速迭代 |
| GBDT | 自动特征组合,非线性能力强 | 中小规模特征 |
| DNN | 强大的拟合能力 | 大规模稀疏特征 |
26. Python 使用 Flask 实现推荐系统在线 API
API 接口设计
Flask 提供以下接口服务:
基于用户 ID 的接口
- 获取用户的 embedding
- 获取用户看过的 ID 列表
- 猜你喜欢的电影列表(电影 ID、电影名称、电影详情)
基于电影 ID 的接口
- 获取电影的 embedding、电影 ID、电影名称
- 获取相关推荐列表(相似电影)
在线服务架构
前端请求 → Flask API → 查询 Embedding/缓存 → 计算推荐 → 返回结果小结
本章通过 5 个实战项目,覆盖了推荐系统的核心工程环节:
| 项目 | 技术 | 解决的问题 |
|---|---|---|
| Spark ALS 电影推荐 | PySpark、矩阵分解 | 个性化推荐 |
| 标签推荐系统 | Python、标签统计 | 简单高效的推荐 |
| 双塔 DNN 排序模型 | TensorFlow 2、Keras | 精排打分 |
| LR/GBDT/DNN 对比 | TensorFlow | 排序算法选型 |
| Flask 在线 API | Flask | 推荐服务上线 |
下一章
第5章:技能提升和总结 — 推荐系统进阶学习路径与落地步骤