协同过滤:让机器学会"物以类聚,人以群分"
引言
你有没有想过,Netflix 是怎么知道你可能喜欢哪部电影?豆瓣如何推荐你可能感兴趣的书?淘宝为什么总能猜中你想买什么?
这背后的核心技术之一就是协同过滤(Collaborative Filtering)。它是推荐系统中最经典、应用最广泛的算法之一。
今天我们通过一些生活化的例子,深入浅出地理解协同过滤的原理。
什么是协同过滤?
协同过滤的核心思想可以用一句话概括:
利用群体的智慧来进行推荐
具体来说,就是:
- 找到和你相似的人,把他们喜欢的东西推荐给你(基于用户的协同过滤)
- 找到和某个物品相似的物品,推荐给喜欢该物品的用户(基于物品的协同过滤)
让我们通过一个具体例子来理解。
例子1:豆瓣电影推荐
假设豆瓣有这样一个评分矩阵(5分制):
| 用户 | 肖申克的救赎 | 霸王别姬 | 阿甘正传 | 速度与激情 | 变形金刚 |
|---|---|---|---|---|---|
| 小明 | 5 | 5 | 4 | ? | ? |
| 小红 | 5 | 4 | 5 | 2 | 2 |
| 小刚 | 1 | 2 | 1 | 5 | 5 |
| 小丽 | 4 | 5 | 4 | 2 | 1 |
| 你 | 5 | ? | 5 | ? | ? |
现在问题来了:你应该去看《霸王别姬》吗?
基于用户的协同过滤(User-Based CF)
思路:找到和你口味相似的人,看看他们的选择
- 计算用户相似度
你给《肖申克的救赎》打了5分,给《阿甘正传》打了5分。看看其他用户:
- 小明:肖申克5分,阿甘4分 → 口味很像!
- 小红:肖申克5分,阿甘5分 → 口味极其相似!
- 小刚:肖申克1分,阿甘1分 → 口味完全相反
- 小丽:肖申克4分,阿甘4分 → 口味比较像
- 利用相似用户的评分进行预测
小红和你最像,她给《霸王别姬》打了4分
小明也很像你,他给《霸王别姬》打了5分
小丽也比较像,她给了5分
预测:你可能会给《霸王别姬》打 4.5-5 分 → 强烈推荐!
同理,小红和小丽都不喜欢《速度与激情》和《变形金刚》(打了1-2分),所以也不推荐给你。
基于物品的协同过滤(Item-Based CF)
思路:找到和你已经喜欢的电影相似的其他电影
- 计算电影相似度
看看哪些电影经常被同样的人喜欢:
- 喜欢《肖申克的救赎》的人(小明、小红、小丽、你)也都喜欢《霸王别姬》和《阿甘正传》
- 这三部电影经常被同一群人高度评价 →它们是相似的
- 基于相似物品进行推荐
你喜欢《肖申克的救赎》和《阿甘正传》
《霸王别姬》和这两部电影很相似(都被文艺片爱好者喜欢)
预测:你应该也会喜欢《霸王别姬》→ 推荐!
例子2:淘宝商品推荐
让我们看一个更直观的购物场景。
| 用户 | iPhone | AirPods | MacBook | 小米手机 | 小米耳机 |
|---|---|---|---|---|---|
| 用户A | ✓ | ✓ | ✓ | ✗ | ✗ |
| 用户B | ✓ | ✓ | ✗ | ✗ | ✗ |
| 用户C | ✗ | ✗ | ✗ | ✓ | ✓ |
| 用户D | ✓ | ? | ✓ | ✗ | ✗ |
用户D买了iPhone和MacBook,但还没买AirPods。
用户视角(User-Based)
- 用户D和用户A很相似(都买了iPhone和MacBook)
- 用户A买了AirPods
- 推荐:你可能也需要AirPods!
物品视角(Item-Based)
- 买iPhone的人中,60%也买了AirPods
- 买MacBook的人中,66%也买了AirPods
- iPhone、MacBook、AirPods经常一起被购买 →它们是相似的(同属苹果生态)
- 推荐:既然你已经有了iPhone和MacBook,考虑一下AirPods吧!
协同过滤的数学原理
虽然概念简单,但实际计算需要一些数学。
相似度计算
最常用的是余弦相似度:
用户A的评分向量:[5, 5, 4, ?, ?] 用户B的评分向量:[5, 4, 5, 2, 2] 余弦相似度 = cos(θ) = (A·B) / (|A| × |B|)直观理解:两个向量的方向越接近,相似度越高。
评分预测
预测用户u对物品i的评分:
预测评分 = 用户u的平均分 + Σ(相似用户的评分差异 × 相似度) / Σ(相似度)协同过滤的两种形式对比
| 维度 | 基于用户(User-Based) | 基于物品(Item-Based) |
|---|---|---|
| 核心思想 | 找相似的人 | 找相似的物品 |
| 适用场景 | 用户数 < 物品数 | 物品数 < 用户数 |
| 计算复杂度 | 用户多时计算量大 | 物品多时计算量大 |
| 实时性 | 用户相似度变化快 | 物品相似度相对稳定 |
| 可解释性 | “和你相似的人也喜欢…” | “喜欢A的人也喜欢B” |
| 典型应用 | 社交网络、新闻推荐 | 电商、视频、音乐 |
真实案例
Amazon 的"买了又买"
购买了《Python编程》的用户还购买了: - 《算法导论》 - 《深度学习》 - 《机器学习实战》这就是典型的基于物品的协同过滤。Amazon 发现这些书经常被同一群人购买,说明它们相似(都是编程/AI相关)。
Netflix 的电影推荐
Netflix 早期采用协同过滤赢得了著名的 Netflix Prize 竞赛。他们发现:
喜欢《老友记》的用户通常也喜欢: - 《生活大爆炸》 - 《摩登家庭》 - 《破产姐妹》为什么?因为这些剧都是情景喜剧,有相似的受众群体。
网易云音乐的每日推荐
你最近听了很多周杰伦、林俊杰、薛之谦 → 系统发现听这些歌手的用户也经常听毛不易 → 推荐:毛不易的《消愁》协同过滤的优缺点
优点
- 简单直观:逻辑清晰,易于理解和实现
- 无需领域知识:不需要了解物品的属性(导演、演员、风格等)
- 能发现意外惊喜:可能推荐你从未想过但实际会喜欢的东西
- 自动适应:随着用户行为变化自动调整
缺点
冷启动问题
- 新用户没有历史行为,无法找到相似用户
- 新物品没人评价,无法被推荐
场景:新注册的用户第一次打开APP 问题:没有任何历史数据,推荐什么? 解决:通常先推荐热门内容,或让用户选择兴趣标签稀疏性问题
- 用户数量和物品数量都很大
- 大部分用户只与极少数物品有交互
- 评分矩阵非常稀疏(99%的格子是空的)
淘宝有上亿商品,每个用户平均只买过几百个 → 很难找到足够的"共同评价"来计算相似度长尾问题
- 热门物品得到更多推荐机会
- 小众但优质的内容难以被发现
可扩展性问题
- 用户和物品数量增长时,计算复杂度急剧上升
- 需要优化算法或分布式计算
协同过滤的进化
1. 矩阵分解(Matrix Factorization)
将稀疏的评分矩阵分解为两个低维矩阵:
评分矩阵 (m×n) = 用户矩阵 (m×k) × 物品矩阵 (k×n) 其中 k << min(m,n),是隐含特征维度优势:
- 大幅减少计算量
- 能处理稀疏数据
- Netflix Prize 的获胜方法
2. 深度学习方法
用神经网络学习用户和物品的embedding:
用户特征 → 神经网络 → 用户向量 物品特征 → 神经网络 → 物品向量 预测评分 = 用户向量 · 物品向量优势:
- 能融合更多特征(用户年龄、物品类别等)
- 表达能力更强
- YouTube、阿里等大厂的主流方案
3. 混合推荐
将协同过滤与其他方法结合:
最终推荐 = 协同过滤 + 内容推荐 + 热门推荐 + 规则约束实际应用时的工程考虑
1. 离线计算 + 在线查询
离线阶段(每天凌晨): - 计算所有用户相似度 / 物品相似度 - 预生成推荐列表 - 存入缓存(Redis) 在线阶段(用户访问时): - 直接从缓存读取 - 毫秒级响应2. 增量更新
不用每次都重新计算全量数据 只更新有新行为的用户/物品相关的部分3. 近似计算
不需要计算所有用户对,只计算Top-K相似用户 使用LSH(局部敏感哈希)等技术加速相似度计算一个完整的例子:实现简单的协同过滤
假设我们要为一个音乐APP实现推荐:
# 用户-歌曲评分矩阵(简化版)ratings={'小明':{'周杰伦-稻香':5,'林俊杰-江南':4,'薛之谦-演员':3},'小红':{'周杰伦-稻香':5,'林俊杰-江南':5,'五月天-倔强':4},'小刚':{'薛之谦-演员':5,'毛不易-消愁':5,'五月天-倔强':2},'小丽':{'周杰伦-稻香':4,'林俊杰-江南':4,'毛不易-消愁':2},}# 对于一个新用户,他听了:new_user={'周杰伦-稻香':5,'林俊杰-江南':5}# 基于用户的协同过滤推荐流程:1.计算新用户与所有用户的相似度-与小明:相似度0.95(都喜欢周杰伦和林俊杰)-与小红:相似度0.98(口味几乎一致!)-与小刚:相似度0.1(口味差异大)-与小丽:相似度0.9(比较相似)2.找相似用户喜欢但新用户没听过的歌-小红(最相似)喜欢:五月天-倔强(4分)-小明喜欢:薛之谦-演员(3分)3.推荐列表: ✓ 五月天-倔强(优先推荐) ✓ 薛之谦-演员总结
协同过滤的本质是:
- 物以类聚:相似的物品会被相似的人喜欢
- 人以群分:相似的人会喜欢相似的东西
它不需要理解内容本身(歌曲的旋律、电影的情节),只需要观察人群的行为模式,就能做出惊人准确的推荐。
虽然协同过滤有冷启动、稀疏性等问题,但它依然是现代推荐系统的基石。从Amazon的商品推荐到Netflix的电影推荐,从淘宝的"猜你喜欢"到网易云音乐的每日推荐,协同过滤的思想无处不在。
在实际应用中,工程师们会将协同过滤与深度学习、知识图谱等技术结合,构建更强大的推荐系统。但万变不离其宗,理解协同过滤的核心思想,是理解现代推荐系统的第一步。
下次当你看到"猜你喜欢"时,不妨想想:这背后是哪些和你相似的人,为你做出了这个推荐呢?
后记
2026年7月18日于上海,在claude opus 4.8辅助下完成。