如何用深度学习打造自己的音乐推荐系统
来源:简书 发布时间:2020-05-22 11:06:33

【嵌牛导读】:深度学习如今已经在生活的各个方面都被广泛应用。它也可以用来进行打造音乐推荐系统。

【嵌牛鼻子】:深度学习 音乐推荐系统

【嵌牛提问】:如何用深度学习发现一首歌属于哪个流派?

【嵌牛正文】:

这些年我(作者 Matt Murray——译者注)在音乐上可没少花钱,经常到一个叫JunoDownload的网站上付费下载 MP3 歌曲。这个数字音乐下载网站在 DJ 圈里很火,在上面能买到各种流派的歌曲。

总之这是一个非常不错的音乐资源,为在售的每首歌都提供了一个 2 分钟的 MP3 格式的试听样本。唯一的问题是····在这个网站上找到一首老歌实在是太困难了。

这个网站极度热衷推广新歌曲,当然这也说得过去,因为新歌卖得火就意味着赚的更多了。但是那些以前的老歌呢?

音乐推荐

其实在 JunoDownload 网站上已经存在一些推荐歌曲,在网站主界面上有在售歌曲排行榜,新歌排行榜,以及由一些 DJ 和网站编辑创建的推荐歌单。

购买了这首歌曲的人还买了

在每首歌的页面上,窗口右手边显示了“”,“”和“”,这些信息倒也有用。

你可能还喜欢

但是坐拥这么大的一个音乐数据库,我觉得这个网站上却唯独缺少基于内容的推荐类型,比如“”,也就是根据用户当前所听的歌曲和已购买的歌曲,向用户推荐他可能喜欢的同类歌曲。

当然我也知道,现在几乎所有的音乐 App 都已经有这种功能,但是亲自用深度学习技术创建一种能帮自己发现歌曲的系统,还是很酷的,对吧?所以我决定搭建一款音乐推荐系统。

过程

要想实现这个目标,需要几个步骤,包括获取数据、处理数据和训练模型。

整个工作流程涉及:

下载 MP3 文件

我需要做的第一件事就是下载大量 MP3 样本文件用作数据。

在爬取网站上超过 40 万首歌曲文件的单曲信息后,我会任意选择 9 种不同的音乐流派,并按这 9 个流派从每个流派中随机选择 1000 首歌曲。

这 9 个歌曲流派是:

碎拍音乐

雷鬼乐

慢摇

鼓打贝斯

经典电音

嘻哈乐

极简音乐

摇滚乐

迷幻舞曲

在接下来几天内,我下载了全部 9000 首 MP3 文件。

将音频转换为声谱图

一份音频文件内包含的数据非常多,所以这一步的大部分工作实质上就是浓缩音乐中的信息,提取主要特征并去除所有的噪声数据。基本上这是一项降维操作,首个步骤就是把音频转换为图像形式。

利用离散傅里叶变换法,我将音频信号转换为频域,以这种方式处理了全部 9000 个 MP3 音频文件,为每首歌保存了它们的声谱图。所谓声谱图就是声音频率的频谱随着时间变化的可视化表示。图谱中颜色的深浅表示该频率下的声音大小。

我选择创建单色的声谱图,如下所示:

这是从嘻哈单曲中生成的约为 20 秒的音频,其中声谱图中 X 轴为时间,Y 轴为声音频率。

将图像分为 256 x 256 的正方图

如果用这些数据训练模型,我需要将所有的图像具有相等的维度,所以我将全部声谱图分割为 256 x 256 的正方图。这表示每张图上约为 5 秒的音频。

现在我总共有超过 18 万 5 千张图像,每张图像都有一个标签,注明了音乐流派。

我将数据分为包含 12 万张图像的训练集、包含 4 万 5 千张图像的验证集和 2 万张图像的 Holdout 验证集。

用图像训练一个卷积神经网络

我用我的图像数据训练了一个 CNN 网络,我需要教它来识别不同类型的音乐在声谱图图像中“看起来”是怎样的,所以我使用了音乐流派标签训练它从图像中识别音乐流派。

下面是 CNN 工作流的可视化图:

首先以上图左上角的声谱图开始,将它转换为一个由表示每个像素中颜色的数字组成的矩阵。从这里开始,数据会经过工作流中的多个层级,每经过一层,矩阵的形状就会被转换,直到最终抵达右下角的 softmax 分类器。这个分类器是一个由 9 个数字组成的向量,包含了 CNN 将 9 个音乐流派分配给声谱图的概率。

还有一步就是全连接层,这是一个由 128 个数字组成的向量,它们实质上是在图像经过多个网络层传递后从中提取的 128 个音乐特征。思考这一层的另一种方法是原始图像中的所有关键信息都已浓缩为“解释”图像的 128 个数字。

那么我们怎么使用 CNN 模型呢

