搜索

揭秘 Spotify 的“每周推荐”:AI 如何找到你会喜欢的新歌?

chiming · 2017-10-19
比你身边任何一个人都更了解你的音乐品味。

编者按:Spotify的Discover Weekly非常神奇,每周都会给用户推荐30首他们可能会喜欢的新歌。大量的用户表示,这些新歌非常符合他们的“胃口”。今年6月份,Spotify宣布全球活跃用户超过1.4亿人,是Apple Music用户的5倍还要多,其中Discover Weekly功不可没。Spotify是如何做到的呢?软件工程师Sophia Ciocca花费了3周,查阅了大量的资料对其工作原理进行了分析。原文发表在Medium,由36氪编译。

每到周一的时候,就会有超过1亿的Spotify用户发现,应用中会有一个新的播放列表等待着他们。这里面包含有Spotify(准确来说是Spotify的人工智能技术)为用户“定制”的、以前从未听过的,但很可能会喜欢的30首歌曲。它的名字叫Discover Weekly,它非常神奇。

我是Spotify的忠实粉丝,尤其喜欢Discover Weekly这一功能。它让我感觉很舒服,比我身边任何一个人都更了解我的音乐品味。在每周都能给我推荐一些我可能永远不会发现,但非常喜欢的音乐。

而且事实证明,我并不是唯一一个痴迷于Discover Weekly的人,用很多Spotify的用户群为之疯狂。这促使Spotify对其非常重视,将更多资源投入到这个基于算法的推荐播放列表中。

自从2015年Discover Weekly首次亮相以来,我一直很想知道它是如何运作的。在疯狂地使用谷歌搜索了三周后,我终于有机会看到了其幕后的秘密。

那么,Spotify是如何做到给每个用户每周都挑选30首符合他们喜好的歌曲的呢?让我们先看看其他音乐服务是如何做音乐推荐的,以及Spotify是如何做得更好的。

在线音乐推荐歌单简史

早在2000年,Songza就开始使用“人工精选”的方式来为用户创建音乐播放列表。“人工精选”意味着,一些“音乐专家”或其他的相关人员,会根据自己的品味来制作歌单。(后来,Beats Music也采用了同样的策略。)人工的调整效果还不错。但它是手动的,显得非常简单。而且它还没有考虑到每个用户的音乐品味的差别。

和Songza一样,Pandora也为用户提供了一些类似于歌单的音乐播放列表。它采用了一种稍微高级的方法,并不是通过手动标记歌曲的属性。而是让一群人听音乐,并为每首歌选了一些描述性的单词,并用这些单词对歌曲进行标记。然后,Pandora的代码可以过滤某些标签,从而制作出听起来类似的歌单。

大约在同一时间,来自麻省理工学院媒体实验室的音乐情报机构Echo Nest诞生了,它采用了一种更为先进的个性化音乐推荐方式。Echo Nest利用算法分析音乐的音频和文本内容,使其能够进行音乐识别、并进行个性化推荐、创建歌单并对其进行分析。

最后,Last.fm采用了一种不同的方式,它使用一种名为“协同过滤(collaborative filtering)”的方法来识别用户可能会喜欢的音乐。稍后再详细介绍。

我们知道了其他音乐服务提供推荐列表的方式,那么Spotify是如何做的呢?它似乎比其他任何音乐服务都更能准确地瞄准用户的品味。

Spotify的3种推荐模式

实际上,Spotify并没有采用一种革命性的歌曲推荐模式,而是将其他服务使用的一些最佳策略组合在一起,打造了一个独特而又强大的音乐发现引擎。

为了创建Discover Weekly,Spotify采用了三种主要的音乐推荐模式:

  • 协同过滤模型(即Last.fm最初使用的模式),它通过分析用户使用行为进行工作。

  • 自然语言处理(NLP)模型,通过分析文本进行工作。

  • 原始音频分析模型,其工作原理是分析原始音频轨道本身。

接下来,让我们来看看这些推荐模型是如何工作的。

推荐模型1:协同过滤

如果你了解Netflix的话,你可能对“协同过滤”这个词不会感到陌生。Netflix是最早使用协同过滤来为用户做推荐的公司之一。即通过用户对电影的评价,来判断影片的属性以及用户的喜爱程度,然后综合用户的反馈将电影推荐给其他“类似”的用户。

Netflix使用协同过滤模型取得了成功,它开始迅速传播开来。就目前而言,基本上每一个想要建立推荐模型的产品,都会选择从协同过滤入手。

与Netflix不同的是,Spotify并没有让用户对音乐或者歌星进行评价。相反,它使用的是一种隐藏在用户使用习惯下的反馈——具体来说,就是用户听了哪些歌曲,是否将歌曲保存到播放列表中,是否在听了歌曲之后去访问了歌星的页面等等数据。

什么是协作过滤,它是如何工作的呢?简单来说,其基本逻辑就像下图中的对话一样:

从上图中看以看出,这两个人都有一些偏好——左边的人喜欢P、Q、R和S;右边的人喜欢Q、R、S和T。

通过协同过滤对这一数据分析之后,可以初步得出这样的结论:

“这两个人同时喜欢Q、R和S——所以他们可能是相同类型的用户。所以,他们都有可能会喜欢对方听过,但自己没有听过的歌曲。”

然后就给右边的那个人推荐P,给左边的那个人推荐T?很显然,并不是这么简单。

那Spotify是如何利用这一概念,并计算数以百万计的用户,然后根据这些用户的偏好去推荐歌曲呢?

