这套神奇的算法,比网易云音乐更懂你

DT财经

百家号01-0517:36

文/Sophia Ciocca

随着网易云音乐的听歌报告刷屏,音乐软件背后的个性化推荐算法用开始被大家热议。作为全球最大的正版流媒体音乐服务平台Spotify,就拥有一个可以针对7500万流媒体服务用户的个性化播放列表——Discover Weekly,它可以收听习惯以及用户的喜好,并在每周一花上两个小时来做一个 “新的发现和深度清理”的更新。今天这位来自纽约时报的数据侠Sophia Ciocca,就为我们揭开了这个深度个性化推荐服务,之所以“深得人心”的秘密。

本文转自公众号数问数据科学社区

每周一,超过1亿的Spotify用户都会发现有一张全新的播放列表在等待着他们。歌单里的30首歌,你完全没有听过,但是很可能会非常喜欢。这就是Discover Weekly,它就是这么神奇。

我本人就是Spotify的超级粉丝,且由其爱DiscoverWeekly。为什么呢?因为它让我感觉自己被关注了。它比任何人都了解我的音乐品味,超过了所有我生活中认识的任何一个人。每周它都能满足我的耳朵,因为它能为我找到我自己无法找到,或者我根本不知道自己会喜欢的歌。

对于那些在生活中与音乐隔绝的人,请允许我介绍一下我的最好的虚拟朋友:

(图片说明:作者在Spotify的Discover Weekly歌单)

事实证明,并不是只有我对“Discover Weekly”着迷 - 整个用户群都为之疯狂。这甚至使得Spotify彻底重新考虑其发展重心,将更多资源投入到基于算法的播放列表中。

自“Discover Weekly”在2015年推出以来,我一直非常好奇它是如何工作的(加上我Spotify的一个女粉丝,所以有时我喜欢假装我在Spotify工作,还会去研究他们的产品)。经过三个星期的疯狂搜索之后,我非常感激终于得以一瞥幕后的真相。

言归正传,Spotify是如何神奇地为每个人每周选择30首歌呢?它的秘诀在哪?那么现在,就让我们先去看看其他音乐服务公司是如何推荐音乐的,然后再看看Spotify是如何做得更好的。

线上音乐推荐(Music Curation)的历史简介

早在2000年的时候,Songza用人工推荐率先打开了在线音乐推荐的大门。“人工推荐”(manual curation)的意思是指由一些“音乐专家”或者其他音乐推荐人把那些他们认为好听的歌放在到播放列表里,然后让大家去听他们的播放列表。

这样的做法更加符合Curation这个词的原意,因为curator这个词原本在英文里,就是指那些在艺术馆或博物馆中的管理员,负责给大家整理和介绍艺术品。(后来,Beats Music也采用了这种策略。)

人工推荐虽然表现不错,但它需要手动操作并且过于简单,因此它无法考虑到每个听众个人音乐品味的细微差别。

像Songza一样,Pandora也是音乐推荐领域的元老之一。它采用了稍微更高级一些的方法人工标记歌曲属性。当人们听完各种音乐后会对每首歌选择一些描述性的词,然后给这些歌加上标签。然后Pandora的程序再把这些标签相同的歌做成歌单,于是就产生了一张拥有相似风格歌曲的歌单了。

大约在同一时间,一个名叫“TheEcho Nest”的智能音乐代理在麻省理工学院的媒体实验室中诞生了,它采用了在当时非常先进的个性化音乐推荐方法。The EchoNest使用了算法去分析音乐的音频和文字内容,它可以做到音乐识别,个性化推荐,创建音乐列表,而且还能分析。

最后,Last.fm采取了另外一种方法,这种方法至今依然存在,它就是协同过滤(collaborative filtering)。讲完历史,让我们回到现在。

如果上述就是其他音乐推荐服务的工作方式,那么Spotify是怎么推荐音乐的呢?

是什么使它能够比别的产品更加准确地挠到用户的痒痒肉呢?

Spotify的三种音乐推荐模型

Spotify并不是使用了某种革命性的推荐模型,实际上,他们是把其他推荐服务的各种好方法混在一起使用,最终创造了他们独特而强大的挖掘引擎。

为了能够做出Discover Weekly,Spotify主要使用了三种推荐模型:

