写点什么

Spotify 每周歌曲推荐算法解析

2016 年 1 月 19 日

Spotify 是全球最大的正版流媒体音乐服务平台,2008 年 10 月在瑞典首都斯德哥尔摩正式上线。Spotify 提供的服务分为免费和付费两种,免费用户在使用 Spotify 的服务时将被插播一定的广告。而付费用户则没有广告,且可以拥有更好的音质,在移动设备上使用时也可以拥有所有的功能。截止到 2015 年 6 月,Spotify 已经拥有超过 7500 万的用户,其中 1500 万为付费用户。

每个周一,7500 万 Spotify 用户都会收到了一卷新的混音带,这是由 Spotify 的 Discover Weekly 通过算法每周向用户专门推荐的播放列表,里面包含了 30 首歌曲,它带来了非常好的用户体验,感觉像是一个爱好音乐的朋友专门送给用户的礼物。

自动音乐推荐已经不是什么新鲜事,但 Spotify 似乎可以让用户对个性化推荐的播放列表同时感到新鲜和熟悉。一些潜在的竞争对手,如 Pandora、Google 和 Apple,很大程度上都可以为用户提供深不见底的音乐目录,但是 Spotify 通过采用不同的方法可以为每个用户挑选出用户喜欢的音乐。

Spotify 的这项服务得到了用户广泛欢迎。根据 Spotify 的消息,自从 6 月份 Discover Weekly 悄然推出之后,播放列表中的歌曲被播放过 17 亿次。如果由于什么原因,推荐的歌曲列表推迟发布了,往往会让很多用户感到非常低落,感觉到生活中缺少一种大的乐趣。

“相比过去,我们现在有更多的技术保证,即使你是世界上最小众、最奇怪的音乐家,做着世界上只有 20 个人懂得欣赏的音乐,我们也能找到那 20 个人,并在你们之间建立联系”,在 Spotify 负责监视这项服务的工程师 Matthew Ogle 表示,“Discovery Weekly 正用一个非常引人注目的新方式来做到这一点,而在以前从来没有人做到过”。

如果你是一个 Spotify 用户,在你登陆之后,将可以看到 Spotify 这周为你挑选的歌曲(如果你不是 Spotify 用户,或者没有登录,你会看到自己最近的播放列表)。

下面将对这个过程进行简单的介绍。

收集所有用户的播放列表

Discover Weekly 的主要组成部分来自于所有用户。 Spotify 首先查看用户创建的 20 亿个播放列表,每一个列表都反映了用户的偏好。这些用户对于歌曲的选择和分组形成了 Discover Weekly 推荐的核心。

发现用户自己的收听口味

但 Discover Weekly 为用户推荐的播放列表要更为复杂。 Spotify 针对每个用户的音乐品味,为每个用户创建了一个 profile,按照艺术家和音乐流派的不同进行分类,不仅仅是划分为常见的“摇滚”和“说唱”,而是更细粒度的,如“合成器流行乐”和“南方灵魂乐”等等,这些可以通过 Echo Nest 的技术进行分析,Echo Nest 是 Spotify 在 2014 年收购的一家音乐分析公司,它通过机器读取音乐网站从而了解到新的专辑,并对音乐进行进一步分析。

用户可能不知道什么是“流行 pop”或者其他类型的流派,但 Spotify 根据用户自己的 Spotify 收听数据,会告诉用户你原来是一个流行 pop 音乐的粉丝。

通过算法进行集成

通过 Spotify 的算法可以建立 20 亿个播放列表的数据与用户个人口味之间的联系。

Spotify 的工程师在今年早些时候的一个报告中分享了许多的技术细节。他们的方法包括:协同过滤,例如在亚马逊中经常见到的功能“客户谁买了这个 item 也会买…”,以及自然语言处理,Echo Nest 是如何理解音乐博客和播放列表的标题的。公司采用开源软件 Kafka 来对数据实施实时管理。

寻找适合用户的音乐

