私人定制——使用深度学习Keras和TensorFlow打造一款音乐推荐系统

  1. 云栖社区>
  2. 博客列表>
  3. 正文

私人定制——使用深度学习Keras和TensorFlow打造一款音乐推荐系统

【方向】 2017-08-02 09:52:16 浏览8945 评论0

摘要: 还在为虾米音乐等APP的精准推送感到惊奇嘛?快来瞅瞅,自己也可以私人定制一个音乐推荐系统啦。本文利用深度学习打造一个音乐推荐系统,处理起来不是很复杂,主要是先收集音乐制作成一个音乐库,然后对音乐进行处理转换成相关的频谱图,不同类型的音乐对应不同的频谱图,之后利用这些频谱图训练搭建的卷积神经网络模型,以此实现后续的音乐推荐。

更多深度文章,请关注:https://yq.aliyun.com/cloud

随着生活水平的极大提高,人们在很多情况下都会边听音乐边做一些事情,比如在健身房、出行路上等,越来越多的人也开始慢慢走在Hifi发烧友的这一条不归路上,频繁地换耳机、换功放等,小编在这里劝一下大家不要向某米公司的为发烧而生,要学习某米公司的高性价比,发烧永无止境,适可而止就好。那大家有没有关注一些音乐APP呢,国内做的好的音乐APP有网易云、虾米音乐及QQ音乐等,我们会发现这些APP中都会有两个类似的功能——我喜欢的音乐及每日歌曲推荐,其中我喜欢的音乐这个功能会记录你喜欢的音乐,而每日歌曲推荐是根据你喜欢的音乐风格来推荐给你一些你未曾听过的音乐,看起来是不是很黑科技呢?其实这种技术早就存在,被称作推荐算法,在生活中随处可见。根据百度百科的定义推荐算法是计算机专业中的一种算法,通过一些数学算法,推测出用户可能喜欢的东西,目前应用推荐算法比较好的地方主要是网络。所谓推荐算法就是利用用户的一些行为,通过一些数学算法,推测出用户可能喜欢的东西。比如淘宝购物、页面定位广告等。

随着大数据时代的到来,我们的个人数据会被巨头公司以各种方式获取,获取的数据越多,对我们的分析也就越清楚,推荐得也更加准确,有时候甚至算法做出的推荐选择比我们自己都更加清楚自己内心想法,这点在婚恋交友网站上可能会有大的突破,分析彼此的性格,比如说分析两个男人的条件,最后推荐最适合你的对象。未来的世界里,数据就是上帝,你我都避免不了自己的数据被人收集,只能说利用好巨头公司提供的各种服务吧。

言归正传,本文将利用深度学习向读者展示一个音乐推荐系统的搭建,感兴趣的读者可以动手尝试下。国外的音乐获取没有国内这么便利及免费,这也说明国外的月亮一定比国内圆,国内的有些服务确实比国外做的方便。本文作者(后续将以“我”代替)最近几年已经junodownload网站花了很多钱,主要是购买购买mp3音乐,该网站是一个主要用于DJ数字下载网站,并且是一个巨大的销售跟踪平台。

7a069ebc7396db2c12841bb0ab3898d70e2a0bc8

从图上看该网站是一个丰富的音乐资源分享网站,他们每一首出售提供慷慨的2分钟试听MP3文件(国内还是良心)。唯一遇到的问题是网站上寻找一个不是最新的或目前不在销售排行榜的音乐真的很难。

该网站主要侧重于推广新的内容,并认为新的音乐产生最多的收益,但对于网站上的99%其他销售能全部跟踪

音乐推荐

78dd01c558fa4794b50497415b826f7371d1d53b

网站目前已经有一些跟踪建议。在主页上还有销售列表、新发布的歌单人员DJ策划的大量的推荐列表。

最重要的是,在每个单独的跟踪/单网页,窗口的右侧会引荐买了这首歌曲的那首歌(类似于亚马逊网站卖电子书籍)”、“艺术家的其他版本其他版本家唱片公司,这也是有用的

对于这样一个大型音乐数据库,我觉得还是缺少根据用户目前正在听一的歌曲推荐一些可能也会喜欢歌曲建议一些类似的歌曲类型,这也会增加到购物中的机会等。

如果你能发现音乐是几年前发布的,并且类似于你喜欢的一个新的歌曲,会不会很酷?当然,Juno网站错过了不提供这种类型的推荐带来的潜在销售

受到最近阅读博客的启发,对自己的音乐库中的歌曲进行音乐流派分类,我决定尝试用类似的方法来建立一个音乐推荐系统

实现过程

实现这一目标需要采集大量数据、处理和模型训练步骤。下面是所有涉及的步骤:

下载MP3文件

首先要做的第一件事就是下载大量样本的MP3文件。

网站上超过400000的音乐文件可供销售,随意挑选了9不同的音乐流派,然后从每种流派中都随机选择1000首。

9流派:

  • 碎拍
  • 舞厅
  • 慢摇
  • 与贝斯
  • 经典电音
  • 嘻哈/ RB
  • 微声舞曲
  • 摇滚/独立音乐
  • 迷幻舞曲

在接下来的几天日子里,我下载了这些流派总共9000个MP3文件。

转换音频频谱图

一个音频文件包含的数据太多,所以在这部分的整个过程中的很大一部分本质上是试图将信息从音乐中浓缩、提取主要特征消除所有的“噪音”。它本质上是一个降维的预处理,这第一阶段是音频转换成图像格式。

利用离散傅里叶变换音频信号转换到频域,处理收集的9000MP3音频文件,每首歌保存为光谱图像。光谱图是一种表示声音的频谱随时间变化可视化,图片上颜色的强度代表该频率的声音振幅。

本文选择创建单色光谱图,如下图所示

