基于深度信念网络DBN 的音乐推荐系统设计

2021-12-07 07:45田杰胡秋霞司佳豪
电子设计工程 2021年23期
关键词:首歌曲列表信念

田杰,胡秋霞,司佳豪

(西安航空学院计算机学院,陕西西安 710077)

面对成千上万的音乐,人们可能会在海量的音乐中听到一首比较喜爱的音乐,但是不能每次都遇到喜爱的音乐[1-2]。而音乐推荐系统可以很好地为用户提供想要听的音乐。

基于网易云的音乐内容,平台会记录用户在网易云平台的所有行为,最终会结合用户画像和用户行为为用户推荐相关歌曲[3-4]。龚志等[5]提出了基于多模态的音乐推荐系统。彭程、张瑞旸、胡昌平等分别对睡眠音乐、场景变化的实时音乐和融合个体兴趣与群体认知的音乐个性化推荐模型和系统进行了研究[6-8]。鲍美英、李涛等分别设计了基于Android 的音乐推荐系统和基于协同过滤算法的自动化隐式评分音乐双重推荐系统[9-10]。

以上研究者在音乐推荐系统方面都取得了一定效果。但是音乐搜索方法已经变得越来越落后,所以需要发展一个更先进的搜索方法更好地为用户进行音乐推荐。文中设计了基于深度信念网络(DBN)的音乐推荐,通过深度信念网络进行无监督的训练,得到可以进行相似度计算的音乐向量,有效地提取到音乐特征并且完成分类,通过深度信念网络模型的训练得到音乐彼此之间的向量关系,将这些彼此的音乐向量进行皮尔逊相关系数的计算,按音乐间彼此的相似度进行降序排序,以此来完成最终的音乐推荐,形成服务于用户的个性化音乐推荐系统。

1 系统概述

文中设计了基于音乐内容和深度信念网络的音乐推荐系统,推荐系统的详细过程如图1 所示。该音乐推荐系统第一步先将音乐数据全部获取,第二步在得到这些音乐数据后将这些数据进行预处理,得到适合于模型输入的数据,第三步将这些数据输入到已经建立好的DBN 模型中进行训练,第四步是训练后得到一个音乐推荐列表,最终形成音乐推荐系统。

图1 音乐推荐系统流程图

2 基于DBN的音乐推荐系统设计

2.1 音乐数据获取

该系统选用的是网易云音乐中的数据[11]。网易云是一个人们比较成熟的音乐产品,该文系统在网易云庞大的音乐数据中共选择了1 200 首音乐,一共分为10 类,分别是电子、爵士、摇滚、乡村、朋克、轻音乐、古典、说唱、民谣和中国风共10 类,这些音乐数据就是该文音乐推荐系统所依赖的数据,在此数据上进行构建,如图2 所示。

图2 10类音乐数据

2.2 数据预处理

所采用的音乐数据是MP3 格式,所以首先需要处理的是将MP3 格式进行转换,将格式转换后接着就要用到梅尔倒谱系数(MFCC)进行数据处理。梅尔倒谱系数是在Mel标度频率域提取出来的倒谱系数。

主要将MP3 格式转换为输入模型的数据。首先将这些不同类别的音乐用编码表示,分别是0到9,然后分别读取每首歌曲,读取每首歌曲需要耗费的时间是非常巨大的,故在此过程中需要等待将所有的数据读取好,之后使用torchaudio直接读取MP3文件,通过梅尔倒谱系数提取原始特征得到一个新的向量[12-14]。

MFCC 参数提取包括预加重、分帧、加窗、快速傅里叶变换、三角带通滤波器和离散余弦变换(DCT)计算,其计算流程如图3 所示。

图3 MFCC计算流程

2.3 DBN模型设计

2.3.1 输入和输出层设计

首先将这些不同类别的音乐用编码表示,分别是0 到9。然后分别读取每首歌曲,使用torchaudio可以直接读取MP3 文件,然后通过MFCC 提取原始数据特征得到一个新的向量,因为提取后的数据长度太大,无法直接输入模型,故将数据,也就是一首歌曲拆分成很多段相同长度的段,每段一共包含2 500 帧,然后将得到的数据分别保存成Tensor 形式。Pytorch 的数据类型为各式各样的Tensor,Tensor可以理解为高维矩阵。

读取上一步的数据,然后设置数据迭代器。迭代器是一种对象,每个迭代器对象代表容器中的确定的地址。batch_size=512 表示每次训练的批量数目为512 个,visible_units 表示初始输入的向量长度为1 000。

2.3.2 隐藏层节点数的选择

输入层中的神经元数量等于正在处理的数据中的输入变量的数量。在输出层中的神经元的数量等于与每个输入相关联的输出的数量。

通常,对所有隐藏层使用相同数量的神经元就足够了。对于某些数据集,拥有较大的第一层并在其后跟随较小的层将导致更好的性能,因为第一层可以学习很多低阶的特征,这些较低层的特征可以馈入后续层中,提取出较高阶特征。