Spotify 采用了深度学习技术,深度学习是可用于海量数据分析的机器学习技术,能够大大提高 Discover Weekly 的推荐水平。这项工作由 Sander Dieleman 构建,Dieleman 曾是 Spotify 的实习生,现在是谷歌的 AI 子公司 DeepMind 的研究科学家。

Discover Weekly 的首席工程师 Edward Newett 表示,“我们已经用深度学习和神经网络试验了不同的方法,并且这是 Discover Weekly 中最重要的功能之一”。

用深度学习预测用户收听兴趣

关于 Spotify 采用深度学习进行音乐推荐的方法,Dieleman 和他的同事 Aäron van den Oord 一起在 NIPS2013 上发表了一篇关于这个推荐系统的文章,题为“Deep content-based music recommendation”。他们试图使用音频信号,通过训练一个回归模型来预测歌曲的隐特征表示,从而解决用户收听偏好预测问题。通过这种方式,即使没有用户行为数据可用,也可以在一个协同过滤空间中预测一首歌曲的特征表示。(正如你可能从本文的标题推断的,解决这个问题的回归模型是一个深度神经网络)

这种方法的基本想法是,通过协同过滤模型将用户和歌曲投影到一个共享的低维隐空间中。一首歌曲在空间中的位置编码了所有反映用户偏好的信息。如果两首歌曲在空间中非常靠近,它们可能非常相似。如果一首歌曲与另一个用户非常接近,它对于用户来说可能是个好的推荐(只要他们以前没有听过)。通过分析音频预测一首歌曲在空间中的位置,就能够选择合适的歌曲推荐给一个正确的听众,而不依赖于用户的历史行为数据。

通过使用 t-SNE 算法可以将模型的预测结果投影到一个低至二维的隐空间中,这个过程的形式化如下图。正如图中看到的结果,相似的歌曲会聚类在一起。Rap 音乐主要集中在左上角,然而电子乐歌手主要聚集在底部。

(点击放大图像)

Dieleman 表示选择处理这个问题的主要原因是因为他相信音乐音频信号的推荐一个极其复杂的问题,需要很多层次的抽象才有可能实现。他希望网络的连续层次能够逐渐学习到更复杂和不变的特征,以便更好地用于图像分类任务。

Spotify 在它们的推荐流水线中已经使用了一堆不同的信息源和算法,Dieleman 表示,他的工作的最直接的应用是将它作为一种额外的信息。然而,它也可以被其他算法用来过滤掉推荐中的离群值。例如,协同过滤算法的推荐结果中往往会包括开场曲目,尾奏曲目,翻唱歌曲和混音作品。这些都可以通过使用基于音频的方法被有效过滤掉。

如果你对深度学习、特征学习以及它们在音乐推荐中的应用感兴趣,可以查看得 Dieleman 的 research page ,上面有 Dieleman 在这个领域中所做的一些主要工作。如果你还对 Spotify 的音乐推荐方法有兴趣,还可以查阅 Erik Bernhardsson 博客

有点神奇的个性化

Adam Pasick 说到,正如许多 Spotify Discover 用户所表示的,推荐的结果经常让人感觉很神奇,Spotify 是如何将上世纪 90 年代的摇滚乐队 Dinosaur Jr. landed 的歌曲加入到播放列表中的?

“我最喜欢的事情之一就是 Discover Weekly 的怪异” ,Ogle 表示。 “我们可以建立这样庞大的系统,它提取了数以百万计的用户喜好,自动为用户进行音乐推荐,不需要专门通过人力来解决”。

每周的用户播放列表都不相同,大概反映了用户变化的移动音乐喜好。在一个典型的有 30 首歌曲的 Discover Weekly 播放列表中,用户会找到大约 15 首歌是很喜欢的,10 首歌觉得很普通,4 首歌是完全不会听,1 首是非常痴迷的。

Pasick 说到,最近有一天,他到了他最喜欢的一间咖啡馆,音响中传来了非常熟悉的声音。录音带上的许多曲目都是 Spotify 通过算法为 Pasick 推荐的,但咖啡馆的音乐都来自于一名乐队乐手 Homero 的 Discover Weekly 播放列表,但 Homero 不在自己的乐队中的时候,会兼职作为一名咖啡师。

