news 2026/10/6 22:17:52

Spotify 如何实现个性化有声书推荐

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spotify 如何实现个性化有声书推荐

原文:towardsdatascience.com/how-spotify-implemented-personalized-audiobook-recommendations-09386a93ace2

?

简介

Spotify 是全球最受欢迎的音乐流媒体应用。除了歌曲和专辑,Spotify 还拥有大量的播客和脱口秀节目。他们最近在应用中推出了有声书。像任何其他服务一样,Spotify 希望确保其有声书推荐能够满足用户的偏好。因此,他们开发了一个基于图神经网络推荐算法的个性化有声书推荐系统。

本文讨论了 Spotify 在提供个性化有声书推荐时面临的挑战以及为解决这些挑战所进行的探索性数据分析。它探讨了 Spotify 的创新解决方案:一个旨在增强有声书个性化的双塔图神经网络模型。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/4f06011303cc3498b5d42335eed17c85.png

图片由Jukka Aalho在Unsplash提供

挑战

由于有声书是 Spotify 内容库中的新加入项,他们面临了一些挑战——

  1. 由于内容类型是新生成的,存在数据稀缺问题。与其它内容类型相比,有声书的用户互动较少。许多用户甚至不知道 Spotify 上有有声书。

  2. 目前有声书仅对高级用户开放,但最初是以直销模式推出的,这意味着用户必须明确付费才能收听有声书。Spotify 可用于构建推荐系统的明确信号更加稀缺。

本文将探讨他们进行的探索性数据分析、模型架构、模型部署和模型评估。

探索性数据分析

Spotify 分析了用户已知的历史音乐和播客偏好以及播客与有声书之间的内容相似性。Spotify 的初步数据分析显示有声书与播客之间存在强烈的关联。用户与播客的互动对于理解有声书用户偏好非常有价值。例如,一本关于企业家传记的有声书与一位企业家嘉宾参与的播客有相似之处。他们观察到超过 70%的有声书用户之前曾与播客互动过。然而,25%的用户贡献了 75%的播放时长,而 20%的有声书贡献了 80%的播放时长,这表明数据稀缺。

Spotify 分析了其在平台上 90 天内的超过 8 亿个流。分析数据仅限于播客和有声书流。他们研究了用户之间的共同收听模式,并进行了嵌入分析。他们使用余弦相似度作为距离度量,并绘制了余弦相似度分布图。

<…/Images/f9f2e870519d47e67943568b9e57fd8b.png>

探索性数据分析。图片来源([1])

观察 1 – 有声书和播客偏好的相似性

Spotify 采样了 10000 对用户,这些用户至少共同收听了一本有声书(换句话说,共同收听),并随机采样了 10000 对用户。他们从他们的生产播客推荐模型中获取用户嵌入,以研究播客和有声书之间的相似性。

至少共同收听了一本有声书的用户,其播客嵌入相似度得分往往高于随机选择的用户(见图 2B)。这表明,与随机选择的用户相比,具有相似有声书口味的用户在播客偏好上更为相似。

观察 2 – 有声书内容很重要

Spotify 使用 Sentence-BERT 为所有有声书和播客生成内容嵌入。他们使用了诸如标题和描述这样的内容元数据。Spotify 随机采样了至少由一个用户共同收听的 10000 对有声书和 10000 对有声书。

共同收听的有声书对在它们的内容嵌入之间的余弦相似度比随机选择的有声书对更高(见图 2C)。

观察 3 – 播客互动将有助于理解有声书偏好

Spotify 构建了一个播客-有声书交互图。播客和有声书代表节点。如果至少有一个用户共同收听了它们,这些节点就会连接起来。他们采样了至少由一个播客连接的 10000 对有声书,并随机采样了 10000 对有声书。他们使用 Sentence-BERT 内容嵌入的余弦相似度进行了这一分析。

与随机选择的有声书相比,与同一播客共同收听的有声书具有更高的余弦相似度。

模型架构

Spotify 推出了一种 2T-HGNN 模型,该模型由异构图神经网络(HGNN)和双塔(2T)模型组成。这个模型是可扩展的(适用于实时服务)且模块化的,这意味着 HGNN 和 2T 可以独立使用,并适用于各种其他商业用例。

<…/Images/e51fd11ac36698965b3b65047639e9c5.png>

2T-HGNN 模型架构。图片来源([1])

异构图神经网络模型

