Spotify利用语义ID技术将7.5亿用户的偏好转化为语言模型能理解的Token,将乐库和你的历史行为融合进一个统一模型,从而实现神准的个性化推荐。
👤 WHO: Shiobam是Spotify人工智能基础架构部门中用户表征团队的技术负责人
🎯 WHAT: 讲述了Spotify如何在LLMs时代做个性化推荐,从多步骤流水线转向统一模型来理解用户和内容
⏰ WHEN: 当前及未来,且“下一集”功能已经投入生产使用
🌐 WHERE: Spotify平台,涵盖7.5亿用户、1亿首曲库及35万本有声书的推荐场景
❓ WHY: 因为传统推荐系统难以处理海量数据,而这种方法能将内容压缩为语义ID,实现真正的全平台个性化
🔧 HOW: 通过向量嵌入理解用户,用词元化方法把用户投射到LLMs空间中,模型因拥有用户上下文而变得个性化
💡 SO WHAT: 你听到的“下一集”播客或首页推荐,背后都是基于这种统一模型算出来的,推荐精准度会继续提升
“这些是我们以为了这是中心不可致冷的关键方面件未来的中心的基础的用户模型” —— Shiobam
“它之所以突破传统方法,在当前的商业执行中是不寻常的。关于这部分的错乱,我当时并不允许做出更关键影响的支持。” —— Shiobam
准时开始。大家好,我是Shiobam,来自Spotify。今天我的演讲主题是Spotify如何实现个性化推荐,尤其是在LLMs时代。在座各位有使用Spotify的吗?请举手。很好,感谢大家使用Spotify。今天的分享与传统agentic意义上的上下文工程不同,会更侧重于我们在模型构建中如何应用上下文工程。如果你对Spotify应用的工作原理、我们如何推荐歌曲、节目等内容感兴趣,这场演讲将帮助你理解我们如何利用你的数据,为你推荐你喜欢的内容。
嗯,简单介绍一下我自己。我是Spotify人工智能基础架构部门中用户表征团队的技术负责人。这个团队负责构建支撑Spotify整个推荐系统的基础前沿模型,包括用户表征、内容表征,以及适配开源权重模型等工作。我们涉及对比预训练、监督微调等前沿实验室和竞争对手都在做的技术方向,致力于为用户打造最优的音乐推荐系统。我的专业背景是机器学习工程师,曾在Twitter工作,目前居住在伦敦。
所以,如果你有空一起喝杯咖啡聊聊,我很乐意在演讲结束后,或者平时聊聊这些内容,因为这真的很酷。今天我要讲三件事。第一件事是关于基础用户建模。这是什么?本质上就是我们试图理解你,也就是用户。这些是我们认为在LLMs时代个性化未来中非常关键的三个核心方面。首先是用户建模部分。然后是内容方面。也就是如何让LLMs了解你拥有的内容,比如你在Spotify或其他平台上的目录。
最后一步,当你拥有这两块拼图后,需要将它们整合成可操控且个性化的系统。要尽可能实现可操控性——关于这点我稍后会详细说明。大体上,你可以理解为从动作序列到向量的转化过程。获得向量后,就能生成token;有了token,就能将向量和token与你已有的LLM结合,最终形成一条尽可能个性化的处理流水线。
嗯,简单介绍一下Spotify。对于还没用过的人,我们现在大约有7.5亿用户,曲库超过1亿首。目前大概有35万本有声书,实际上可能接近40万本,还有数百万个播客以及大量视频内容。越来越多的创作者开始转向视频形式,我们也在全力支持这种转变。业务覆盖约184个市场。正如大家所见,我们拥有庞大的用户群、海量数据和内容。那么问题来了:如何整合所有这些资源,为用户打造尽可能实用的产品?
嗯,我们的做法是,显然我们已经使用机器学习模型至少十年了,甚至更久。你可能听说过“发现每周”之类的功能,或者你很可能就是它的用户。这个功能大概从2015年就有了,当时我还在读研究生。那时候对我来说,这就像是我当时使用的文本堆栈中交互最酷的产品之一,因为它完全是为你量身定制的,而且还在不断变化。在过去的十年左右,我们在应用中加入了越来越多的个性化和产品功能。所以我们有各种垂直领域,也有许多新的产品界面。
我们推出了一个叫AI DJ的功能,你可以和它对话,它会推荐内容或播放音乐。此外还有提示歌单功能,你可以像使用Spotify模型那样输入提示词,系统会根据你的需求自动生成定制歌单。从本周开始,这个功能还支持播客了。如果你愿意,只需输入提示词,它就能根据你的需求为你创建一集集播客节目。这就是我们正在迈向的未来——用户拥有更强的操控性。用户可以用自然语言与Spotify对话,现在我们又推出了"品味档案"功能。
目前这项功能仅在少数市场推出,但今年晚些时候会逐步扩展。其核心理念是:我们想向用户展示我们掌握的关于你的信息,然后由你自主决定哪些信息需要我们保留,哪些需要遗忘。简而言之,就是尽可能赋予你最大程度的控制权。在此过程中,我想为不熟悉推荐系统和机器学习领域的各位补充一些背景知识。我们称之为"Tradex"的架构——直到几年前还是构建推荐系统的主流范式——本质上是一个多步骤的流水线系统,需要处理海量的商品目录。
嗯,这个候选生成步骤会把物品空间从数百万缩小到几百个,然后进入排序阶段,有时会有多个排序器进一步筛选,最终生成推荐给你的最终列表,比如你想推荐的热门歌曲。我们在不同产品中都用了这个流程,比如首页推荐排序、个性化歌单、搜索、播客、广告等等。通常每个产品都有自己的团队和独立模型,所以这些工作分散在不同团队中,有些模型表现更好,有些则使用不同的特征。
所以我们正在从那种孤立的模式转向这种统一的模型,类似于 LLMs 的工作方式,它支持像 LLM 这样的主干结构,允许你——也就是用户——引导它朝着你想要的推荐方向前进。嗯,其中一个关键组成部分是用户建模部分。这就是我和我的团队所负责的工作,我们构建用户嵌入,这些嵌入本质上是向量表示,能够告诉 Spotify 用户在所有历史数据中的品味,包括你多年来与我们的各种会话记录。
嗯,这就像是所有下游模型的基础,这些模型实际上用于推荐内容或支持搜索功能。这些模型非常复杂。嵌入模型需要为超过十亿用户生成嵌入向量,因为我们整体上拥有大量用户,包括月活跃用户和非月活跃用户。我们每天都要执行这个操作,所以这就像一条庞大的流水线,成本非常高昂。
多年来,我们逐渐摆脱了那种通用的用户表征方式——这在机器学习领域曾是主流范式。比如我们团队去年发表的一篇论文中,就公开讨论过我们使用的用户嵌入模型。当时那本质上是一个自编码器模型。如果你了解这个模型的话,它的原理是:获取你的所有特征,将其压缩成一个小型向量,再从这个向量重建你的特征。这种压缩-解压过程能让模型学习用户特征,最终以向量形式表征用户交互行为。
所以这是相当标准的内容,很多从事自然语言处理和计算机视觉领域的人也会做类似的事情,这也与过去的做法和推荐系统的方式一致。嗯,我们正在逐渐摆脱这种方式,转向基础建模的方向。现在我们有了这种单一的序列模型,正如你所看到的,整个行业都在向transformers迈进,这种转变不仅发生在常规的科技行业,也包括那些使用推荐系统并以构建推荐系统为主要业务的公司。嗯,我们也是其中之一,我们也在转向使用transformers来处理这类事情。
其核心理念在于,将用户交互行为作为提示的一部分。这类似于我们讨论上下文工程时所指的上下文。此外,显然还有请求上下文,包括查询内容、产品界面等所有要素,以及你正在推荐的项目。当你整合所有这些信息,加入类似transformer的层结构和多个注意力头,并在数百万乃至数亿用户数据上进行训练后,最终会得到非常酷的结果——就像这样。
U 所以这是一张来自我们较新模型的图片,它展示的是模型所学内容的压缩版本。在这个例子中,蓝色代表曲目,粉色代表播客剧集,而绿色则是用户。其中绿色的那个是我,其他绿色点则是团队里的其他成员。这大致展示了我们正在进行的跨内容建模——将用户、曲目和剧集嵌入到相同的内容空间,或者说嵌入空间中。
嗯,你能够通过这个图像直观地看到,比如在超球面上,你与不同内容共存,哪些内容离你近,哪些离你远,以及你如何探索这个邻域,还有你所在的位置如何被你朋友的位置等因素所影响。这其实是一种模型学习内容的可视化呈现。比如对我来说,我是一名机器学习工程师,我非常关注Anthropic的动态以及科技行业的最新进展。所以我的特定嵌入向量非常接近这个大型科技播客。
在右侧可以看到,那些线条扩散的点代表我,粉色的是用于曲目的流,蓝色的是用于剧集的流。哦,抱歉,我说反了。你可以直观地看到,无论你在听什么,或者没在听什么,都能将其置于上下文中,并了解用户的嵌入空间是什么样的。这些模型非常智能。一旦你向它们提供用户信息,它们就能学会将所有内容放入一个单一的空间,这真的很酷。接下来这部分更多是关于目录理解。既然我们已经有了用户,理解了用户,并为他们建立了模型。
我们如何理解目录呢?嗯,目录理解通常有几种方式。最常见的方法类似于用户侧的处理,比如训练一个向量来理解内容。也就是说,你会有一个代表项目的向量,无论是一首歌、一位艺术家、一个播客还是一集节目。嗯,你有了这个向量,同时还有一个用户向量。这就是所谓的Spotify知识,也就是我们对内容或我们处理的不同实体的了解。嗯,然后还有世界知识。这部分不是来自Spotify,而是来自我们正在使用的这些开源权重LLMs。
嗯,像Llama或Quen这样的模型,或者其他开源模型。我们做的是对这些模型进行fine-tune,然后通过某种方式将Spotify的知识嵌入到这些模型中——具体方法我稍后会讲到。这样做能带来可操控性,提供更优质的推荐,还能实现可解释性。使用语言模型进行推荐时,你会免费获得很多这样的好处。不过这里也存在权衡,比如模型最终会出现遗忘问题,灾难性遗忘就是一个典型问题。
嗯,但总体来看,根据我们的观察,这类模型非常擅长将世界知识与您平台上的各类信息相结合,构建出能全面用于推荐系统的内容。现在回到上一张幻灯片提到的内容——我们究竟如何让这些模型理解内容本身?先从这点说起。我们的方法是使用一种称为语义ID的技术。语义ID是个相对新颖的概念,我记得几年前有一篇来自YouTube的论文首次在推荐场景中引入了这个理念。
嗯,它的作用是,当你有一个代表某段内容的向量时——比如我们这里的一首曲目或一集节目——我们会像处理词语那样对其进行token化处理。这个过程会将一个庞大的向量(比如一千维)压缩成四到六个token。这样我们就能用这些token来训练LLM,就像通常训练LLMs那样。这使得LLM能够以自回归的方式生成下一个token——不过这里的下一个token不是词语,而是你接下来要听的下一首歌或下一集节目。嗯,这就是我们正在做的事情。
我们正在进行后期训练,或者说,我们是在利用Spotify拥有的关于音乐目录的数据,持续训练这些LLMs模型。
我们使用语义ID将向量压缩成语义ID。底部可以看到Ariana Grande和Bruno Mars的例子,我们用六个token来表示它们,这些数字实际上就是token的ID。前两个token是共享的,因为它们都是流行歌手,存在某些共同点;但其余的token则不同,因为这些token代表更细分的领域。这形成了一种层级结构,将嵌入信息压缩到这六个token中,并具有层级关系。这种结构使模型能够自回归地生成你接下来可能收听的歌手或歌曲。
嗯,这正好强调了我们的做法。我们使用了用户上下文,比如这里有一个意大利用户。他们的收听历史被标记化,我们将这些收听历史发送出去,并用于训练数据,从而教会模型如何用语义ID进行对话。这就是我之前在幻灯片中提到的领域适应。最终输出本质上是生成下一个项目,无论是下一集还是下一首曲目,比如这个人会听什么。举个例子,一个意大利用户可能会听一集意大利语播客。
嗯,这是我们提供给模型的一个提示示例。可以看到左侧的提示包含Spotify URI,这是我们用来表示项目(此处指单集)的标识符。我们将其转换为语义ID,即模型实际关注的token序列,最终用于预测用户接下来会收听的下一集。这就是目录理解部分。现在我们已经完成了用户建模和目录理解,下一步就是将这些组件整合起来,构建一个可操控的个性化生成推荐系统。
这其实是从传统的推荐系统模型转向生成式模型。这就是我提到的几周前推出的产品,叫做"品味档案"。它的核心理念是:通过一段文本描述来代表用户的身份特征。我们会向用户展示这段描述,然后你可以通过聊天、发送消息或添加文字的方式告诉Spotify,比如"我想多听些贾斯汀·比伯的歌",或者"我不喜欢这个被推荐的播客"。
这样一来,模型就能接收经过编辑或处理的数据,并将其反馈到生成模型中,从而提升模型理解用户、推荐更合适内容的能力。本质上,我们目前解决了内容层面的问题,但用户层面的问题尚未解决。用户层面的缺失源于这些模型仅基于有限训练数据训练——我们无法用超过7.5亿用户的数据逐一训练它们。因此需要某种协同过滤机制。模型有望实现一定程度的泛化,但同时也必须具备个性化能力。
嗯,我们实现这一目标的方法,还是要回到用户模型这个概念上。首先,你拥有用户表征。接下来要做的是,将用户表征投射到某个空间中。这样做可以在模型中创建所谓的软表征。这本质上是一种代表用户的表征,它会根据我们为其生成回复的用户而动态变化。这样一来,模型就能实现个性化。
这就像是拼图的最后一块,你有一个向量投影,就像常规的LLM,然后你有一个用户向量,它被投影到LLM的空间中,然后被插入到提示中。最后,当模型实际生成推荐时,模型是个性化的,因为它拥有关于你的上下文,也就是我们为其生成推荐的那个人。这些是我们早期的一些结果,我们在内部指标上看到了非常积极的结果。如果你使用Spotify,比如你使用“下一集”功能,或者你在Spotify上收听播客,这实际上已经投入生产了。
所以,当你收到推荐时,它正是基于这样的机制。这可以说是最后的关键环节。我们拥有代表用户的嵌入向量,代表内容压缩版本的语义ID,以及这种软token化方法——它能将用户投射到模型的token空间中。这种方法突破了传统推荐系统的框架,转向了序列化建模体系。这正是我们非常兴奋的方向,随着我们逐步将这种技术全面融入现有的推荐系统,未来必将带来更多突破性的进展。
嗯,我们非常期待很快就能推出这个。好的,我的发言就到这里。很高兴能和大家交流,如果各位有任何问题,欢迎在演讲结束后随时联系我。