3fad27a826eea2b95ca2f8cb3b3555e7aed06369

上图是20秒左右嘻哈音乐产生的声音。X轴表示时间Y轴表示声音的频率。

分割图像为256×256

为了对这些数据训练一个模型,需要所有的图像统一为相同的尺寸,所以所有的光谱图分割为256×256大小

de7136440cb7f13b961ff0554eaec5bd7ebc4516

切割完图片后,总共得到185000多张图片,每一张图像都标记与它所代表的音乐流派的标签。

下面将数据分为训练集120000张、验证集45000测试集20000

训练一个卷积神经网络

利用上部分中的图像数据训练一个卷积神经网络,该网络要学习不同类型的音乐对应的频谱图像,所以使用类型标签训练该网络能从图像识别音乐的类型

38f49f16518ac3c7ab35d26f4d28bf9a9ee4cfbb

上图是本文搭建的卷积神经网络模型,可以看到,左上边的光谱图像将图像转换成一个表示每个像素的颜色数字矩阵;之后数据经过卷积层、池化层以及全连接层等处理后送入到右下角softmax分类器,分类器给出一个9位数的矢量,其中每位分别对应着9音乐流派的概率,最后选择其中最大概率位置的流派为最终识别流派

卷积神经网络的表现如何呢?

本文搭建的卷积神经网络模型能够以75%的精度分类歌曲的音乐流派,我个人认为结果还是比较好(后续可以调参及调整网络模型提高识别精度),这是音乐是主观的,一首歌曲常常会有一个以上的类型。

下面是每种类型歌曲的分类精度的详细情况

  • 迷幻舞曲:91%
  • 与贝斯:90%
  • 舞厅:79%
  • 碎拍:78%
  • 经典电音:71 %
  • 慢摇:71 %
  • 摇滚/独立音乐:70%
  • 微声舞曲:63%
  • 嘻哈/ RB:61 %

从结果中可以看到在分类迷幻电音时候表现优异,而分嘻哈/ RB音乐时效果不是很好可能的原因是数据集之间有一些交叉可能导致分类精度较低,比如嘻哈、碎拍和舞厅比较类似迷幻电音完全不同其他8个类型的音乐这可能是其表现优异的原因吧

关于音乐推荐系统

现在有了训练的神经网络,该网络能够“看清”音乐的频谱图,因此我们不再需要softmax分类器,所以移除模型中的全连接层

每个图像代表超过5秒的音频信息而每个MP3文件大约2分钟长,因此每个音乐文件大约对应着23图像,即获得23特征向量;然后计算这23个特征向量的均值向量总共得到9000的特征向量;每个特征向量对应着之前下载的9000首歌

回顾整个过程–开始收集9000音频文件,将其转化为9000个频谱图然后将频谱图分成185000个更小的频谱,并利用这些图像训练搭建的卷积神经网络。最后从所有这些图像提取185000个特征向量计算其均值得到9000个对应原始音频文件的平均向量。

基于已经音乐文件提取128个特征,这些特征能够确定音乐所属的类型为了创建有着类似特征的推荐歌曲,所以需要找到最相似的向量。为此计算9000向量之间的余弦相似性。

推荐例子

最后一步是随意选择一首歌,然后训练好的模型从9000首歌曲集中推荐一首与之最类似的音乐(最大的余弦相似)。

图是推荐的几个例子播放的第一首歌是随机选择的,第3个例子获得了类似的推荐。由于网络受限,播放需要通过外网,图片下面对应着播放链接。

109019893f688afe0ad73a9f223522e700fa6d97

(https://youtu.be/H1cN4uzxZZw)

31f42448ec360ce1afeaac1bc9fa6ed3b13caa1b

https://youtu.be/cPHpr_u62ZM

214a27a8623331dfe41f33d423b370be451b4cb0

https://youtu.be/cizXW9vvoRA

7ba68537ebab14a10702d9b087724ebf52274844

https://youtu.be/VDuOu4BMDz8

5b7dee5cf5309180a9066325e3d556bd55eab741

https://youtu.be/7M5_TKOOGBg

5c57e7412c62dc9ee572e1e4d7f3c507a692a82b

https://youtu.be/PnK8pX8f9A4

整个过程完全无监督的,这点是很厉害的。想象一下,如果听完这9000首歌后并评估这些歌曲的不同的特征和类别需要花多少时间类似的工作也在潘多拉进行,已经开始尝试这种音乐基因工程根据这篇文章25个音乐分析师听完并对10000首歌进行类所花的时间是一个月,而本文的整个项目从开始到完成三个星期,并提取了多达450个不同的音乐特征。该模型的表现与人类的表现类似,并且在查找歌曲不需要任何人预音频,此外花费极少的时间。

总的来说,本系统上手不太复杂,收集音乐并对音乐文件进行预处理需要花费一些时间,感兴趣的读者可以按照这个思路动手实现一些其他类似的推荐系统,也可以制作成一款APP哦,相比国内的音乐APP而言,国外的是不是弱爆了?赶紧开发一款在海外市场发行吧。

相关代码

https://github.com/mattmurray/juno_crawler

https://github.com/mattmurray/music_recommender

作者信息

Matthew Murray:数据科学家和分析师

个人主页http://mattmurray.net/

Linkedinhttps://www.linkedin.com/in/mattsrm/

Github: https://github.com/mattmurray

本文由北邮@爱可可-爱生活老师推荐,阿里云云栖社区组织翻译。

文章原标题《Building a Music Recommender with Deep Learning》,作者:Matthew Murray译者:海棠,审阅:李烽

文章为简译,更为详细的内容,请查看原文

 

【云栖快讯】阿里云栖开发者沙龙(Java技术专场)火热来袭!快来报名参与吧!  详情请点击

网友评论