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

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

 

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

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

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

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

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

音乐推荐

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

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

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

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

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

实现过程

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

下载MP3文件

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

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

9种流派:

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

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

转换音频频谱图

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

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

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

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

分割图像为256×256

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

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

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

训练一个卷积神经网络

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

上图是本文搭建的卷积神经网络模型,可以看到,左上边的光谱图像将图像转换成一个表示每个像素的颜色的数字矩阵;之后数据经过卷积层、池化层以及全连接层等处理后送入到右下角的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个例子获得了最类似的推荐。由于网络受限,播放需要通过外网,图片下面对应着播放链接。


(https://youtu.be/H1cN4uzxZZw)

(https://youtu.be/cPHpr_u62ZM)

(https://youtu.be/cizXW9vvoRA)

(https://youtu.be/VDuOu4BMDz8)

(https://youtu.be/7M5_TKOOGBg)

(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/

Linkedin:https://www.linkedin.com/in/mattsrm/

Github: https://github.com/mattmurray

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

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

 

时间: 2024-10-29 11:18:40

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

带你测试对比深度学习框架!TensorFlow,Keras,PyTorch...哪家强?(附数据集)

深度学习框架哪家强:TensorFlow?Caffe?MXNet?Keras?PyTorch?对于这几大框架在运行各项深度任务时的性能差异如何,各位读者不免会有所好奇. 微软数据科学家Ilia Karmanov最新测试的结果显示,亚马逊MXNet在CNN.RNN与NLP情感分析任务上性能强劲,而TensorFlow仅擅长于特征提取. 测试详情更新在Ilia Karmanov的GitHub项目DeepLearningFrameworks(https://github.com/ilkarman/De

深度学习必备手册(上)

更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud 请收下这份关于人工智能的根目录--博客整理系列(一) 关于数据科学的那些事--博客整理系列(二) 机器学习必备手册--博客整理系列(三) 扩展眼界的都在这--博客整理系列(四) 深度学习必备手册--博客整理系列(六) 深度学习的概念源于人工神经网络的研究,如果追溯深度学习的概念还是要回到2006年Hinton那篇论文,基于深信度网(DNB)提出非监督贪心逐层训练算法,未解决深层结构相关的优化难题出现的论文.

深度学习必备手册(下)

更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud 请收下这份关于人工智能的根目录--博客整理系列(一) 关于数据科学的那些事--博客整理系列(二) 机器学习必备手册--博客整理系列(三) 扩展眼界的都在这--博客整理系列(四) 深度学习必备手册(上)--博客整理系列(五) 深度学习的概念源于人工神经网络的研究,如果追溯深度学习的概念还是要回到2006年Hinton那篇论文,基于深信度网(DNB)提出非监督贪心逐层训练算法,未解决深层结构相关的优化难题出现的论

TensorFlow和Caffe、CNTK、MXNet等其他7种深度学习框架的对比

主流深度学习框架对比 深度学习研究的热潮持续高涨,各种开源深度学习框架也层出不穷,其中包括TensorFlow.Caffe8.Keras9.CNTK10.Torch711.MXNet12.Leaf13.Theano14.DeepLearning415.Lasagne16.Neon17,等等.然而TensorFlow却杀出重围,在关注度和用户数上都占据绝对优势,大有一统江湖之势.表2-1所示为各个开源框架在GitHub上的数据统计(数据统计于2017年1月3日),可以看到TensorFlow在st

TensorFlow与主流深度学习框架对比

引言:AlphaGo在2017年年初化身Master,在弈城和野狐等平台上横扫中日韩围棋高手,取得60连胜,未尝败绩.AlphaGo背后神秘的推动力就是TensorFlow--Google于2015年11月开源的机器学习及深度学习框架. TensorFlow在2015年年底一出现就受到了极大的关注,在一个月内获得了GitHub上超过一万颗星的关注,目前在所有的机器学习.深度学习项目中排名第一,甚至在所有的Python项目中也排名第一.本文将带我们简单了解下TensorFlow,并与其他主流深度学

[译]搭建个人深度学习平台:GTX 1080 + Ubuntu 16.04 + CUDA 8.0RC + CuDNN 7 + Tensorflow/Mxnet/

本文讲的是[译]搭建个人深度学习平台:GTX 1080 + Ubuntu 16.04 + CUDA 8.0RC + CuDNN 7 + Tensorflow/Mxnet/, 原文地址:Build Personal Deep Learning Rig: GTX 1080 + Ubuntu 16.04 + CUDA 8.0RC + CuDnn 7 + Tensorflow/Mxnet/Caffe/Darknet 原文作者:Guanghan Ning 译文出自:掘金翻译计划 本文永久链接:github

(转) TensorFlow深度学习,一篇文章就够了

TensorFlow深度学习,一篇文章就够了 2016/09/22 · IT技术 · TensorFlow, 深度学习 分享到:6   原文出处: 我爱计算机 (@tobe迪豪 )    作者: 陈迪豪,就职小米科技,深度学习工程师,TensorFlow代码提交者. TensorFlow深度学习框架 Google不仅是大数据和云计算的领导者,在机器学习和深度学习上也有很好的实践和积累,在2015年年底开源了内部使用的深度学习框架TensorFlow. 与Caffe.Theano.Torch.MX

深度学习入门:投身深度学习你需要哪些准备?

更多深度文章,请关注:https://yq.aliyun.com/cloud 我想回答一些我经常被问到的问题:我需要什么样的电脑来进行深度学习?为什么fast.ai推荐Nvidia GPU?你为初学者推荐什么深度学习库?你如何把深度学习引入生产?我认为这些问题都属于一个总的主题:你需要什么(硬件.软件.背景和数据)来进行深入学习? 这篇文章是针对那些新进入这个领域的,并且对入门感兴趣的人. 你需要的硬件 我们感谢游戏业 电子游戏行业(收入方面)大于电影和音乐行业的总和. 在过去的20年里,视频游

手把手教你安装深度学习软件环境(附代码)

为了进行强化学习研究,我最近购置了一台基于 Ubuntu 和英伟达 GPU 的深度学习机器.尽管目前在网络中能找到一些环境部署指南,但目前仍然没有全面的安装说明.另外,我也不得不阅读了很多文档来试图理解安装细节--其中的一些并不完整,甚至包含语法错误.因此,本文试图解决这个问题,提供一个详尽的软件环境安装指南. 本文将指导你安装 操作系统(Ubuntu) 4 种驱动和库(GPU 驱动.CUDA.cuDNN 和 pip) 5 种 Python 深度学习库(TensorFlow.Theano.CNT