Spotify 构建了一个由两种类型的节点组成的共听异构图:播客和有声书。如果至少有一个用户同时听过两者,则节点之间的边是连接的。因此,这个图包含了有声书-有声书、有声书-播客和播客-播客关系的信息。这些节点由 Sentence-BERT 内容嵌入表示,这些嵌入是从标题和描述等内容元数据中生成的。

  • HGNN 模型在所有三种关系上进行了训练,因为它包含比仅有声书互动更多的关于内容和用户偏好的信息。这解决了数据稀缺问题。

  • 这是一个具有 2 跳消息传递的 GraphSAGE 模型。例如,如图所示,如果有声书 A1 连接到播客 P1(1 跳关系),而播客 P1 连接到有声书 A4,那么这意味着有声书 A1 和播客 A4 在某种程度上是相关的(2 跳关系)。

  • GraphSAGE 通过从每个节点的局部邻域中采样和聚合嵌入来更新节点嵌入。对于每个节点,它采样一个固定数量的邻居,聚合它们在 2 跳内的嵌入,并将这些嵌入与节点的嵌入相结合。这使得 GraphSAGE 能够将嵌入推广到新的节点,从而解决冷启动问题。

HGNN 模型通过对比损失函数进行优化。损失函数旨在增加图中连接节点(正对样本)之间的余弦相似度,并减少未连接节点(负对样本)之间的余弦相似度。他们遍历图中的所有边来训练模型。他们在梯度下降优化的每一步中保留一个正对样本,并随机采样负对样本。

共听图是不平衡的。有声书-有声书互动比播客-播客互动少。由于有声书-有声书互动的稀缺,他们通过减少播客-播客互动来缓解不平衡,优先考虑主要目标(学习有声书偏好),并更好地训练模型。

双塔模型

双塔模型(2T)架构在推荐系统社区中获得了巨大的流行度。2T-HGNN 的双塔组件通过用户互动学习有声书和播客嵌入。2T 组件引入了用户个性化。2T 由两个深度神经网络组成,称为塔,一个用于用户表示,另一个用于增强有声书表示。

  • 用户塔接收诸如用户人口统计信息、用户的音乐偏好嵌入以及用户的有声书和播客偏好嵌入等输入。音乐嵌入是从 Spotify 的内部音乐推荐算法中获得的。有声书和播客偏好嵌入是通过取过去 90 天内用户与之互动的有声书和播客嵌入的平均聚合值来获得的。

  • 听书塔接收诸如有声书元数据(类型、语言)、标题和描述的 Sentence-BERT 内容嵌入以及 HGNN 嵌入等输入。

  • 2T 模型从每个塔中生成两个输出嵌入(用户嵌入和有声书嵌入)。

2T 模型使用对比损失函数进行训练,该函数试图在存在交互时将用户嵌入投影到有声书嵌入附近,在没有交互时将用户嵌入投影到有声书嵌入较远的位置。交互主要是像“流”这样的强信号。后来,Spotify 分析了各种弱信号,如“付费意图”、“关注”和“预览”,并将它们添加为 2T 模型训练的用户交互。

模型部署

2T-HGNN 每天进行训练。首先,训练 HGNN 模型。生成的有声书和播客嵌入随后传递给 2T 模型进行训练。2T 模型生成增强的有声书嵌入,存储在向量数据库中,用于近似最近邻匹配。在推理过程中,用户特征/嵌入通过 2T 的用户塔传递,以获得增强的用户嵌入。随后,在增强的用户嵌入和有声书索引之间进行向量相似度搜索,以获取用户的前 k 本有声书。

2T-HGNN 的模块化结构使得可以在不同于 2T 模型的时间表上训练 HGNN。例如,HGNN 可以每周训练一次以降低成本,而 2T 模型每天更新以保持用户表示的新鲜度。

模型评估

离线评估

该模型最初使用标准排名指标如 Hit-Rate@K、平均倒数排名和覆盖率进行离线评估。

  • Hit-Rate@K:此指标衡量至少有一个相关项目出现在前 K 个推荐项目中的用户比例。

  • 平均倒数排名 (MRR):此指标评估推荐列表中第一个相关项目的排名位置。它计算此项目的倒数排名(例如,第一位置为 1,第二位置为 0.5 等),并平均所有用户的此分数,以反映整体排名质量。

  • 覆盖率:此指标衡量所有用户推荐的项目的多样性。

<…/Images/cbe10cbc0f11ba25f8d0fcca9208c6bd.png>

