keras、TensorFlow打造音乐推荐系统

参考:https://yq.aliyun.com/articles/154475

推荐系统定义

根据百度百科的定义:推荐算法是计算机专业中的一种算法,通过一些数学算法,推测出用户可能喜欢的东西,目前应用推荐算法比较好的地方主要是网络中。所谓推荐算法就是利用用户的一些行为,通过一些数学算法,推测出用户可能喜欢的东西。比如淘宝购物、页面定位广告等。

本文借鉴参考网址的做法,利用深度学习做一个音乐推荐系统,感兴趣的读者可以动手尝试下。

数据准备

本文提供六种根据网易云音乐歌单下载好的六种风格的音乐:

链接: https://pan.baidu.com/s/17uuVklry0ygntfYTKjvBPQ 提取码: c403

其中分为古风、民谣、爵士、说唱、摇滚和轻音乐6种, 分别是300首左右,长短不一。

得到音频的频谱图

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

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

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

为了对这些数据训练一个模型,需要将所有的图像统一为相同的尺寸,所以将所有的光谱图分割为256×256大小。处理好的光谱图可以从以下链接中下载:

链接: https://pan.baidu.com/s/1OcvTAWPSp7yRa2dy8G0Jew 提取码: 368f

神经网络训练

神经网络的网络结构如下:

训练好的神经网络模型下载:

链接: https://pan.baidu.com/s/14Y2V9pkbjWWXnd9AfvcBgQ 提取码: 35hh

神经网络表现

准确度:

损失函数:

测试集上的混淆矩阵:

测试集的分类报告:

特征向量提取

去掉训练好的神经网络的最后几层,取全连接层的128维输出作为特征向量。
特征提取网络的结构如下:

每个256*256的图像的提取的特征向量可以从以下链接获取:

链接: https://pan.baidu.com/s/1WoI1ZPfWJ27dF21AwHcCbA 提取码: 7n83

由于每个音乐长度不一,所以可以得到256*256的频谱图的数量也不一样,简单处理,直接将每一首音乐对应的特征向量加和求平均作为这一首音乐的特征向量。

每一首音乐的特征向量可以从以下链接获取:

链接: https://pan.baidu.com/s/1FLsknuSpKeqmpKU-ctOZZg 提取码: hn60

特征提取模型下载:

链接: https://pan.baidu.com/s/1su27R_459tWlBnbICp8SZg 提取码: yz3b

音乐推荐

为了创建有着类似特征的推荐歌曲,所以需要找到最相似的向量

随机挑一首音乐的特征向量,从1799首曲库中计算特征向量之间的余弦相似度,找到top6(最高的是自己,余弦相似度为1)。

推荐效果如下:

古风测试歌曲:陌上花开.mp3
推荐歌曲1:空城·旧忆.mp3
推荐歌曲2:燕燕于飞.mp3
推荐歌曲3:春既已逝.mp3
推荐歌曲4:腐草为萤.mp3
推荐歌曲5:旧竹新酒(Cover:长歌红影乱&林斜阳).mp3
--------------------------------------------
民谣测试歌曲:旅人的梦.mp3
推荐歌曲1:荏苒冬春去.mp3
推荐歌曲2:小雨日记.mp3
推荐歌曲3:一个西藏.mp3
推荐歌曲4:梦回家乡.mp3
推荐歌曲5:梵高先生.mp3
--------------------------------------------
爵士测试歌曲:Our Love (Album Version).mp3
推荐歌曲1:So Nice.mp3
推荐歌曲2:Love mail.mp3
推荐歌曲3:You Belong To Me.mp3
推荐歌曲4:Spanish harlem.mp3
推荐歌曲5:I'm Not In Love.mp3
--------------------------------------------
说唱测试歌曲:The Anthem.mp3
推荐歌曲1:They Reminisce Over You.mp3
推荐歌曲2:Whole Lotta Lovin'.mp3
推荐歌曲3:You Got Me - Album Version (Explicit).mp3
推荐歌曲4:Knock Knock.mp3
推荐歌曲5:Gangsta Gangsta.mp3
--------------------------------------------
摇滚测试歌曲:10_37.mp3
推荐歌曲1:All I Had.mp3
推荐歌曲2:Little Child.mp3
推荐歌曲3:Dreams Tonite.mp3
推荐歌曲4:Down at the Dinghy.mp3
推荐歌曲5:Runner.mp3
--------------------------------------------
轻音乐测试歌曲:Life.mp3
推荐歌曲1:Waltz.mp3
推荐歌曲2:Mirage.mp3
推荐歌曲3:The sound of silence.mp3
推荐歌曲4:Down by the Sally Gardens.mp3
推荐歌曲5:Threnody.mp3
--------------------------------------------

总结

总的来说,整个过程并不复杂。再参考了参考网址中的思想后,自己从库的安装到全部完成只花了大概五天,感兴趣的读者可以自己试试。

相关代码

https://github.com/Angus1996/MusicRecommendation