Spotify揭秘:如何用算法实现歌曲精准推送

2017 年 12 月 28 日 论智 Bing
来源:Medium
编译:Bing

Spotify是全球最大的正版流媒体音乐服务商,虽然因为某些原因暂未进入大陆市场,但是其用户已达1.4亿以上。它的使用模式与我们熟知的XX音乐、XX云音乐类似,可免费在线收听正版音乐,但不能下载。这种音乐服务方式收到了全球几十个国家用户的喜爱。

本文作者Sophia Ciocca是Spotify的忠实用户,她最喜欢的功能就是“每周歌曲推荐”。每周一,Spotify会根据用户最近听歌的偏好对其推荐30首歌曲,Sophia认为:“这让我有一种’被看到’的感觉,Spotify比我生活中的任何一个人都要了解我的音乐口味。”

有这种感觉得不止Sophia一人,Twitter上就有许多用户对Spotify这一精准推荐给与莫大的好评。而公司也注意到了这一点,他们在音乐推荐算法上也投入了更多资源。所以,Spotify到底是如何做到每周给用户推荐30首“最合口味”的歌曲的呢?在正式研究开始前,让我们先看看其他音乐服务商的模式,再与Spotify形成对比。

在线音乐服务的发展历程


早在本世纪初,Songza就利用手动推荐推出而在线音乐精选的界面,创建个性化的音乐播放列表。“手动推荐”的意思是,一些“音乐专家”或管理团队会用人工将他们认为不错的音乐放在一起,让观众只听他们制作出的播放列表。这种方法虽然有效,但是由于它是简单地手工组合,因此不能考虑到每位听众的个性化口味

和Songza一样,Pandora也是音乐精选推荐的最早玩家之一。它采用了稍微高级的方法:让一群人在听音乐的同时,为每首曲目选择一组描述性的词语,然后为每首曲目打标签。然后,Pandora的代码可以简单地过滤某些标签,以推荐类似的音乐播放列表。

与此同时,MIT媒体实验室推出了一款名为“回声巢”(The Echo Nest)的音乐信息处理器,它生成个性化音乐的方法更先进。Echo Nest使用算法分析音乐的音频和文本内容,使其能够识别音乐,执行个性化推荐,创建播放列表并分析。

最后,Last.fm采取了另一种方法,称为协同过滤(collaborative filtering)来识别用户可能喜欢的音乐。Last.fm至今仍然存在。

既然已有这么多音乐公司为精准推荐做了努力了,Spotify的方法究竟与其他方法有何不同,在哪里更胜一筹呢?

Spotify的三种推荐模式

实际上,Spotify并不只用一种创新的推荐模式,而是将其他服务商的最佳方法混合在一起,创建出了自己独特而强大的推荐引擎

要生成“每周音乐推荐”,Spotify使用三种模型:

  1. 协同过滤模型,即Last.fm最初使用的模型,通过分析你的行为和其他用户的行为工作;

  2. 自然语言处理(NLP)模型,通过文本分析工作;

  3. 音频模型,通过分析原始音轨工作。

接下来,让我们一个一个来研究一下!

协同过滤模型

首先,先了解一下背景知识。很多人听到“协同过滤”这个词的时候,会想到Netflix,因为它是最初使用协同过滤算法来加强用户推荐的公司之一。他们通过用户对电影的星级评分决定给“相似”用户推荐什么电影。

随着Netflix使用成功,协同过滤模型被广泛应用。到目前,如果有人想做推荐算法,首先要考虑的就是协同过滤。

与Netflix不同的是,Spotify没有让用户为歌曲打分的功能。相反,Spotify的数据是私密的,数据流记录下我们收听的曲目以及额外的流数据,比如用户是否将该曲目添加到自己的播放列表中,或者是否在收听后访问了歌手的主页。

但到底什么是协同过滤?它是如何工作的?下面的对话就大致为我们描述了一下:

可以看到,左边的人喜欢歌曲P、Q、R、S,右边的人喜欢Q、R、S、T。然后协同过滤会默默地说:

