前 言
21世纪是信息化时代,随着信息技术和网络技术的发展,与人们的日常生活早已建立了离不开的联系。对网络音乐服务来说,不管是音乐下载服务,或者是网络音乐电台服务,都需要用到优秀的内容推荐系统去辅助整个系统。个性化音乐推荐系统是目前最流行的应用方法之一。
现有的基于内容的音乐推荐系统通常采用两阶段的方法。他们首先提取传统的音频内容特征,如梅尔频率倒谱系数(1),然后预测用户偏好。然而,这些传统的特性最初不是为音乐推荐而设计的,不能捕捉音频中的所有相关信息,从而限制推荐性能。基于深度信任的新模型网络和概率图模型,我们统一进入一个自动化的过程,同时学习。从音频内容的特点,并提出个性化的建议。与现有的基于深度学习的模型,我们的模型优于他们在暖启动不依赖协同过滤(CF)的冷启动阶段。然后,我们提出了一种有效的混合方法无缝集成自动学习的功能,我们的混合方法不仅大大改善了CF的性能,也优于传统的基于特征的混合方法。
本系统在基于内容的音乐推荐部分采用了Google开源框架Tensorflow的CNN模型,
音乐系统的实现基于Django(后台服务器端)+Layui(前端模板框架)+Mysql数据库+Redis缓存数据库,在基于用户的协同过滤部分采用了有关矩阵相似度之间的计算方程。
(1)梅尔频率倒谱系数 (Mel-Frequency Cepstral Coefficients,MFCCs)就是组成梅尔频率倒谱的系数。他们派生自音频片段的倒谱(cepstrum)表示(anonlinear”spectrun-of-a-spectrum”)。倒谱和梅尔频率倒谱的区别在于,梅尔频率倒谱的频带划分是在梅尔刻度上等距划分的,它比用于正常的对数倒频谱中的线性间隔的频带更能近似人类的听觉系统。这种频率弯曲可以更好的表示声音,例如音频压缩。
第一章 绪 论
本章首先介绍了论文的研究背景,其次简单介绍了本文所做的主要内容,在本章的最后介绍了论文的组织结构。
1.1 论文研究背景
近年来,在互联网大数据发展日益高涨的今天,各种应用开始使用推荐算法,如新闻推荐类的今日头条,短视频类的抖音、快手,网易云音乐的私人FM(调频广播),荔枝FM的推荐,传统视频网站的爱奇艺,bilibili等,都开始使用推荐算法使得自己所拥有的或者说是面向的用户群体更为广泛,而全自动化、优良的推荐算法使得相关工作人员摆脱了原有的手工设置权重,提高了工作效率。在过去,一款没有内容推荐的APP所有人打开都是一样的,但是现如今所有的APP每个人打开所得到的推荐内容是不一样的,无论是新闻系的今日头条,还是短视频系列的所有APP,以及推荐算法和推荐系统的出现,使得有一股隐形的力量在挖掘用户留下的各种显示和隐式反馈,如观看记录,评分纪录,浏览历史等等,根据用户的停留时间,点击频率,来挖掘出用户的特征及个人喜好,从而推荐的内容和信息便会主动地迎合用户,达到用户的理想需求。
在过去的相关推荐里音乐推荐往往是由基于内容的音乐推荐算法作为推荐主体,或者是以CF(协同过滤)推荐算法作为推荐主体实现的,在这个推荐过程中往往有一些不足。
最初的音乐推荐是基于MFCCs的两阶段推荐,第一阶段为提取音乐特征,第二步则由特征推荐用户,但是MFCCs并不能完美的表达出所有的音乐特征,包括音乐的作者、音乐的类型、音乐的语种等等,换言之,根据频谱所做到的仅仅是将音频部分几乎完全拟合,或者是说音频矩阵距离较短的一批次音乐划分为一个类型,且不论不同时间长度的音乐会有什么影响,相同的音频真的可以给用户带来优良的体验吗?并不是,音乐是分类型的,例如常见的摇滚,HIPHOP,雷鬼,纯音乐,亦或是分类更为详尽的电影原声、游戏原声等,这些音乐类型属于音乐的高级属性。一个用户喜欢A类型的音乐(例如HIPHOP),一款基于内容的推荐算法便会一直推荐hiphop的歌曲,这样是不合理的,所以人工的设置权重的方法应运而生,但是非自动化的推荐方法永远是不合理且不实时的,所以在这样的背景下,提出了一种基于内容与用户协同过滤的混合推荐方法。
1.2 音乐推荐算法描述
音乐是互联网中的重要组成部分,目前的音乐网站或者媒体中拥有数以千万计的音乐,假如用户要自己收听每一首音乐来判断自己喜欢不喜欢这首音乐,且不谈用户能不能听完这么多音乐,如果每首音乐都要听完才能判断自己是否喜欢这首音乐的话,那么会有越来越少的用户去选择新歌,去听一些自己没有听过的音乐。推荐算法正是为解决此类问题而产生的。
目前市面上电影推荐算法数不胜数,但大多数应用的还是协同过滤算法,基于用户或者基于内容、评分等等,根据关键词过滤掉无关信息,然后把结果返回给用户。网易云音乐作为国内最大的音乐媒体,每天处理海量的新用户与新歌新专辑的信息,它所使用的是混合推荐算法,并且加入了深度学习,介于网易云平台拥有的大量使用人群,所以他的数据集是丰富多样但充满噪点的,网易云音乐的推荐算法种类繁多,基于音乐内容部分有同类型的歌曲推荐,基于用户本身属性的协同过滤我们可以看到很多评论区下方会有置顶的同城评论,这是因为网易云音乐在处理一个数据量较为稀疏的用户时使用到了基于用户所在地的协同过滤推荐,即相似的用户属性则给用户带来相似的推荐。当然了,推荐算法非常的多,但是想要找到一种适合的算法确实有一定的难度,每种算法都有一定的优缺点,有各自的局限领域,这样推荐算法的选择就成了一个难题,设计者往往需要测试多种算法,了解它的原理及概念,最后再逐一筛选找到最适合的那一个或多个算法。具体的音乐推荐算法将在第二章中详细介绍。
1.3 论文的内容和意义
论文的主要内容有:
1、对现有的音乐推荐算法做深入的了解,总结分析他们的优点与缺点,并对他们的不足进行分析,为我们设计音乐推荐算法做下基础
2、搭建基于神经网络的内容部分的音乐推荐算法并利用Google开源框架Tensorflow对神经网络进行训练
3、基于已有的数据集进行拆分,获得测试集与训练集并对获得的推荐方法进行评测。
本文在训练方向选用机器学习的开源库Tflearn(基于Google框架TensorFlow),在音乐频谱分析方向选用了Linux的Sox应用以及python的eyed3库。
1.4 论文的组织架构
全文共分六章,各章的内容安排如下:
第一章:绪论,本章主要介绍课题项目背景,开发目标和意义。
第二章:推荐算法简介,对现在大多数的推荐算法进行介绍。
第三章:基于内容的音乐推荐部分,主要是对音乐推荐系统的功能需求的详细分析。
第四章:混合算法的设计与实现,主要是介绍基于音乐内容的部分与用户协同过滤相结合的系统权重训练。
第五章:系统实现,主要介绍了系统的主要页面和部分功能。
第六章:总结与展望,对课题进行总结,并对以后的改进进行展望。
第二章 推荐算法简介
2.1 音乐推荐的方法
本文以推荐算法的发展路途,将推荐算法分为传统的推荐算法和非传统的推荐算法。传统的推荐算法有基于内容推荐、协同过滤推荐、基于知识推荐、基于效用推荐、基于关联规则推荐、组合推荐等等,以下对部分进行介绍:
2.1.1 基于内容的音乐推荐方法
基于内容部分(Content-Based Recommendations CB)的音乐推荐算法是一个最为经典的音乐推荐算法,其原理就是对物品进行相似度计算,由用户过去感兴趣的商品进行依据相似度高低排序的商品推荐。
在音乐推荐的领域中也是绝大多数音乐推荐算法所使用的方法,常见的标签内容信息由艺术家,发行时间,流派,播放时长等构成,简单的推荐算法往往由单一label实现推荐过程,例如给用户推荐多首同艺术家的歌曲,或是同属一个流派的 音乐。这样的推荐过程带来的效果是不合理的,当然了处理过程有很多种优化方法, 例如进行数据归一化处理,权衡各个不同指标之间的权重。除此以外还有muti-labels多特征推荐,例如Cyril Laurier[1]提出的将音乐基于标签进行分类方法,将音乐划分为几个比较大的类,通过各个不同的label实现音乐本身与类之间的映射关系。
上文中提到过的MFCCs就是其中一种,通常是以音乐音频本身之间的相似度计算通过聚类将音乐文件进行分类,从而进行的同批次推荐方法。
2.1.2 基于用户协同过滤的推荐方法
协同过滤算法(Collaborative Filtering Recommendation)是推荐系统领域中使用最早最经典和可行性最好的算法之一,基于用户本身或是用户行为的推荐算法原理大多相似,即计算不同用户之间的相似度问题,在处理单一用户数据的时候可以通过所处地域,所受教育程度,性别等特征将用户进行简单划分,这可以用于处理协同过滤中会遇到的冷启动或者是稀疏性问题,基于用户行为的推荐算法大多由用户收听历史和决策行为影响。稀疏性问题是协同过滤无法避免遇到的问题,数据集的极端往往会造成推荐结果糟糕的情况,所以要解决这些问题需要认真考虑。
图2.1 协同过滤的推荐过程
2.1.3 混合推荐算法
由于各种推荐方法都有优缺点,所以在实际中,组合推荐(Hybrid Recommendation)经常被采用。在现有系统中最常见的做法是基于内容与基于协同过滤的混合推荐算法。最简单的做法就是分别用基于内容的方法和协同过滤推荐方法去产生一个推荐预测结果,然后用某方法组合其结果。,组合推荐一个最重要原则就是通过组合后要能避免或弥补各自推荐技术的弱点。常见的组合方式有以下几种:
变换(Switch):根据问题背景和实际情况或要求决定变换采用不同的推荐技术。
加权(Weight):加权多种推荐技术结果。
混合(Mixed):同时采用多种推荐技术给出多种推荐结果为用户提供参考。
特征组合(Feature combination):组合来自不同推荐数据源的特征被另一种推荐算法所采用。
图2.2 推荐算法优缺点
2.2 音乐推荐的指标
1.平均误差MAE(Mean Absolute Error )
平均绝对误差 MAE是对推荐算法质量评价的标准之一 ,它通过计算预测评分与真实评价数 据上的差别来衡量推荐结果的准确性。MAE的值越小 ,推荐准确性越高。假设预测的用户评分集合表示为{P1,…PN},对应 的实际用户评分集合为 {q1,…qN} ,则MAE的计算公式为
2.准确率与召回率(Precision & Recall)
准确率和召回率是广泛用于信息检索和统计学分类领域的两个度量值,用来评价结果的质量。其中精度是检索出相关文档数与检索出的文档总数的比率,衡量的是检索系统的查准率;召回率是指检索出的相关文档数和文档库中所有的相关文档数的比率,衡量的是检索系统的查全率。
以下为定义:
1.Precision Rate = 提取出的正确信息条数/提取出的信息条数
2.Recall Rate = 提取出的正确信息条数/样本中的信息条数
3.F1 = Precision Rate * Recall Rate * 2/(Precision Rate + Recall Rate) (F1即为正确率和召回率的调和平均值)。
其中Precision Rate与Recall Rate两者取值在0和1之间,越接近1,查准率或查全率就越高。
R(u):对用户u推荐的N个物品的集合。
T(u):数据集中用户u真实评分过的物品集合。
2.3 本章小结
本章主要介绍了以往比较流行的一些传统推荐算法,并分析总结了它们的优缺点,简单介绍了新的推荐算法的原理和一些常用的评价指标,为课题的研究准备了一些基础知识,下章将进行基于神经网络的推荐算法设计。
第三章 基于神经网络的内容推荐算法的设计
3.1 数据集及预处理
3.1.1 数据集的选择
在音乐领域的机器学习有注明的数据集MillionSongDataset,是一个由The Echo Nest提供的数据集,分析labels的过程是由众多音乐学者进行人工的判断,所以在音乐的判断过程极为准确,且在数据调用及分析方向提供了众多强有力的接口,所以在最初的数据集选择中我选择了它。
图3.1 MillionSong DataSet
在使用MillionSongDataSet提供的与正文数据集同样结构,包含社交关系,用户播放历史的1G轻量级数据集作为本次实验的数据集之后,数据的众多影响因子可以自行的选择,例如有关社交亦或是地域所带来的影响,但是在发现数据集没有对语种进行区别而大多数数据近乎全为英文的时候,个人考虑到现有的互联网开放资源似乎也可以做到一个简单的这样的数据集,所以依靠爬虫以歌单为个体对某音乐平台的数据进行了获取。
基础的数据集设计理念是由以下几个部分构成的,歌单本身作为一个单位,歌单的labels,歌单的热度(综合评论数与收听人数)歌单本身包含大量的歌曲,歌曲有以下属性:ID(唯一编号), 歌词(可以做词频统计并为音乐系统的实现做基础),歌曲的labels(以矩阵形式表明歌曲的各个参数的属性),歌曲的热度,歌曲的语种,歌曲的作者,歌曲所属专辑,歌曲的相册封面。
而歌单本身在某音乐平台的评论中可以提取相应的词频从而获得歌单的关键词,即作为labels存在,另外在本系统中,采取了以歌单模拟用户的方法, 即一个歌单代表了一个用户,这是因为在某音乐平台中有一个设计理念,即用户所喜欢的歌曲和用户所创建的歌单本质上的类都是歌单,所以在爬虫的过程中,绝大多数歌单即是用户喜欢的音乐,那么在歌单处理的过程中变会生成另一组用户数据。用户数据由以下属性组成:用户的所处地,用户的收听历史,用户的特征偏爱矩阵。
在本次实验中采取了如下图所示的数据结构:
图3.2 歌单爬取结果
由该表单中的数据进行提取分析便可以得到我们的音乐部分数据集:
用户: 用户ID, 用户收听历史, 用户年龄,用户性别,用户所在地区。
歌曲: 歌曲ID, 歌曲曲风, 歌曲名称, 艺术家, 歌词。
评分数据则由歌单组成,其中对于用户单曲循环的音乐评分为5分,用户所喜欢的音乐评分为4分,用户正常听完的歌曲为3分,用户进行切歌的歌曲为2分,用户选择不在喜欢的歌曲为1分。
3.1.2 音频读取与分析
在音频文件的分析软件中,选择了Linux平台下的Sox软件,可以将一首音乐的众多tips展示给用户。
表3.1 Sox音频部分属性列表
Samples read: 20889600
Length (seconds): 236.843537
Scaled by: 2147483647
Maximum amplitude: 0.996857
Minimum amplitude: -0.993195
Midline amplitude: 0.001831
Mean norm: 0.084509
Mean amplitude: 0
RMS amplitude: 0.119258
Maximum delta: 0.729645
Minimum delta: 0
Mean delta: 0.058931
RMS delta: 0.0806
Rough frequency: 4743
Volume adjustment: 1.003
在拥有了Sox之后我们再使用语言集成的eyed3库,基于Sox平台的音频分析库,eyed3库可以通过对音频文件的读取提取出音频的包含艺术家或是曲风众多属性,在eyed中可以将音乐的频谱输出为一个一维矩阵,也就是一个数组形式,例如:
图3.3 某音乐文件频谱
输出的一维矩阵表现为[2180404, 2180403, 2001415…]一个长为140万位的数组,接下来就是对音频文件的分析。
首先需要将音乐文件分解成两块部分,一块为标签部分,一块为音频频谱部分。标签部分包含了所属专辑,专辑艺术家,创作时间,时长,流派等等属性,而频谱部分则表现为图3.1.1的样式。接下来需要对音乐文件做一个分类的过程,首先在我们下载的批量音乐中,只有一半的数据在tips里是拥有Genre属性的,即为流派或者是类别,我们需要对这部分做一个划分,其中70%作为我们的训练集,30%作为我们的测试集。对数据进行划分之后便需要开始构造一个神经网络模型。
3.2 卷积神经网络
卷积神经网络(Convolutional Neural Network,CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。 它包括卷积层(convolutional layer)和池化层(pooling layer)。