Pasick 很好奇,Homero 和他是怎么得到同样的歌曲列表的?是从 20 亿个播放列表中,是通过复杂的算法为他俩过滤出相同的结果的吗?Spotify 的人工编辑会干预这个过程吗?

有人会说,“哦,我们三个人从 Discover Weekly 得到了相同的推荐列表,这个列表是有人把它放那的吗?”。 Ogle 表示,“答案是肯定的,当其他的 Spotify 用户在建立自己的播放列表,意味着全世界有很多人由于跟他有相同的音乐文化,就会有相同的播放列表”。

他说,尽管艺术家和他们的唱片公司一再要求,Spotify 还是没有使用特定歌曲去刻意建立一个个的播放列表。

深入别人脑海的旅行

Pasick 说到,当你在听其他人的 Discover Weekly 播放列表的时候会感觉有些神奇,就像他那天在咖啡馆遇到的情况一样,这种感觉就好像在哄骗其他的 Spotify 用户与人分享他们的播放列表。这有点像进行了一个短暂的旅行,既像地理上的,又像是在别人脑海中的。

“当我年轻的时候,经常会有这样的事情,回家后打开 CD 机,通过所听音乐,发现自己真实的存在” ,工程师 Newett 说到,“但现在,你可能会意识到,你曾经以为你是独自一个人在世界上,但现在会感觉不一样,你会发现世界上存在那么一些,至少在音乐爱好上跟你一样”。

使用 Discover Weekly 的专业技巧

目前,Discover Weekly 并不完美。Pasick 说,他的播放列表中通常包含一两首歌曲是他绝对喜欢的(Dengue Fever 的“Tiger Phone Card”,以及 Mar Superstar 的“Lady You Shot Me”),有一半是非常喜欢的(Gregory Porter 的“1960 What?”),还有几个讨厌的歌手(为什么我总是收到这么多 Neil Diamond 的歌曲?)。

为了确保从 Discovery Weekly 中获得最喜欢的歌曲,用户可以如何微调他们的结果呢?除了来自其它重要的 Spotify 用户的一些提示,Spotify 还给出一些建议,从非常简单到非常复杂的都有,包括:

添加你喜欢的歌曲到播放列表或 Spotify 库。“如果你保存一首歌曲到你的播放列表或到 Spotify 库,然后开始定期地调整它,它会真正影响 Spotify 对你的理解”,Ogle 表示。

跳过你不喜欢的歌曲。如果一首歌曲在前 30 秒内就被用户 pass 掉了,Discover Weekly 算法将给这首歌曲和相应的歌手一个“thumbs-down”。

听听新的歌手和他们的音乐。“如果我们给你推荐一些东西,你通过点击歌手,开始查看他们的唱片,并同时加入到播放列表中”,Ogle 说。“你在 Discover Weekly 之外浏览得越多,就越有可能影响我们为你做的推荐”。

耐心一点。该算法在设计中会忽略新的收听行为中一些迅速地、突然出现的峰值,因为许多人分享他们的 Spotify 登录,因此任何新的收听活动可能不会导致你的播放列表的立刻变化。

如果你不想 Spotify 注意到你的行为,可以使用“私密模式”。Newett 表示,“也许你不想让别人知道你的偏好,我们会按照这种“私密模式”,而不跟踪你的曲目播放”。Spotify 会忽视你在 Discovery Weekly 中收听的歌曲。“同时,我们还有一些担忧,比如,如果我只听 Discovery Weekly,会不会出现蛇吞尾巴的现象?”,Newett 说。

将一些歌曲风格过滤掉。Ogle 说到,Spotify 确实对哪些用户可能想要哪些歌曲做了一些编辑决策,因此有年幼小孩的父母不会从 The Wiggles 获得一百万首歌曲,圣诞歌曲在 12 月 25 日之后将大大消失,在大多数情况下,我们试图为它们设置一个护栏,但同时也不是绝对的,因为 Spotify 保留了用户作为人的自主权利,我们应该尽量尊重。