在 Hit Rate、平均倒数排名和覆盖率等指标上进行离线模型评估。图片来源([1])

将 2T-HGNN 模型的表现与流行度模型(基于流行度的排名)、HGNN-w-users(一个以用户为节点的三分 GNN)、LLM-KNN(基于内容的嵌入相似度搜索)和 2T(一个没有 HGNN 嵌入的两塔模型)等模型进行了比较。2T-HGNN 在 Hit-rate@10 和 MRR 指标上优于所有模型。在覆盖率方面表现不佳,这意味着 2T-HGNN 存在流行度偏差。

在线评估

进行了一项 A/B 测试,使用 2T-HGNN 作为候选生成器来评估其在 Spotify 首页“为你推荐的有声书”部分的在线性能。这个实验涉及了 1150 万用户,分为三个组:一组使用当前的生产模型,一组使用 2T 模型的推荐,另一组使用 2T-HGNN 模型。以下业务指标用于在线评估

  • 流率– 这个指标跟踪由推荐生成有声书流的数量。“率”(用户收听到的流数量除以展示给用户的流数量)用于对数字进行标准化,以便进行公平的比较。

  • 新有声书启动率– 这个指标跟踪用户开始收听的新有声书的数量。“率”(用户开始播放的新流数量除以展示给用户的新流数量)用于对数字进行标准化,以便进行公平的比较。

<…/Images/e91167259b2b7e9c8e8c709ea0689781.png>

使用流率和新有声书启动率等指标进行的 A/B 测试结果。图片来源([1])

结果显示,2T-HGNN 显著提高了新有声书启动率,并导致有声书流率更高,而 2T 模型在启动率上只显示出较小的增长,对流率没有显著影响。

参考文献 –

  1. 通过图神经网络在 Spotify 进行个性化有声书推荐 (acm.org)

  2. 使用图模型个性化有声书和播客 – Spotify 研究室 : Spotify 研究室 (atspotify.com)

希望您觉得这篇文章有启发性。感谢阅读!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/6 23:56:49

PySpark实战 - 2.1 利用Spark SQL实现词频统计

文章目录1. 实战概述2. 实战步骤3. 实战总结1. 实战概述 本次实战基于 Spark SQL 对 HDFS 上的文本文件进行词频统计&#xff0c;通过 DataFrame API 读取数据、使用 split 与 explode 函数拆分单词&#xff0c;并结合临时视图与 SQL 语句完成分组计数与排序&#xff0c;最终将…

作者头像 李华
网站建设 2026/10/6 11:45:55

PerlinNoise Perlin噪声(PerlinNoise)隐式函数构建模型并渲染

一&#xff1a;主要的知识点 1、说明 本文只是教程内容的一小段&#xff0c;因博客字数限制&#xff0c;故进行拆分。主教程链接&#xff1a;vtk教程——逐行解析官网所有Python示例-CSDN博客 2、知识点纪要 本段代码主要涉及的有①柏林噪声的构建与渲染 二&#xff1a;代码…

作者头像 李华
网站建设 2026/10/6 18:35:06

Linly-Talker支持模型性能 profiling,精准定位瓶颈

Linly-Talker 支持模型性能 profiling&#xff0c;精准定位瓶颈 在虚拟主播、智能客服和数字员工逐渐走入大众视野的今天&#xff0c;用户对交互体验的要求早已不再局限于“能说话”——他们期待的是自然、实时、有情感的对话。然而&#xff0c;构建一个真正流畅可用的数字人系…

作者头像 李华
网站建设 2026/10/7 4:08:58

Linly-Talker如何处理中英文混读?语音识别适配策略

Linly-Talker 如何处理中英文混读&#xff1f;语音识别适配策略 在当今数字人系统广泛应用于虚拟主播、智能客服和企业级对话代理的背景下&#xff0c;用户对交互自然性的要求已经远超“能听懂”这一基础标准。真实场景中的语言表达往往是复杂且不规则的——尤其是在科技、金融…

作者头像 李华
网站建设 2026/10/6 11:58:42

LLM 的思考方式

原文&#xff1a;towardsdatascience.com/how-llms-think-d8754a79017d 你是否曾经想过 AI 模型是如何“思考”的&#xff1f;想象一下窥视机器的内心&#xff0c;观察齿轮的转动。这正是 Anthropic 的一项开创性论文所探讨的内容。标题为“扩展单义性&#xff1a;从 Claude 3 …

作者头像 李华