协同过滤(Collaborative Filtering),也就是最早被Last.fm使用过的,它通过分析你的行为和别的用户的行为来工作。自然语言处理(Natural Language Processing, NLP)通过分析文字内容来工作。声音模型(Raw Audio Model),通过分析原始的音轨文件来工作。

(图片说明:Spotify推荐模型,图片来源:Spotify的Chris Johnson)

那么就让我们来看看这些推荐模型是如何工作的吧!

推荐模型1:协同过滤

首先,先来点背景介绍:当很多人听到这个“协同过滤”这个词的第一反应就是Netflix,总所周知Netflix是首批使用协同过滤来强化他们推荐系统的公司。他们使用用户对电影的星级评价来帮助他们决定应该推荐什么电影给“相似”的用户。

当Netflix获得巨大成功之后,这种用法得以快速传播。所以现在通常被认为是推荐模型的起点。

不同的是,Spotify并没有像Netflix那样让用户给音乐进行星级评价,而是隐性反馈(implicitfeedback)。这其中包括许多播放数据,首当其冲的是播放次数(streamcounts),也包括这首歌是否被添加到歌单,或者用户是否有访问歌手的页面等等。

那但协同过滤在哪里呢?它又是如何在Spotify上工作的呢?下面的这幅图很好的把这个复杂的问题概括到了一个简单的对话中:

(图片来源:Erik Bernhardsson)

这图里发生了什么呢?这两个家伙中的每一个都有一些自己喜欢的歌,左边的那个人喜欢P,Q,R和S;右边的那个人喜欢Q,R,S和T。

协同过滤看到这些数据之后会认为:

“既然这样。你们两个有三首共同喜欢的歌Q,R和 S,所以你们可能是类似的用户。因此,你们很可能会喜欢对方喜欢的,但是你没听过的歌。

因此右边的人可能会喜欢P,左边的人可能会喜欢T。非常简单的逻辑,对吧?

但Spotify在实践中如何实际使用这个概念来给数以百万用户推荐歌曲的呢?要知道这些推荐是基于其他数以千万的用户喜好来推荐的。

答案就是矩阵运算,用Python库来实现!

上图的矩阵只是一个例子。实际上,真正的矩阵是巨大无比的。每一行代表了1.4亿Spotify用户中的一个用户(如果你也是Spotify用户,那么其中有一条就代表了你);每一列代表了Spotify数据库中3000万首歌中的一首。

然后,Python库就会运行这个又长又复杂的矩阵分解公式:

嗯,就是个复杂的数学公式。。。

当矩阵运行完这个公式后,我们会得到两种类型的向量,这里用X和Y表示。X是一个用户向量(user vector),表示一个用户的喜好,Y是一个歌曲向量(song vector),代表一首歌曲的资料。

这个用户歌曲矩阵产生两种向量:用户向量和歌曲向量

现在我们得到了1.4亿个用户向量(每个向量代表了一个用户),以及3000万个歌曲向量。这些向量的实际内容只是一堆本质上没有意义的数字,但它们用来做比较的时候却非常有用。

为了找到和我拥有最相似品味的用户,协同过滤算法会把我的向量和其他所有用户的向量进行比较,最终找出和我最相似的用户。同样的道理对歌曲向量也是一样,把一首歌的向量和其他所有歌曲向量进行比较,然后发现那些和你要找的歌最相似的歌曲。

协作过滤的表现效果其实已经很不错了,但是Spotify知道,通过添加另一个引擎,他们可以做得更好。这就讲到了另外一个模型NLP。

推荐模型2:自然语言处理(Natural Language Processing, NLP)

第二种Spotify用的推荐模型是自然语言处理。顾名思义,这些模型的数据来源,就是互联网上的各种文字数据,音轨的元数据,新闻文章,博客和其他网络上的文本。

自然语言处理,即电脑理解人类语言的能力,本身就是一个广阔的领域,经常使用在情感分析(sentiment analysis)API上。

NLP背后的确切机制已经超出了本文的范围,在概念上解释起来就是:Spotify不断地在网上爬各种博客文章和其他关于音乐的文字,并找出哪些人们会对特定歌手和歌曲的评价。什么形容词和语言经常被用于描述这些歌曲,以及哪些其他歌手和歌曲也同时被一起讨论。

尽管我不知道具体Spotify是怎么对数据进行选择和分析的,但我可以介绍一下the Echo Nest曾经是怎么做的。the Echo Nest会把他们分成所谓的“文化向量”或“高频词汇”。