嗯……你们有三首共同喜欢的曲目:Q、R、S,所以你们可能口味相近。因此,你们可能会喜欢别人听过的歌曲,但你们从未听过。

所以,左边的人可能会去听一下T,而右边的人会试着听一下P。很简单对吧?

但是,Spotify要想把这一概念用于数以百万的用户,该怎么实现呢?

答案是,矩阵加Python库!

其实这个矩阵非常非常大,每行代表1.4亿用户中的一位,每列代表Spotify数据库中3000万首歌曲之一。

然后,在Python库中运行这个长且复杂的矩阵分解公式:

完成之后,我们最终会得到两种类型的向量,分别用X和Y表示。X是用户向量,代表一个用户的喜好,Y是歌曲向量,代表单首歌曲的信息。现在我们拥有了1.4亿用户向量以及3000万歌曲向量。这些向量实际上只是一堆没有意义的数字,但是当它们进行比较时就非常有用。

为了找到哪些用户的音乐偏好与我类似,协同过滤将我的向量与其他用户进行比较,最终向我展示与我最相似的用户。Y向量也是如此。

协同过滤的效果相当不错,但是Spotify认为加入另一个工具,他们能做的更好。那就是NLP。

自然语言处理(NLP)

Spotify第二种音乐推荐方法是利用自然语言处理模型。模型的源数据都是常规的在线词语:互联网上的元数据、新闻文章、博客以及其他文本。

自然语言处理,即让计算机理解人类语言的能力,本身就是一个宽泛的领域,通常通过情感文本分析来获得结果。

本文不讨论NLP背后的详细机制,Spotify应用的是一个更高水平:Spotify不断在网页上查找人们关于音乐的博文或评价,找出人们对某些歌手或歌曲的评价,他们经常用什么形容词或语言评价这些歌曲,是否有与这些歌曲相比较的其他歌曲或歌手等等。

虽然我不知道Spotify具体怎样处理他们的数据,但我知道Echo Nest处理数据的方法。他们会把数据分为cultural vectors或top terms。每位歌手和每首歌曲每天都有数千条变化的top terms。每个term都有一个相关的权重,这说明了描述的重要性。

然后,与协同过滤形似,NLP模型使用这些terms和权重来创建歌曲的向量表示,然后判断两首音乐是否相似。酷吧?😎

原始音频模型


看到标题,你可能会问:前两种方法已经得到很多数据了,为什么还要分析音频本身?

首先,引入第三种模型毫无疑问会让推荐结果更精确。但是除此之外,这一模型还有另一个作用:与前两种模型不同,原始音频分析考虑了新歌。

比如,你有一位创作型歌手朋友,他的歌曲发布到Spotify后只播放了50次,所以能被协同过滤的机会很小。同样,互联网上也很少有这首歌的身影,没人提起过它,所以NLP模型也不好使了。幸运的是,还有原始音频模型啊!它可不会将流行曲目和新曲目区别对待。所以有了它,新发布的歌曲也有机会出现在“每周歌曲推荐”的列表上。

好了,那么现在的问题是,怎么分析这抽象的原始音频数据呢?

当然是用卷积神经网络啦!

CNN常用的场景是面部识别。不过在Spotify里,他们将像素换成了音频。下面是一个神经网络架构的例子:

这一神经网络有四个卷积层,输入的是音频帧的时频表示,然后将其连接形成声谱图。

音频帧通过这些卷积层后,你可以看到一个“全局时域池化层”(global temporal pooling layer),它在整个时间轴上集中资源,有效地计算在一首歌的时间内所学特征的数据。

经过处理后,神经网络生成对歌曲的理解信息,包括这首歌的拍号、音调、调式、节拍、响度等。下图是从Daft Punk的歌曲《Around the World》中截取的30秒片段。

最终,对歌曲关键特征的把握使Spotify能够了解歌曲之间的相似性,从而根据用户的收听记录判断他们会喜欢哪些歌曲。

以上就是Spotify音乐推荐的三种模式,当然,这些模式都与Spotify更广泛的生态系统相连,其中包括大量的数据存储以及使用大量Hadoop集群来扩大推荐范围。