该音乐推荐系统RBM 有两个隐藏层,分别为512和256个单元,DBN 的训练过程分为两个步骤,第一个步骤是分别训练两个RBM 隐层,RBM 训练是无监督学习,然后到第二个RBM 的隐层,第二个步骤是训练整个模型。DBN 是由两个RBM 和一个BP 全连接构成的。

2.3.3 激活函数的选择

激活函数(activation function):在多层的神经网络中,上一层的神经元(neuron)信号,即线性单元wx+b算出的结果,要输入到下一层,但是这个信号在输入到下一层之前需要一次激活f=sigmoid(wx+b),或f=ReLU(wx+b)。需要选择一些信号在下一层的神经元激活。

文中使用自适应时刻估计算法(Adaptive Moment Estimation,Adam)。该方法通过存储AdaDelta 的指数衰减平均值,保持了先前梯度的指数衰减平均值。这一点与动量类似,该音乐推荐系统应用的就是Adam 算法[15]。

2.3.4 损失函数的选择

损失函数是一种衡量损失和错误(这种损失与“错误”地估计有关,如费用或者设备的损失)程度的函数。

交叉熵损失函数经常用于分类问题中,特别是在神经网络做分类问题时,也经常使用交叉熵作为损失函数,此外,由于交叉熵涉及到计算每个类别的概率,所以交叉熵几乎每次都和sigmoid函数一起出现。

用神经网络最后一层输出的情况,来看整个模型预测、获得损失和学习的流程:神经网络最后一层得到每个类别的得分scores,该得分经过sigmoid 函数获得概率输出,模型预测的类别概率输出与真实类别的one hot形式进行交叉熵损失函数的计算[16-19]。

2.4 产生音乐推荐

音乐推荐系统的目标是为在线音乐用户提供个性化推荐服务,收集用户在听音乐过程中的行为,并进行分析,帮助用户发现可能感兴趣的歌曲,自动生成音乐播放列表。在所有音乐的相似度计算完毕之后,根据最前的三首歌曲相似度进行推荐。最终得到一个列表,此列表最终呈现的是跟这首歌相似度最高的三首歌曲。

3 结果与分析

该音乐推荐系统采用Python 语言,使用Pytorch库。Pytorch 是一个对多维矩阵数据进行操作的张量(tensor)库,广泛应用在机器学习相关应用场景中。

音乐推荐系统在经过了模型训练之后会生成一个音乐之间的一个向量列表,部分列表如图4 所示。

图4 歌曲向量相关系数

图4 显示的是经过训练后所得的歌曲向量相关系数,这些系数还需要经过处理后才可以得到最终的推荐。

得到歌曲向量相关系数后需要经过皮尔逊相关系数进行计算,经过计算后会得到每首歌曲与其他歌曲的相似度,0 为最少,1 为最大,但是相似度1 可能不会出现,图5 是音乐相似度列表。

图5 显示的是部分歌曲的相似度。可以看出歌曲本身与自己的相似度是零,但是与其他歌曲的相似度各不相同,有比较低的,也有比较高的,但是最终要形成一个音乐推荐表,还需要进行最终的处理。

图5 音乐相似度列表

得到音乐相似度之后,需要将最靠前的三首歌曲相似度作为最终的推荐,这三首歌曲就是这一首歌最终得到的推荐歌曲列表,图6 是部分推荐歌曲的结果。

图6 中,一共有1 200 首歌曲形成最终的推荐,此图只是截取了部分歌曲的推荐列表。

图6 音乐推荐列表

音乐推荐系统可以精确到特定一首歌,比如当听到Galen Crew-Sleepyhead 这首歌,可以通过此音乐推荐系统得到最高的3 个相似度歌曲Skeeter Davis 的The End of the World、Garth Brooks 的Mom 和Keren Ann 的Right Now &Right Here,意思是对于喜欢听Galen Crew-Sleepyhead 的用户来说,这三首歌是最佳选择。

该系统最终的展示成果就是产生一个最相似的三首歌曲列表,经过相似度的比较,共为1 200 首歌曲产生了推荐列表。

4 结论

该音乐推荐系统基于内容和深度信念网络,首先进行梅尔倒谱系数的转换,以网易云音乐中的部分数据作为样本,将音乐数据转换为网络模型需要的数据;设计了基于深度信念网络(DBN)的音乐推荐,利用深度信念网络的深度学习模型来提取音乐特征。通过无监督的训练得到进行相似度计算的音乐向量,有效地提取到音乐特征并且完成分类,通过深度信念网络模型的训练得到音乐彼此之间的向量关系,将这些彼此的音乐向量进行皮尔逊相关系数计算,得到音乐间彼此的相似度,将这些相似度从大到小进行排序,最终形成相似度最高的三首音乐推荐列表来完成最终1 200 首歌曲的音乐推荐。

猜你喜欢
首歌曲列表信念
为了信念
学习运用列表法
扩列吧
发光的信念
张傲全新单曲《爱我所爱》暖心来袭
陈曦全新单曲《不转弯》震撼发行
信念
列表画树状图各有所长
不含3-圈的1-平面图的列表边染色与列表全染色
信念的传承