每个歌手,每首歌都有上千条每天不断变化地高频词汇。每个词条都有权重,这个权重表示了这个描述的重要性(简单来说,就是一个人要描述这首歌最可能用的词汇)。

(图片说明:“文化向量”“常用词汇”是the Echo Nest的叫法;图片来源:Brian Whitman)

然后,很像协同过滤的做法,NLP模型用这些词和权重,创造出一个向量来代表歌曲,然后用这个向量来两两判断歌曲是否相似。

听起来是不是很酷?

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

写了这么多了,你可能会想:

“等等,我们不是已经通过前两个模型来分析这么多数据了吗?为什么我们还要分析音频自身呢?”

首先,加入第三个模型可以提升推荐服务的准确性。但是实际上这个模型还有另一个目的:不同于前两个模型,原始音频可以把新歌考虑进去。

比如说,你有个创作型歌手朋友在Spotify上传了一首新歌。也许它只有50个播放量,所以没有其他的听众协同过滤它。另外,网上没有任何地方会提到它,所以NLP模型也找不到它。但好在还有原始音频模型,它不会在意一首歌是新歌还是热门歌曲。所以在它的帮助下,你朋友的歌曲可能会和其他流行歌曲一起出现在“DiscoverWeekly”的播放列表中!

好吧,现在我们来分析一下原始音频数据是如何运作的。

听起来是不是很抽象呢?这要如何分析?

其实答案就是:卷积神经网络(Convolutional Neural Networks)!

卷积神经网络就是面部识别使用的技术。Spotify已经能够将它从像素上,转而应用在音频文件上了。下面的图是一个神经网络结构:

(图片来源:Sander Dieleman)

图中的神经网络有四个卷积层,就是左边的四个很厚的条形,而右边是三个更加细的密集层。输入是音频帧的时频表示,然后将其连接以形成频谱图。

音频帧经过这四个卷积层之后,你可以看到一个“全局时间池”层,该层在整个时间轴上汇集,有效地计算在歌曲时间内所学特征的统计量。

经过这个处理后,神经网络对歌曲有了一个了解,包括这首歌的拍子记号(timesignature),音调(key),调式(mode),速度(tempo)和响度(loudness)等特征。 以图是DaftPunk的“Around the World”的一个30秒片段的数据图。

(图片来源:Tristan Jehan & David DesRoches (the Echo Nest))

最终,对歌曲关键特征的理解使得Spotify能够理解歌曲之间的本质上的相似性,从而用户会享受这些根据自己的收听历史得到的推荐歌曲。

写在最后

上文涵盖了推荐建议渠道的三种主要推荐模式的基础知识。这三种模型联合起来最终形成了强大的每周推荐播放列表!

当然,上述这些推荐模式都与Spotify更大的系统相连,其中包括大量的存储数据,并使用大量的Hadoop集群来扩展推荐,使这些模型能对付巨型矩阵,还有数不清的互联网上的音乐文章以及大量的音频文件。

最后,希望这篇文章给你提供了有用的信息,激起了你对它的好奇心。现在,我将通过自己的“Discover Weekly”来探索我喜欢的新音乐了,这一切都得感谢幕后的机器学习算法。

注: 本文编译自Medium文章《Spotify’s Discover Weekly: How machine learning finds your new music 》,点击“阅读原文”查看,内容仅为作者观点,不代表DT财经立场。

编译 | 毛哥 Chelsea

题图 | 视觉中国

期待更多数据侠干货分享、话题讨论、福利发放?在公众号DT数据侠(ID:DTdatahero)后台回复“数据社群”,可申请加入DT数据社群。

数据侠门派

本文数据侠Sophia Ciocca,现任纽约时报软件工程师,毕业于宾夕法尼亚大学。

加入数据侠

“数据侠计划”是由第一财经旗下DT财经发起的数据社群,包含数据侠专栏、数据侠实验室系列活动和数据侠联盟,旨在聚集大数据领域精英,共同挖掘数据价值。了解数据侠计划详情请回复“数据侠计划”,投稿、合作请联系。

本文由百家号作者上传并发布,百家号仅提供信息发布平台。文章仅代表作者个人观点,不代表百度立场。未经作者许可,不得转载。

返回顶部