音乐心灵感应的实验。为了更加深入了解 Spotify 的推荐,最好的方式是收听其他人的 Discovery Weekly 播放列表。有一个很有品位的朋友吗?问他分享一个他的播放列表的链接。默认情况下是专有的,但能够被用户分享。

用 IFTTT 保存 weekly 播放列表。Discover Weekly 的一个缺点是,播放列表每周一会被擦拭干净。你可以手动地将歌曲保存到另一个播放列表中,也可以使用免费的 IFTTT 服务自动保存你的 weekly 播放列表到一个单独的存档播放列表。

使用 Spotify 的“广播”功能。如果你想听到一些新的声音,并且绝对不能等到周一,右击 Discovery Weekly,选择“Start Playlist Radio”,Discovery Weekly 服务将按照你的 weekly 播放列表,尽最大努力提供一个与其相似的无穷列表。


感谢杜小芳对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群(已满),InfoQ 读者交流群(#2))。

2016 年 1 月 19 日 16:335427
用户头像

发布了 268 篇内容, 共 99.6 次阅读, 收获喜欢 15 次。

关注

评论

发布
暂无评论
发现更多内容

mPaas-RPC拦截器各种场景下的使用指南

阿里云金融线TAM SRE专家服务团队

RPC

Prometheus + Grafana详解

雪雷

监控 Grafana Prometheus 告警

K8s事件监控之kube-eventer

雪雷

k8s事件告警 k8s资源监控 k8s管理

三分钟搞懂依赖注入

喵叔

K8s可视化监控之-Weave Scope

雪雷

k8s k8s可视化 k8s监控

微服务链路追踪之Jaeger

雪雷

全链路监控 Jaeger

SonarQube集成gitlab/jenkins

雪雷

jenkins sonar gitlab ci 代码扫描

Java 生成解析二维码

喜瑞斯

GitOps工具Argo CD实战

雪雷

DevOps CI/CD gitops argo cd

Ceph集群部署

雪雷

分布式存储 Ceph rdb pvc

API统一管理平台-YApi

雪雷

YAPI API接口管理

搜狗联合清华天工研究院推出ChoreoNet模型:让数字人随着音乐翩翩起舞

脑极体

支付宝蜻蜓刷脸支付

诸葛小猿

支付宝 蜻蜓 刷脸支付

一文带你检查Kubernetes应用是否为最佳实践

雪雷

k8s k8s最佳实践

使用null条件运算符调用事件处理程序

喵叔

等级三整理之深信服

Lane

Guacamole实战

雪雷

guacamole 远程登录 堡垒机

大数据技术思想入门(一):分布式存储特点

抖码算法

Java 大数据 hadoop 分布式

Go: 使用pprof收集样本数据

陈思敏捷

go golang pprof

曾经每个手机上都有的游戏,作为前端如今你也能开发出来了,附教程

web前端程序猿

html5 前端 前端训练 前端教程 web前端

Gitlab CI之单元测试和代码扫描

雪雷

单元测试 CI/CD gitlab ci 代码扫描

RabbitMQ实践

雪雷

RabbitMQ 消息队列

微服务API网关-Kong详解

雪雷

kong api 网关

极客公园张鹏对话百度CTO王海峰,揭秘中国AI的今昔与前路

脑极体

Java单例模式一文通

喵叔

Kubernetes-学习必备(awesome-kubernetes-notes)

雪雷

学习 k8s入门 k8s文档 k8s知识

玩K8S不得不会的HELM

雪雷

k8s Helm

Gitlab CI进阶之共享CI库

雪雷

DevOps gitlab CI/CD gitlab ci

Kubernetes config多集群管理工具

雪雷

k8s kubecm k8s多集群管理 kubeconfig

Istio微服务治理笔记(一)

雪雷

istio 服务治理 server mesh

微服务注册发现配置中心-consul

雪雷

Consul 服务注册与发现 配置中心

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

Spotify每周歌曲推荐算法解析-InfoQ