推荐算法基础面试题:协同过滤、矩阵分解、FM/FFM 等
本章聚焦推荐算法面试中最高频的基础题型。你需要掌握三类算法的核心原理、适用场景与关键局限,并能清晰对比其差异。面试官常通过追问串连知识点(如:“协同过滤冷启动怎么解决?” → “矩阵分解为什么能缓解?” → “FM怎么处理高维稀疏特征?”)。下面提供回答框架与追问路径,帮助你在面试中层层递进、逻辑严密。
本章核心策略:回答推荐算法基础题时,遵循“定义→原理→优缺点→场景→扩展”的五步框架;遇到追问时,展示知识串联能力(如从CF说到FM再到深度模型)。
🟢 面试问题 1:请解释协同过滤算法的原理及其优缺点。
面试官考察点
- 是否真正理解协同过滤的“协同”含义
- 能否清晰区分 UserCF 和 ItemCF
- 对冷启动、稀疏性等缺点的认知深度
回答框架
- 一句话定义(利用群体行为进行推荐)
- 分类:基于用户(UserCF)和基于物品(ItemCF)
- 相似度计算方式(余弦/Jaccard/皮尔逊)
- 优点:无需内容特征、领域无关
- 缺点:冷启动、数据稀疏、扩展性
- 实际案例(如 Amazon 用 ItemCF)
简短示例回答
协同过滤通过统计用户历史行为计算相似度。UserCF 找兴趣相似的用户,ItemCF 找物品间的关联。优点是不需要物品内容特征;缺点是冷启动严重、评分矩阵稀疏。亚马逊早期大量使用 ItemCF 做“购买此商品的用户也买了”。
可能追问
- 如何冷启一个新用户/新物品?
- UserCF 和 ItemCF 分别在什么业务场景下更好?
- 相似度计算有哪几种?哪种效果更好?
避坑提醒:不要只讲概念不提实际应用;注意区分基于邻域的 CF 和基于模型的 CF(矩阵分解等),面试官可能会接着追问后者。
🟢 面试问题 2:矩阵分解(如 SVD、ALS)是如何解决协同过滤的稀疏性问题的?
面试官考察点
- 对隐语义模型的理解是否准确
- SVD 与 ALS 的区别及适用条件
- 能否解释矩阵分解为什么能“补全”缺失值
回答框架
- 指出协同过滤的稀疏痛点
- 矩阵分解思想:R ≈ P·QT
- 优化方法:SGD / ALS 交替最小二乘
- 优势:泛化能力强、缓解稀疏
- 局限:可解释性差、依赖评分
简短示例回答
矩阵分解将用户-物品评分矩阵分解为用户隐向量和物品隐向量,用低维表示拟合原矩阵。通过 ALS 或 SGD 学习参数后,能预测未交互的评分,从而缓解稀疏。著名的 Netflix Prize 就是用了 SVD 改进模型。
可能追问
- SVD 和 SVD++ 的区别?(SVD++ 加入用户历史行为偏置)
- 如何处理隐式反馈(如点击)?
- ALS 相比 SGD 有什么优势?(适合并行、处理缺失值友好)
避坑提醒:不要混淆 SVD 和特征值分解;注意说明矩阵分解的假设是线性隐含因子,面试官可能继续追问非线性模型。
🟢 面试问题 3:FM(因子分解机)与 FFM(场感知因子分解机)的区别是什么?为什么 FM 能处理高维稀疏特征?
面试官考察点
- 对特征交叉工程的理解深度
- 是否清楚 FM 与 FFM 在参数量和计算上的差异
- 能否解释 FM 解决稀疏交叉的数学原理
回答框架
- FM 核心:为每个特征学习隐向量,自动做二阶交叉
- FFM 改进:每个特征针对不同“场”学习不同隐向量
- 区别:FFM 参数量约为 FM 的 (场数) 倍,计算量更大,但精度更高
- FM 能处理稀疏原因:隐向量在稀疏特征上共享统计信息
- 适用场景:CTR 预估、推荐排序
简短示例回答
FM 通过为每个特征学习一个隐向量,组合任意两个特征时只需点乘对应向量,在稀疏数据下仍能有效学习特征交互。FFM 进一步引入“场”概念,例如“城市”和“品类”属于不同场,每个特征针对不同场学习独立向量,精度提高但参数量激增。
可能追问
- FM 与 GBDT+LR 的优劣?
- FM 如何扩展到 DeepFM?
- FFM 的训练为什么比 FM 慢很多?
避坑提醒:不要把 FFM 的参数量简单记为“场数倍”,实际是 (特征数 × 场数 × 隐向量维度);注意说明 FM 可以处理连续特征,不仅限于离散特征。
📊 算法核心对比
| 维度 | 协同过滤 | 矩阵分解 | FM / FFM |
|---|---|---|---|
| 原理 | 基于邻居的相似度计算 | 隐向量分解评分矩阵 | 特征交叉 + 隐向量 |
| 处理稀疏性 | 差(依赖共现) | 较好(隐向量泛化) | 很好(向量共享统计) |
| 可解释性 | 高(可解释推荐理由) | 低 | 中(可看特征权重) |
| 冷启动 | 严重 | 略好(可利用物品属性) | 较好(加入特征后缓解) |
| 典型应用 | 电商、视频(ItemCF) | 评分预测、TopN 推荐 | CTR 预估、广告排序 |
💡 面试加分点:在回答算法基础题时,主动提及“该算法的变体”或“与后续模型的关联”,例如说完 FM 后补充“DeepFM 就是 FM + DNN,解决高阶特征交叉”。这种知识图谱式的表达会让面试官觉得你体系化扎实。