协同过滤:让机器学会“物以类聚,人以群分“
协同过滤让机器学会物以类聚人以群分引言你有没有想过Netflix 是怎么知道你可能喜欢哪部电影豆瓣如何推荐你可能感兴趣的书淘宝为什么总能猜中你想买什么这背后的核心技术之一就是协同过滤Collaborative Filtering。它是推荐系统中最经典、应用最广泛的算法之一。今天我们通过一些生活化的例子深入浅出地理解协同过滤的原理。什么是协同过滤协同过滤的核心思想可以用一句话概括利用群体的智慧来进行推荐具体来说就是找到和你相似的人把他们喜欢的东西推荐给你基于用户的协同过滤找到和某个物品相似的物品推荐给喜欢该物品的用户基于物品的协同过滤让我们通过一个具体例子来理解。例子1豆瓣电影推荐假设豆瓣有这样一个评分矩阵5分制用户肖申克的救赎霸王别姬阿甘正传速度与激情变形金刚小明554??小红54522小刚12155小丽45421你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淘宝商品推荐让我们看一个更直观的购物场景。用户iPhoneAirPodsMacBook小米手机小米耳机用户A✓✓✓✗✗用户B✓✓✗✗✗用户C✗✗✗✓✓用户D✓?✓✗✗用户D买了iPhone和MacBook但还没买AirPods。用户视角User-Based用户D和用户A很相似都买了iPhone和MacBook用户A买了AirPods推荐你可能也需要AirPods物品视角Item-Based买iPhone的人中60%也买了AirPods买MacBook的人中66%也买了AirPodsiPhone、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辅助下完成。