如下图所示,是用Python库来完成的。

这是一个非常简化的模型,用户如果听过一首歌曲,那么就会标注为1,否则为0。Spotify使用的模型远比这复杂

实际上,这个矩阵是非常庞大的。每一行代表了Spotify的1.4亿用户之一(如果你使用Spotify,你自己就是这个矩阵中的一行),而每一列都代表了Spotify数据库中3000万首歌曲中的一个。

然后,Python库会运行下面这个冗长而又复杂的矩阵分解公式。

当它结束时,我们会得到两种类型的向量,这里用X和Y表示。X是一个用户矢量(user vector),代表一个用户的喜好,而Y是一个歌曲矢量(song vector),代表了一首歌的特征。

通过这种方法,我们获得了1.4亿个用户的矢量和3000万首歌曲的矢量。虽然这些矢量只是一堆毫无意义的数字,但使用它们去进行比较则会有很大的用处。

为了找到相似度比较高的用户,协同过滤可以将一个用户的矢量与所有其他用户的矢量进行比较,最后能找到与其最相似的用户。也可以把一首歌的矢量和其他所有的歌曲矢量进行比较,找出哪两首歌曲是最相似的。

协同过滤确实是一项不错的技术,但Spotify做得更好。

推荐模型2:自然语言处理(NLP)

Spotify采用的第二种推荐模型是自然语言处理(NLP)模型。顾名思义,这些模型的源数据是一些常规的词汇,比如音轨的元数据、新闻报道、博客以及互联网上的其他文本。

自然语言处理,作为计算机理解人类语言的能力,本身就是一个巨大的领域。通常是通过情绪分析API来实现。

自然语言处理背后的机制已经超出了本文的讨论范围。但我们可以了解一下其大致的工作原理:Spotify不断地在网络上寻找关于音乐的博客文章和其他书面文本。从中找出人们对特定歌星和歌曲的评论中经常使用的形容词和语言,以及有那些歌星与歌曲被放在了一起去讨论。

虽然我不知道Spotify如何处理他们的抓取数据,但可以通过Echo Nest去进行分析理解。Echo Nest是Spotify在2014年收购的一家音乐分析公司。这部分用到的术语被称为文化向量(cultural vectors)或顶级形容词(top terms)。每个歌星和歌曲都有成千上万的不断变化的顶级形容词。每一个形容词都有一个相关的权重,这反映了它的重要性(简单来说,一个人会用这个词来形容音乐的可能性)。

然后,就像协同过滤中一样,自然语言处理模型使用这些术语和权重来创建歌曲的矢量,用来确定歌曲之间的相似度。很酷,对吧?

推荐模型3:原始音频模型

说到这,你可能会问:

既然已经有了两个使用大量数据的模型。为什么还要分析音频本身呢?

这背后有两个原因,第一,原始音频模型能提高推荐服务的准确性。第二,这个模型和上述的两个模型不同,会将新歌曲纳入到分析范围中。

就比如说,有一个新的歌手在Spotify上发布了一首歌。但只有50个人听过,很难收集到足够的数据对其进行协同过滤处理。而且,在互联网上它也很少被提及,所以自然语言处理模型也不会处理它。但原始音频模型不会区分新歌和流行歌曲,所以在它的最用下,新歌手发布的新歌可以和流行歌曲一起出现在Discover Weekly 中。

那么,Spotify是如何分析原始音频数据的呢?这看起来非常抽象。

简单来说,就是使用卷积神经网络。

卷积神经网络是面部识别系统背后的技术。在Spotify中,被修改了用于音频数据,而不是像素。下面是一个神经网络架构的例子:

如上图所示,这个特殊的神经网络有四个卷积层-左边较宽的矩形,三个致密层-右边较窄矩形。输入以音频帧的时间-频率表示,然后将它们连接起来形成光谱图。

音频帧通过这些卷积层,在最后的卷积层之后,会遇到对整个时间轴进行池化的“全局时域池化”层,并有效地计算出整首歌中学习到的特征并进行统计。

经过这个过程,神经网络就能对歌曲有所了解,包括时长、节奏、风格、音量、音调等特征。下面是 Daft Punk 的《Around the World》30 秒钟片段的分析示例。

最终,通过对这首歌的关键特征的理解,Spotify能够捕捉到歌曲之间的基本相似性,从而就能根据用户的播放记录去推荐歌曲了。

综合上述的三种推荐模型,就形成了Spotify的Discover Weekly的推荐引擎。

当然,这些推荐模型的准确性与Spotify大规模的生态系统有关。它有海量的数据存储,可以使用大量的Hadoop集群来扩大推荐范围,让这些模型能够在巨大的矩阵、海量关于歌曲的文本和大量音频文件的基础上稳定运行。

原文链接:https://hackernoon.com/spotifys-discover-weekly-how-machine-learning-finds-your-new-music-19a41ab76efe

编译组出品。编辑:郝鹏程

+1
5

好文章,需要你的鼓励

参与评论
登录后才能参与讨论哦...
后参与讨论
提交评论0/1000

请回复有价值的信息,无意义的评论将很快被删除,账号将被禁止发言。

下一篇

36氪APP让一部分人先看到未来
36氪
鲸准
氪空间

为你推送和解读最前沿、最有料的科技创投资讯

一级市场金融信息和系统服务提供商

聚集全球最优秀的创业者,项目融资率接近97%,领跑行业