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

我是Spotify的虔诚粉丝,尤其喜好Discover Weekly这一功能。
它让我觉得很舒畅,比我身边任何一个人都更理解我的音乐品味。
在每周都能给我推举一些我可能永久不会创造,但非常喜好的音乐。

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

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

音乐软件若何推荐歌曲Spotify运用人工智能一周定制30首歌

那么,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集群来扩大推举范围,让这些模型能够在巨大的矩阵、海量关于歌曲的文本和大量音频文件的根本上稳定运行。

(本文由36氪编译组授权发布,未经容许不得转载。
编辑:郝鹏程)