其实,国内类似的音乐软件实现的推荐功能与Spotify的原理相差不大,有兴趣的同学可自行查资料研究,希望本文的信息能满足你的好奇心。

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

登录查看更多
6

相关内容

Spotify 是一个起源于瑞典的音乐平台,提供包括四大唱片公司和众多独立厂牌在内,约 3200 万歌曲的流媒体服务。至 2016 年 3月,其全球活跃用户总数约为 9000 万,包括约 3000 万付费用户。该服务目前在安道尔、阿根廷、澳大利亚、比利时、丹麦、德国、西班牙、爱沙尼亚、芬兰、法国、希腊、冰岛、爱尔兰、意大利、拉脱维亚、列支敦士登、立陶宛、卢森堡、马来西亚、摩纳哥、墨西哥、荷兰、新西兰、挪威、波兰、葡萄牙、瑞士、新加坡、瑞典、土耳其、美国、英国、奥地利、台湾和香港运营。
专知会员服务
142+阅读 · 2020年6月15日
商业数据分析,39页ppt
专知会员服务
157+阅读 · 2020年6月2日
【SIGIR2020】LightGCN: 简化和增强图卷积网络推荐
专知会员服务
72+阅读 · 2020年6月1日
斯坦福2020硬课《分布式算法与优化》
专知会员服务
117+阅读 · 2020年5月6日
专知会员服务
31+阅读 · 2020年4月24日
【Amazon】使用预先训练的Transformer模型进行数据增强
专知会员服务
56+阅读 · 2020年3月6日
【反馈循环自编码器】FEEDBACK RECURRENT AUTOENCODER
专知会员服务
22+阅读 · 2020年1月28日
【综述】关键词生成,附10页pdf论文下载
专知会员服务
52+阅读 · 2019年11月20日
推荐 :如何改善你的训练数据集?(附案例)
数据分析
3+阅读 · 2019年6月19日
推荐系统产品与算法概述 | 深度
AI100
11+阅读 · 2019年6月13日
我是怎么走上推荐系统这条(不归)路的……
全球人工智能
11+阅读 · 2019年4月9日
推荐|网易云音乐分析之推荐算法
人人都是产品经理
10+阅读 · 2018年2月26日
【智能商务】海量商品查找利器—苏宁搜索系统
产业智能官
5+阅读 · 2017年12月1日
【大数据】如何用大数据构建精准用户画像?
产业智能官
12+阅读 · 2017年9月21日
VIP会员
相关VIP内容
专知会员服务
142+阅读 · 2020年6月15日
商业数据分析,39页ppt
专知会员服务
157+阅读 · 2020年6月2日
【SIGIR2020】LightGCN: 简化和增强图卷积网络推荐
专知会员服务
72+阅读 · 2020年6月1日
斯坦福2020硬课《分布式算法与优化》
专知会员服务
117+阅读 · 2020年5月6日
专知会员服务
31+阅读 · 2020年4月24日
【Amazon】使用预先训练的Transformer模型进行数据增强
专知会员服务
56+阅读 · 2020年3月6日
【反馈循环自编码器】FEEDBACK RECURRENT AUTOENCODER
专知会员服务
22+阅读 · 2020年1月28日
【综述】关键词生成,附10页pdf论文下载
专知会员服务
52+阅读 · 2019年11月20日
相关资讯
推荐 :如何改善你的训练数据集?(附案例)
数据分析
3+阅读 · 2019年6月19日
推荐系统产品与算法概述 | 深度
AI100
11+阅读 · 2019年6月13日
我是怎么走上推荐系统这条(不归)路的……
全球人工智能
11+阅读 · 2019年4月9日
推荐|网易云音乐分析之推荐算法
人人都是产品经理
10+阅读 · 2018年2月26日
【智能商务】海量商品查找利器—苏宁搜索系统
产业智能官
5+阅读 · 2017年12月1日
【大数据】如何用大数据构建精准用户画像?
产业智能官
12+阅读 · 2017年9月21日
Top
微信扫码咨询专知VIP会员