经过训练后,模型能够以 75 的准确率分类音乐流派,我觉得这个准确率还可以,因为划分音乐流派有时是相当主观的,而且音乐有时常常也不止一个流派。下面是模型分配各个流派的准确率:

碎拍音乐:91%

雷鬼乐:90%

慢摇:79%

鼓打贝斯:78%

经典电音:71%

嘻哈乐:71%

极简音乐:70%

摇滚乐: 63%

迷幻舞曲:61%

模型为歌曲分配音乐流派的效果还是很不错的,我怀疑嘻哈乐、鼓打贝斯和慢摇之间可能存在一些交叉,这可能导致了分类准确率降低。由于碎拍乐和其它 8 种流派区别很大,所以这可能是为何模型分类它的准确率很高的原因。

不过,这些数字对我来说并不是最重要的,我真正关心的是模型能否区分不同类型的音乐。

音乐推荐系统

现在我已经训练了一个能在声谱图上“看”音乐的神经网络,不再需要 softmax 分类器了,所以移除了这一层,并为数据集中全部 18 万 5 千张图像提取了它们的 128 个音乐特征向量。

每张图像仅表示大约 5 秒长的音频,样本 MP3 文件总共长 2 分钟,我大约有 23 张图像——因此每个音乐文件会有 23 个特征向量。我计算了每首歌的平均向量,得到了 9000 个特征向量,每个对应我最初下载的 9000 首歌曲中的每一首。

和开头一样,我把这 9000 个音频文件转换为 9000 张声谱图,将它们分割为 18 万 5 千张更小的声谱图,再用它们训练一个卷积神经网络。然后我从这些图像中提取了 18 万 5 千个特征向量,为 9000 个原始音频文件计算了它们的平均向量。

此时已经从音乐文件中提取了 128 个特征,这些音乐文件都有不同的音乐特点。那么为了创建能推荐具有相似特点的歌曲的推荐系统,我只需找到哪些向量彼此最相似。要得到这个结果,我需要计算出 9000 个向量的余弦相似性。

歌曲推荐

最后一步就是随机选择一首歌,然后让模型从我下载的 9000 首 MP3 歌曲数据集中返回相似音乐(具有最大余弦相似性的歌曲)的最佳推荐。

结语

我觉得整件事情最酷的地方就是完全不用人监督,想象一下,如果你自己一首接一首的听完这 9000 首歌曲,为它们标记好流派,这得花多长时间啊。假设你有一百万首歌曲呢?

所以我对我创建的这款音乐推荐系统还是很知足的,它能在无需人类事先听取音频的情况下,很好地找到风格很相似的歌曲。

作者:莫斯科的雨夜

标签: 音乐推荐系统

猜你喜欢

Win10电脑系统不能关机怎么解决?具体的方法是什

电脑使用的时间久了,总是会出现各种各样的问题,其中系统不能关机是最为经常出现的情况,每次只要...更多

2020-12-17 15:34:15

用视频“大变活人”分几步 AI换脸越来越溜儿

Deepfake是一种换脸技术,可以将图片或视频中A的脸换到B的头上。其名字由深度机器学习(deep machin...更多

2020-12-09 17:11:38

电竞行业网友怎么看? 选职业仍需理性

电竞行业近年来广受关注,网友怎么看?据光明网数据新闻工作室统计,近一个月来网上相关讨论约333 9...更多

2020-12-08 17:25:43

香港浸会大学的住宿情况怎么样?有哪些缺点?

现如今有许许多多的学者们选定去该地域接着进行念书受业钻研修业研习,但是相应的信息也需要我们提...更多

2020-12-04 11:41:14

美国“七姐妹”女子学院怎么样?

七姐妹是美国东北部七所历史上享有盛誉的女子私立文理学院。该联盟的起源可以追溯到1915年在瓦萨学...更多

2020-12-03 13:51:42

加拿大留学热门专业 服装设计拉萨尔学院怎么样?

拉萨尔教育集团(LaSalle College International Education Network)一、学校简介?学校的性质:...更多

2020-12-02 15:26:25

英国留学选择伯明翰大学怎么样?伯明翰大学硕士回

伯明翰大学(University of Birmingham)始建于1825年,是位于英国第二大城市伯明翰的世界百强名校...更多

2020-12-02 15:26:26

i20是什么?收到后应该做哪些事情?

01表格获取申请美国留学的学生在拿到学校录取通知书时会连带收到I-20表格,I-20表格是每位去美国读...更多

2020-12-01 13:45:15

英国GCSE课程是什么?GCSE的课程都有什么?

GCSE是什么?GCSE的英文全称是General Certificate of Seco ndary Education,中文译为普通中等...更多

2020-11-30 14:56:02

澳门镜湖护理学院介绍 入学要求有哪些?

澳门镜湖护理学院是镜湖医院慈善会属下机构,由创办于一九二三年的镜湖护士助产学校发展而成。在近...更多

2020-11-27 14:57:58