点开一部片子之前,平台的 AI 已经算好了你可能给几分。它没读过剧本,也没分析过预告片,依据只是一句很朴素的话:和你口味相近的人,喜欢过这部。这条思路叫协同过滤,是推荐系统里资历最老、也最容易被低估的一类方法。下面讲清两种切法的差别、相似度怎么算、稀疏与冷启动为什么会把它卡住,以及它到底猜不到什么。
它用的是间接证据
内容推荐看的是物品属性:这部片是科幻、有太空、评分 8.2,那就推给爱看科幻的人。协同过滤完全不碰属性,它只看行为矩阵——行是用户,列是物品,格子里是评分、点击或购买。
信息全在格子的相对位置上。两个用户在若干物品上给出接近的值,就认为他们相似;一个用户喜欢而另一个还没碰过的东西,就是候选推荐。它不需要知道「科幻」是什么,所以能发现「爱看硬科幻的人也爱看某类纪录片」这种靠内容标签拼不出来的关联。
比人还是比物,切法不同
同样是找相似,比较的对象一换,工程性质全变:
| 切法 | 比较谁 | 矩阵规模与计算时机 | 典型失效 |
|---|---|---|---|
| 基于用户 | 用户与用户 | 用户数平方,通常线上实时算或定期全量重算 | 兴趣漂移后旧邻居失效,邻居数量大时算不动 |
| 基于物品 | 物品与物品 | 物品数平方,通常远小于用户数,可离线预算 | 新品没有交互,相似度算不出来 |
| 矩阵分解 | 用户和物品各压成隐向量 | 参数量等于两侧数量乘维度 k,离线训练线上做内积 | k 太小压不住,太大失去泛化 |
| 基于内容 | 物品的属性标签 | 与用户量无关,建好索引即可 | 只能推出同质内容,跨品类关联出不来 |
前三行属于协同过滤家族,第四行是常被拿来对照的另一条路。电商和视频站点偏爱基于物品,因为物品关系稳定、能提前算好、线上只要查表;用户兴趣变化快的场景则更依赖基于用户。真实系统里这几类通常并存,各自出一批候选,再交给统一的排序层。
相似度怎么算,为什么常用余弦
用户向量的每一维是一个物品,取值是评分或是否交互。两个向量夹角越小,方向越一致。余弦的好处是对长度不敏感——一个打了五十部片的人和一个打了五部片的人,只要口味方向一致,相似度仍然高。想看清它和欧氏距离的分工,可以看余弦相似度与欧氏距离那篇。找最近的一批用户再让他们投票,本质上是KNN的思路,只是距离的定义换了。
有个隐含的坑:没交互的格子填 0,会被当成「不喜欢」。所以隐式反馈场景通常先做归一化,或者改用只看共同出现比例的 Jaccard。评分场景里更常用皮尔逊相关系数,它先减掉每个用户的平均分,把「打分偏松」这个习惯性偏差去掉。
矩阵稀到百分之一,先塌在这里
一个电商平台的用户物品矩阵,密度常常不到百分之一。两个用户共同评过的物品可能只有一两个,这时候算出来的相似度基本是噪声——一个共同物品上的巧合,就能把相似度推到很高,于是推荐变成随机。
缓解手段有几类:设最小共同项阈值,低于阈值不参与计算;用矩阵分解把稀疏矩阵压成几十维隐向量,缺失的格子由内积补出来;或者换成物品基,因为物品之间的共同用户通常比用户之间的共同物品多。
阈值这一步看着粗糙,效果往往比换算法明显。原因很简单:把不可信的相似度剔掉,剩下的虽然少,但都是真的。
冷启动,新用户和新物品都进不来
新用户没有行为,算不出邻居;新物品没人交互,进不了任何人的候选集。这两个缺口是结构性的,调参解决不了。工程上的兜底通常是热门榜、地域或设备信息,加上少量探索流量。
探索这一环最容易被省。省掉的后果是新品永远拿不到曝光,也就永远攒不出交互,形成死循环。给新物品固定留一小份流量,短期看是浪费,长期看是维持候选池更新的必要成本。
越推越准,也越推越窄
推荐结果会影响用户行为,用户行为又反过来训练模型。热门物品被推得多,点击多,权重更高,下一轮推得更多。这个正反馈回路会让长尾物品彻底沉底,最终每个人的首页都长得差不多。它的机制和样本不均衡里多数类吃掉模型注意力是同一回事。
对策在排序之后:限制同一作者或同一类目的占比,给低曝光物品留固定配额,或者用 bandit 方法把一部分流量专门用于试探。这些做法都会让当期的点击率略微下降,换来的是长期的可推荐池不至于枯竭。
它猜的是行为,猜不到动机
输入只有「谁对什么做过什么」,所以它答不出「为什么推荐这个」之外的任何问题。它能说「因为你看过 A」,说不出「因为你最近在装修,所以推这个」——后者需要理解内容和场景。
一次性需求是它的盲区。买过婴儿床的人短期内不会再需要婴儿床,但协同过滤只看到「同类人群都买了」,还会继续推。要去掉这类推荐,得额外引入时间衰减和负反馈信号,光靠相似度矩阵不行。
它也没法跨领域迁移。把电商的相似度矩阵搬到短视频上,一格都用不了,因为用户和物品全换了。换场景就得重新攒行为,这是它最不灵活的地方,也是深度学习推荐模型想解决的起点。
速查:判断一个推荐系统是不是协同过滤
- 问它推荐理由,答「和你相似的人喜欢」就是
- 答「因为这部片有这些标签」,那是基于内容
- 看新物品多久能进推荐池,进不去就是协同过滤的冷启动
- 看首页是否越用越窄,是则说明缺探索机制


