- 原文地址:Spotify’s Discover Weekly: How machine learning finds your new music
- 原文做者:Sophia Ciocca
- 译文出自:掘金翻译计划
- 本文永久连接:github.com/xitu/gold-m…
- 译者:lsvih
- 校对者:ppp-man
在每周周一,超过 1 亿位 Spotify 用户会收到一份新鲜的歌曲播放列表。这个自定义列表中包含了 30 首用户历来没听过,但可能会喜欢上的歌曲。这个神奇的功能被称为“每周推荐(Discover Weekly)”。html
我是 Spotify 的忠实粉丝,尤为喜欢它的每周推荐功能。由于,它让我感受到我被重视着。它比谁都了解个人音乐品味,并且每周的推荐都恰好令我知足。若是没有它,我可能一生都找不到一些我很是喜欢的歌曲。前端
若是你苦于找不到想听的音乐,请让我隆重介绍我最好的虚拟伙伴:react
事实证实,痴迷于每周推荐的用户不只只有我一个 —— 许多用户都为它痴狂,这足以让 Spotify 从新思考其发展重点,将更多的资源投入播放列表推荐算法中。android
每周推荐功能于 2015 亮相,从那时开始,我就很是渴望了解它是如何运做的(我是他们公司的粉丝,因此经常假设本身在 Spotify 工做并研究他们的产品)。在通过三个星期的疯狂搜索以后,我得以瞟到了其帷幕后的一丝真容。ios
那么 Spotify 是如何作出每周为每一个用户选出 30 首歌这个惊人的工做的呢?让咱们先看一看其它一些音乐服务商是如何进行音乐推荐的,而后分析为何 Spotify 作的更好。git
早在 2000 年,Songza 就开始使用人工编辑来进行在线音乐策展(curation,策划并展现)。“人工编辑”意味着须要一些”音乐专家“团队或者其它管理员手动将他们认为很好听的歌放到歌单中去。(后来 Beats Music 也实行了一样的策略)。虽然人工编辑运做的很好,可是它须要手动操做而且过于简单,没法考虑到每一个听众我的音乐品味的差异。github
如 Songza 同样,Pandora 也是音乐策展的元老之一。它采用的方法较为先进,使用人工标注歌曲属性的方法。也就是说,有一组人在听歌以后,为每首歌选择一些描述性的词,对各个曲目进行了标注。而后,Pandora 就能利用代码简单地对标注进行筛选,获得比较相似的歌单。web
与此同时,麻省理工学院媒体实验室开发出了名为”The Echo Nest“的智能音乐助手,开创了一种更加先进的个性化音乐推荐方式。The Echo Nest 使用算法分析各个音乐音频与文本的内容,使其能进行音乐识别、个性化推荐、建立歌单以及进行分析。算法
此外,至今依然存在的 Last.fm 采用了一种名为协同过滤的不一样的方法。它能够识别用户可能喜欢的音乐。稍后会详细提到它。数据库
以上就是其它音乐策展服务进行推荐的方法。那么 Spotify 是如何造出它们神奇的引擎,如何作出更加符合用户口味的推荐的呢?
实际上 Spotify 并无使用某个革命性的推荐模型 —— 与此相反,他们是将一些其它服务中单一使用的最佳策略混合起来,建立了本身独特、强大的发现引擎。
Spotify 每周推荐的开发者主要采用了以下三种类型的推荐:
下面让咱们深刻了解上述各个推荐模型吧!
首先简述一些背景:当人们听见”协同推荐“这个词的时候,大多会想起 Netflix 这个首批采用协同过滤推荐模型的公司。他们使用用户对影片的评星来肯定将什么影片推荐给其它喜爱类似的用户。
当 Netflix 成功使用这种推荐方法以后,开始迅速发展。如今一般被认为是尝试使用推荐模型的鼻祖。
与 Netflix 不一样,Spotify 没有让用户对音乐进行评星。他们采用的数据是隐式反馈 —— 具体来讲,包括对用户听歌的流数据进行统计,以及收集一些其它的流数据,包括用户是否将歌曲保存到他们本身的歌单、在听完歌以后是否访问了歌手的主页等等。
那么什么是协同过滤,它又是如何运做的呢?这儿用下面这个简短的对话来作个简述:
图中发生了什么?图中的两我的都有一些喜欢的歌曲 - 左边的人喜欢歌曲 P、Q、R 及 S;右边的人喜欢歌曲 Q、R、S 及 T。
协同过滤就像用这些数听说:
”Emmmmm,大家都喜欢 Q、R、S 三首歌,因此大家多是相似的用户。因此,你应该会喜欢对方爱听而你还没听过的歌。“
也就是说,会建议右边的人去听歌曲 P 试试,建议左边的人去听听歌曲 T。这很简单吧!
但 Spotify 是如何将这种方法落到实处,用于由百万级别用户的喜爱歌曲来计算百万级别用户的推荐的呢?
……应用数学矩阵,而后使用 Python 库来实现。
在实际状况中,你在看到的这个矩阵是巨大无比的,矩阵中的每一行都表明了 Spotify 的 1.4 亿用户(若是你也用 Spotify,那你也会是这个矩阵的一行),每列表明了 Spotify 数据库中的 3000 万首歌。
接着,Python 库会长时间、缓慢地对矩阵按照如下分离公式进行计算:
在它完成计算以后,咱们会获得两种向量,在这里用 X 与 Y 表示。X 是用户向量,表明了单个用户的口味;Y 是歌曲向量,表明了一首歌的属性。
如今,咱们有了 1.4 亿条用户向量以及 3000 万条歌曲向量。这些向量的内容实质上就是一堆数字,自己没有任何意义。可是对它们进行对比就能起到巨大的做用。
为了找到哪些用户和我有着最类似的口味,协同过滤会将个人向量和其它每一个用户的向量进行对比,最终找到与我最相近的用户。一样的,对 Y 向量进行比较,能够找到与你正在听的歌最相近的歌。
协同过滤的效果至关不错,但 Spotify 没有知足于此,他们知道经过增长一些其它的引擎可使得效果更好。下面让咱们看看 NLP。
Spotify 采用的第二种推荐模型是天然语言处理(NLP)模型。顾名思义,这种模型的数据来源就是传统意义上的文字 —— 这些文字来源于歌曲的元数据、新闻文章、博客,以及互联网中的其它文本。
NLP 是一种让计算机理解人类语言的能力,是一个庞大的领域。在这儿能够采用一些情感分析 API 来实现。
NLP 背后的机制已经超出了本文的讨论范围。不过咱们能够这么来大体归纳:Spotify 爬虫不断地查找与音乐有关的博客以及各类文本,并了解人们对特定艺术家及歌曲的见解 —— 谈到这些歌曲人们一般会用什么形容词和语言,以及会同时提到哪些其余的艺术家及歌曲。
虽然我不知道 Spotify 处理数据的细节,但我知道 the Echo Nest 是如何与他们进行协同工做的。他们会将语言处理封装为“文化向量”或者“高频短语”。每一个艺术家及歌曲都有着数以千计的高频短语,且天天都在变化。每一个短语都有一个权重,用于表示这个短语的重要性(大体来讲,就是某人描述这个音乐时会用这个短语的几率)。
the Echo Nest 使用的“文化向量”与“高频短语”,Brian Whitman 提供表格
接下来与协同过滤同样,NLP 模型会使用这些短语和权重为每首歌构建一个表示向量,这样就能判断两首歌是否类似了。酷不酷炫?
在开始本章以前,你可能会问:
咱们已经在前两个模型中应用了足够多的数据,为何还须要分析音频自己呢?
首先,引入这第三个模型能使这个惊人的推荐服务的准确率获得进一步的提高。但实际上,使用这个模型还有第二种目的:与前两个模型不一样,原始音频模型能够用于处理新歌。
举个例子,你的歌手朋友将他的新歌传上了 Spotify,然而他仅有 50 名听众,若是要使用协同过滤显然人数太少了。而且他尚未火起来,在互联网上任何角落都没有被提到过,所以 NLP 模型也无法为他发挥做用。不过幸运的是原始音频模型不会在意这是新歌仍是老歌,有了它的帮助,你朋友的歌就有可能和那些流行的歌一块儿被加入每周推荐歌单了!
接下来解释“如何”对如此抽象的原始音频进行分析。
…使用 卷积神经网络(CNN)!
卷积神经网络正是人脸识别背后使用的技术。在 Spotify 这个场景中,工程师们使用音频数据来代替像素。下面是神经网络一中结构的实例:
这个特制的神经网络有 4 层卷积层,它们在图的左边,看起来像很厚的木板;它还有 3 层全链接层,它们在图的右边,看起来像很窄的木板。输入值是音频帧的频率的表示,在图中以光谱图的形式表示。
音频帧经过这些卷积层后,在最后一个卷积层边你能够看到一个“全局时间池化”层。这个池化层沿整个时间轴进行池化,高效地根据统计学找出在歌曲的时间序列中找到的特征。
在此以后,神经网络会输出它对一首歌的理解,其中包括各类相似时间戳、调性、风格、节奏、音量等典型特征。下图为 Daft Punk 的 “Around the World” 一曲中截取 30 秒片断的数据。
图片版权:Tristan Jehan & David DesRoches (The Echo Nest)
最终,这些由一首歌理解到的各类关键的信息可让 Spotify 理解不一样的歌中的一些本质的类似之处,由此基于用户的听歌历史推断出此用户可能会喜欢这首新歌。
以上概况了推荐模型中的三个基本组成部分。正是由这些推荐模型组成的推荐 pipeline,最终构成了强大的每周推荐歌单功能!
固然,这些推荐模型还与 Spotify 更大的生态系统息息相关,这个生态系统中包含了海量的数据,使用大量的 Hadoop 集群对推荐系统践行规模化运做,使得这些引擎可以在大尺度、无穷尽的互联网中顺利地分析音乐相关文章以及无比庞大的音频文件。
我但愿本文的信息能知足你的好奇心(就像个人好奇心被知足了同样)。如今我正在经过我个性化的每周推荐找到我喜欢的音乐,了解以及欣赏它背后的各类机器学习知识。🎶
**资源:
掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 Android、iOS、React、前端、后端、产品、设计 等领域,想要查看更多优质译文请持续关注 掘金翻译计划、官方微博、知乎专栏。