Spotify每周歌曲推荐算法解析

来源:infoq 作者:张天雷
  

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播放列表,尽最大努力提供一个与其相似的无穷列表。


时间:2016-01-20 08:27 来源:infoq 作者:张天雷 原文链接

好文,顶一下
(0)
0%
文章真差,踩一下
(0)
0%
------分隔线----------------------------


把开源带在你的身边-精美linux小纪念品
无觅相关文章插件,快速提升流量