第一章 从唱片店到信息流:推荐系统的诞生故事
1992年的西雅图,深秋的雨总是裹着太平洋的湿气,把“锈钉唱片”的落地窗蒙上一层薄薄的水雾。店主老乔·米勒正把刚从进货箱里拿出的涅槃乐队(Nirvana)最新单曲摆到收银台旁边的“本周推荐”架上,门铃叮咚一响,穿校服的高中生艾米抱着半旧的CD盒冲进来,裤脚沾着隔壁中学操场的泥点。她要找一首“和上周借马克的磁带里一样,吉他有点噪,但副歌不吵”的后朋克唱片——在那个没有搜索引擎、没有流媒体平台的年代,这种模糊的需求只能靠人的经验来匹配。老乔没翻目录,直接从身后的架子上抽出一张Sonic Youth的《Daydream Nation》,封套边角还留着上次客人摸过的磨损痕迹:“上周马克来买The Cure的时候提过,你上周在他家放的《Schizophrenia》和这张的吉他线条几乎一样,而且你上次吐槽过太多后朋克唱得太尖,这张的人声更沉,应该合你胃口。”艾米眼睛一下子亮了,这正是她找了半个月没找到的声音。
<!-- 纸书注:此处可配1992年西雅图锈钉唱片店的黑白插画,展现老乔给顾客递唱片的场景 --> > 📌 电子版侧边栏:老乔的“推荐算法”运行了8年,他的“用户数据库”是脑子里记着的300多个熟客的听歌偏好,“物品关联库”是他听过的上万张唱片的风格标签,这种靠个人经验匹配供需的模式,就是推荐系统最原始的形态。
那时候没人把老乔的行为叫做“推荐”,大家只会说“这家店的老板懂行”。但在30年后的今天,类似的行为已经被封装成了复杂的算法,每天在全球数十亿人的手机、电脑上运行,决定你刷到的下一条短视频、买到的下一件商品、看到的下一篇文章——它就是推荐系统(Recommendation System),数字世界的选品师。
一、推荐系统的诞生:不是技术人的自嗨,是信息过载的必然产物
很多人对推荐系统的第一印象是“算法投喂”“信息茧房”,但很少有人意识到:推荐系统的出现从来不是技术公司的刻意创造,而是互联网发展到一定阶段后,解决信息过载(Information Overload)问题的必然产物。
要理解这一点,我们得先回到互联网的 infancy 阶段。1993年,欧洲核子研究中心(CERN)正式向公众开放万维网(World Wide Web, WWW)技术,当年全球的网站总数只有130个,一个对互联网感兴趣的人花几个小时就能把所有网站的内容看完;到1995年,网站数量突破10万个,普通人已经不可能靠手动浏览找到自己需要的信息,搜索引擎(Search Engine)应运而生,谷歌(Google)就是在这个阶段崛起,靠“用户主动输入关键词找信息”的逻辑解决了“人找信息”的问题。
但搜索引擎有一个天然的缺陷:它只能满足用户“明确知道自己要找什么”的需求。如果你是一个从来没听过摇滚乐的人,你根本不知道“后朋克”是什么,搜出来的几百个乐队名字对你来说和乱码没有区别;如果你只是想打发下班回家的时间,你根本不知道自己要搜什么内容,搜索引擎帮不了你。而随着互联网内容的爆炸式增长,这种“模糊需求”的比例越来越高:到2024年,全球每天产生的数据量超过5ZB(1ZB等于1万亿GB),相当于每个人每天要处理100GB的信息,而人脑的信息处理速度每秒只有100比特,两者相差了10亿倍。在海量的内容面前,用户既没有时间也没有能力主动筛选,这时候就需要一种“信息找人”的工具——推荐系统就是在这个背景下诞生的。
早期的互联网公司其实早就尝到了“人工选品”的甜头。1994年,亚马逊(Amazon)还在卖图书的时候,就上线了“Customers Who Bought This Item Also Bought”(购买此商品的用户也购买了)的功能,这个功能的逻辑非常简单:统计所有用户的购买记录,找出和当前商品经常被一起购买的其他商品,推荐给用户。这个功能上线后,亚马逊的交叉销售额直接提升了30%,相当于每年多赚几亿美元。但当时这个功能完全靠人工统计关联规则,亚马逊的运营团队每周要花几十个小时更新推荐列表,效率极低,而且只能覆盖热门商品,冷门商品根本没有关联数据。这种人工推荐的局限性,也推动了自动化推荐算法的研发。
二、协同过滤的诞生:把老乔的经验变成可运行的算法
1994年,明尼苏达大学的计算机系研究生约翰·瑞克(John Riedl)和保罗·雷瑟(Paul Resnick)带领的GroupLens项目组,发布了第一个基于算法的协同过滤(Collaborative Filtering)推荐系统,这也是推荐系统发展史上第一个被广泛认可的研究成果。
当时两人遇到的问题和30年后所有推荐系统的从业者遇到的问题一模一样:Usenet新闻组(互联网早期的公共论坛)每天会产生超过1000条新帖子,瑞克自己作为新闻组的重度用户,每天要花2个小时刷帖子,其中90%都是他不感兴趣的内容。他突发奇想:“能不能像老乔推荐唱片一样,给每个用户推他们可能感兴趣的帖子?”他把这个想法和雷瑟一说,两人一拍即合,开始了GroupLens项目。
他们的思路非常简单:如果两个用户给很多帖子的评分都很相似,说明这两个用户的偏好相似,那么一个用户喜欢的高分帖子,另一个用户很可能也喜欢。他们把用户的评分数据收集起来,计算用户之间的相似度,给每个用户推荐和他相似的用户喜欢的高分帖子。测试结果显示,使用这个系统的用户,找到感兴趣帖子的时间从原来的1小时降到了10分钟,满意度提升了27%——这个结果在当时引起了巨大的轰动,因为这是第一次证明:靠数据匹配的算法推荐,效果可以比人工推荐更好。
<!-- 纸书注:此处可配GroupLens项目的工作流程图,展现用户评分、计算相似度、推荐帖子的过程 --> ```mermaid graph TD A[用户对帖子评分] --> B[收集所有用户的评分数据] B --> C[计算用户之间的相似度] C --> D[找到和目标用户最相似的Top N用户] D --> E[推荐这些相似用户喜欢的高分帖子] E --> F[用户收到推荐结果] ```
协同过滤的核心逻辑其实和老乔推荐唱片的逻辑完全一致:老乔靠记忆熟客的偏好,找到和当前顾客相似的其他熟客,推荐他们喜欢的唱片,这就是基于用户的协同过滤(User-based Collaborative Filtering, UserCF);老乔也记得哪些唱片经常被一起购买,比如买涅槃的客人经常也买Sonic Youth,给买了涅槃的客人推荐Sonic Youth,这就是基于物品的协同过滤(Item-based Collaborative Filtering, ItemCF)。
两种算法各有优劣,适用的场景也不一样:
- **UserCF的核心逻辑是“人以群分”**:适合社交属性强、用户更新快的场景,比如小红书的笔记推荐、抖音的“可能感兴趣的人”推荐,因为用户的兴趣变化快,新用户多,UserCF能快速捕捉到新用户的兴趣标签。但它的缺点是计算量大,当用户量达到亿级的时候,计算所有用户之间的相似度会非常耗时,而且推荐的结果比较泛,不容易精准匹配用户的潜在需求。
- **ItemCF的核心逻辑是“物以类聚”**:适合物品更新慢、关联性稳定的场景,比如电商的商品推荐、视频平台的视频推荐,因为商品的关联性(比如买手机的人经常买手机壳)不会频繁变化,计算物品之间的相似度之后可以重复使用,效率极高。但它的缺点是推荐的结果比较局限,容易出现“你买了一个手机就天天给你推手机壳”的问题,不容易挖掘用户的新兴趣。
举个例子:你在淘宝上买了一个露营帐篷,ItemCF算法会发现90%买了这个帐篷的用户都买了露营灯、折叠椅,就会给你推荐这些商品;而UserCF算法会发现你和其他喜欢露营的用户相似,这些用户最近都在看“冬季露营攻略”,就会给你推荐冬季露营的装备。两种算法互补,现在的主流推荐系统都会同时用到两种逻辑。
三、工业界的爆发:Netflix百万美元竞赛把推荐系统推上风口
协同过滤的算法在学术界火了一段时间,但真正把它推到工业界风口浪尖的,是2006年Netflix(网飞)举办的百万美元推荐竞赛。
当时的Netflix刚刚开始做流媒体业务,但核心收入还是DVD租赁,他们的推荐算法是基于传统的协同过滤,用均方根误差(RMSE)来衡量推荐的准确率,当时的误差是1.13,也就是说用户给电影的评分和算法预测的评分平均差1.13分(满分5分),推荐的效果非常差,很多用户租了电影之后发现不符合自己的口味,就不再续费了。Netflix的算法团队研发了两年,把误差降到了0.95,只提升了不到2%,离他们设定的“提升10%准确率”的目标(也就是误差降到0.85以下)还差得很远。
2006年10月,Netflix公开宣布悬赏100万美元,全球任何团队只要能把自己的推荐算法的准确率提升10%以上,就能拿走奖金。这个公告一发出,立刻在全球的AI圈掀起了轩然大波:这是当时AI领域奖金最高的公开竞赛,没有之一。到2007年,参赛团队已经超过了4万个,包括来自斯坦福、麻省理工等顶尖高校的学术团队,还有来自谷歌、亚马逊等科技公司的工业界团队。
竞赛的过程非常曲折,很多团队一开始以为10%的提升很容易,但随着排名的提升,误差每降0.001都需要付出巨大的努力。到2009年,排名前三的团队的误差已经降到了0.86,离0.85的目标只有一步之遥。最终,由AT&T实验室、雅虎、贝尔实验室的工程师组成的BellKor团队,结合了矩阵分解(Matrix Factorization)、集成学习等多种方法,把误差降到了0.8567,超过了10%的提升门槛,拿走了百万美元奖金。
这个竞赛的影响远远超出了奖金本身:它第一次让全世界的科技公司意识到,推荐系统不是实验室里的玩具,是真的能提升用户体验、增加商业收入的实用技术。竞赛结束后,谷歌、亚马逊、Facebook等公司纷纷组建了自己的推荐算法团队,推荐系统从此成了互联网公司的标配。而竞赛中广泛使用的矩阵分解技术,也成了后来所有推荐系统的核心技术之一:之前的协同过滤用的是用户-物品的共现矩阵,当用户和物品的数量达到千万级甚至亿级的时候,共现矩阵会非常稀疏,计算效率极低;矩阵分解就是把高维的共现矩阵分解成两个低维的矩阵,一个是用户隐向量矩阵,一个是物品隐向量矩阵,每个用户和每个物品都用低维的向量表示,计算两个向量的余弦相似度就能得到推荐结果,大大提升了计算的效率和推荐的准确率。我们今天在推荐系统里看到的“用户嵌入”“物品嵌入”,其实就是矩阵分解的升级版。
> 📌 电子版侧边栏:截至2024年,Netflix百万美元推荐竞赛仍是AI领域影响力最大的公开竞赛之一,当年参赛的很多团队成员后来都成了全球科技公司的首席科学家,比如亚马逊的推荐算法负责人、字节跳动的推荐技术顾问,都曾是这个竞赛的参赛者。
四、深度学习时代:从“找相似”到“懂需求”
传统的协同过滤和矩阵分解有一个天然的缺陷:它们只能靠用户和物品的历史共现数据做推荐,既不能理解用户的真实需求,也不能挖掘用户的潜在兴趣。比如你买了一个奶粉,传统的推荐系统只会给你推其他买奶粉的人买的奶瓶、尿不湿,但不会给你推婴儿车、早教玩具,因为这些商品和奶粉的共现数据很少;再比如你说“我想找一个适合冬天带女朋友去的安静的小众咖啡馆”,传统的推荐系统根本理解不了这句话的含义,只能给你推你之前看过的咖啡馆。
这个缺陷在2010年之后随着深度学习(Deep Learning)的崛起被逐步解决。2016年,Google发布了Wide&Deep模型,这个模型是推荐系统从传统机器学习进化到深度学习的分水岭,也是至今为止所有主流推荐系统的基础架构。
Wide&Deep模型由两部分组成:
- **Wide部分(记忆层)**:是广义线性模型,负责记忆用户的历史行为,比如你经常买猫粮、经常看美食视频,Wide部分会把这些特征记下来,保证
下次你刷淘宝的时候,一打开首页就给你推你常买的那个牌子的猫粮,或者你上周看过的柳州螺蛳粉的优惠券——这就是Wide部分的记忆能力,专门负责处理你明确表现出过偏好的“老熟人”内容,推荐准确率极高,但缺点是永远不会给你推你没接触过的新东西,像个只会复读的老管家。
而Deep部分,也就是泛化层,是Wide&Deep的灵魂。它用的是深度神经网络(Deep Neural Network, DNN),能把用户所有的行为特征、物品的特征、场景的特征全部放到一个高维的向量空间里,找到那些你没说出口的潜在关联。比如你上周在抖音刷了10条“新手露营攻略”的视频,点赞了3条,收藏了1条,虽然你从来没搜过“婴儿车”,但Deep部分会把“看过露营攻略”“喜欢户外内容”“最近有出行需求”这些特征结合起来,推断出你可能最近要带家人去露营,需要婴儿车、儿童防晒衣这些你没主动搜过的商品,推给你——这就是泛化能力,像个懂心理的选品师,能猜到你没说出口的需求。
2016年Wide&Deep刚发布的时候,Google就用它重构了Play商店的推荐系统,结果应用的安装率直接提升了7%,这个数字看起来不大,但Play商店每天有超过1000万的安装量,7%的提升相当于每天多70万次安装,每年多给Google带来超过10亿美元的收入。这个效果直接让全世界的互联网公司都开始跟进Wide&Deep的架构,至今它仍然是推荐系统的基石,2023年的一项行业调研显示,全球Top100的互联网公司里,有76%的推荐系统仍然基于Wide&Deep的架构进行修改,它的稳定性、可解释性、落地难度都远优于后来的复杂深度学习模型。
<!-- 纸书注:此处可配Wide&Deep模型架构示意图,左侧为Wide记忆层,右侧为Deep泛化层,中间为特征输入 --> ```mermaid graph TD A[特征输入] --> B[Wide记忆层: 广义线性模型] A --> C[Deep泛化层: 深度神经网络] B --> D[输出推荐得分] C --> D D --> E[最终推荐结果] ```
工业界的落地:从实验室到亿万人的手机屏幕
算法在实验室里跑出好结果是一回事,真正落地到亿级用户的工业场景里是另一回事。推荐系统的真正爆发,是从互联网公司把它用到核心业务里开始的。
第一个把推荐系统用到核心业务并获得巨大成功的,是2007年上线的YouTube。当时的YouTube还是个小视频平台,用户上传的内容已经超过了1亿条,用户每天要花1个小时找感兴趣的视频,其中70%的时间都在翻无关内容。当时的推荐算法还是用的最基础的ItemCF,也就是“看过这个视频的人也看过那个视频”,推荐的结果非常局限,要么是推你已经看过的视频,要么是推完全无关的热门视频,用户的平均观看时长只有每天30分钟,广告收入也一直上不去。
2012年Google收购YouTube之后,立刻组建了百人规模的推荐算法团队,把Wide&Deep模型用到了YouTube的推荐系统里,同时加入了用户的历史观看记录、搜索记录、点赞收藏记录、视频的标签、分类、时长、上传时间等几百个特征,还首次把“观看时长”作为核心优化目标,而不是之前的“点击率”。结果上线之后,用户的平均观看时长直接提升了20%,达到了每天36分钟,这个提升相当于每年给YouTube多带来超过20亿美元的广告收入。直到今天,YouTube的推荐系统仍然是在Wide&Deep的基础上不断优化,加入了更多的特征和多任务学习的模块,它的推荐逻辑也成了所有视频平台的标杆。
> 📌 电子版侧边栏:2018年YouTube的算法团队公开过一组数据:他们的推荐系统每天要处理超过10亿次用户的观看行为,为全球20亿用户推荐内容,推荐系统给用户带来的观看时长占总观看时长的70%以上——也就是说,你刷YouTube看的10个视频里,有7个是推荐系统给你推的。
中国的推荐系统发展比美国晚了大概5年,但发展速度更快。2012年今日头条上线,是国内第一个把推荐系统作为核心功能的App,当时的今日头条只有几十个编辑,靠算法推荐给用户推新闻资讯,上线一年用户就突破了1亿,靠的就是推荐系统解决了用户“找不到自己感兴趣的新闻”的问题。2016年抖音上线,直接把推荐系统用到了短视频领域,靠“千人千面”的推荐逻辑,让每个用户打开抖音看到的都是自己感兴趣的内容,上线3年用户就突破了5亿,成了中国用户使用时长最长的App。
字节跳动的推荐算法团队是当时国内最顶尖的团队之一,很多成员都参加过2006年Netflix的百万美元竞赛,他们把竞赛里用的集成学习、矩阵分解等方法用到了抖音的推荐里,同时针对短视频的场景做了很多优化,比如加入了视频的完播率、点赞率、评论率、转发率等特征,把推荐的目标从“点击率”改成了“观看时长+互动率”,结果抖音的用户平均使用时长很快就超过了1小时,成了中国互联网历史上用户时长最高的产品。
多任务学习:从“猜你喜欢”到“懂你需要”
Wide&Deep虽然解决了传统协同过滤的泛化问题,但它仍然有一个核心缺陷:只有一个优化目标,也就是预测用户会不会点击这个内容。但用户对内容的需求是多元的:你可能点开一个美食视频,是因为你好奇怎么做,看完就划走;也可能是因为你想买对应的食材,看完就去电商平台搜;还可能是因为你特别喜欢,会点赞收藏转发。如果推荐系统只盯着“点击率”这一个目标,就会大量推标题党、封面夸张但内容质量差的内容,用户体验会越来越差。
举个例子:2018年之前,淘宝的推荐系统只有一个优化目标:点击率。结果那段时间很多用户吐槽淘宝的推荐“标题党严重”,点进去发现商品质量很差,投诉率上升了15%。后来淘宝的算法团队调整了优化目标,加入了转化率、好评率、退货率等指标,推荐的商品质量立刻提升了很多,用户的投诉率下降了20%。
为了解决单一目标的问题,2018年阿里的算法团队提出了MMOE(Multi-gate Mixture-of-Experts)模型,这是多任务学习(Multi-task Learning, MTL)在推荐系统里的典型应用。MMOE的核心逻辑是:同时训练多个任务,比如点击率预测、转化率预测、点赞率预测、收藏率预测、分享率预测,然后给每个任务分配不同的权重,最后综合所有任务的得分,给用户推荐内容。
用老乔的唱片店来类比:以前的推荐系统就像老乔只根据“顾客会不会买”来推荐唱片,结果他会给你推很多热门的、质量一般的口水歌,因为买的人多;而多任务学习就像老乔同时考虑“顾客会不会买”“顾客会不会喜欢”“顾客会不会推荐给朋友”“顾客会不会下次再来”,综合这些指标给你推荐真正适合你的唱片,哪怕这张唱片不是最热门的。
MMOE上线之后,淘宝的推荐转化率直接提升了15%,用户的投诉率(吐槽推荐不精准)下降了20%。现在几乎所有的主流推荐系统都用到了多任务学习的逻辑,比如抖音的推荐会同时优化“观看时长”“点赞率”“评论率”“转发率”“关注率”5个目标,给不同目标分配不同的权重,比如对于新用户,“关注率”的权重更高,目的是让新用户找到喜欢的内容,关注博主;对于老用户,“观看时长”的权重更高,目的是让老用户在平台里停留更长时间。