基于近邻用户的协同过滤音乐推荐系统,主要是将与目标用户有相同行为和兴趣爱好的用户,形成一个最近邻的推荐群组,从最近邻推荐群组中产生最终的目标用户推荐列表。该推荐系统通过网络爬虫获取虾米音乐网站真实未脱敏用户的行为信息,采用余弦相似度作为求解相似矩阵的算法,从而为目标用户推荐喜欢的音乐,达到推荐目标。
人类已经进入信息爆炸的时代,面对这么庞大的信息,是很难进行人为筛选的,特别是我们经常接触到的信息,比如电影、音乐等等。我们该如何去选择。这给用户带来了很大的困难,在这种情况下一个好的推荐系统是非常有用的。
对于音乐推荐系统来说,推荐系统主要是通过一些已有的用户行为习惯,找到有相同爱好的用户群组,然后分析群组中的用户行为,获取目标用户对歌曲的评分,从而实现个性化的音乐推荐服务,让用户能够通过推荐系统找到自己最感兴趣的音乐。
目前豆瓣FM、网易云音乐等在音乐推荐方面做的比较成功的公司,他们不仅有大量的用户,而且有丰富的用户行为信息,通过用户行为数据这些公司可以挖掘大量有价值的信息,从而做到更加个性化的推荐服务。
协同过滤技术是目前研究最多、应用最广泛的电子商务推荐技术之一[1]。协同过滤算法的主要思想是,根据具有相同的行为兴趣的用户,可以将所有用户按照其行为习惯以及兴趣爱好分成几个推荐的用户群组,对于某个目标用户的推荐可以根据其所属的用户组中的其他用户的偏好来进行推荐。
协同过滤算法可分为两类,分别是基于用户行为的的协同过滤算法和基于内容上的协同过滤算法[2]。基于用户的协同过滤算法主要是通过与其有相同行为和兴趣爱好的用户,形成一个最近邻的推荐群组,最终的推荐行为是从这个推荐群组中产生的。基于内容的协同过滤算法是根据用户对相同 item 的评价来得到最终目标用户的评分结果,从而实现推荐。本文的音乐推荐系统主要是基于用户行为的协同过滤算法。
该音乐系统的整个系统框架构成如图1所示。该框架可以分成以下几个部分:数据集获取、数据预处理、数据分析及算法设计和最终推荐结果的输出部分。
在互联网上有一个叫 MillionSongDataset [3]音乐数据集,它上面收集了目前100多万流行歌曲的信息,以及部分用户的行为信息。但所有数据都是进行脱敏后的数据,只能做研究,要想进行真实的音乐推荐服务,需要获取真实的用户行为数据。该音乐推荐系统最终目的是构建一个真实可用的基于Android移动端的音乐推荐系统,本文只涉及推荐系统构建及算法设计部分,Android端的设计不在本文考虑范围,所以所有信息必须是真实可靠未脱敏数据。
为获取真实可靠未脱敏数据,本文利用目前主流 webmagic 爬虫进行真实数据的获取。目前针对虾米音乐社区进行了用户行为信息爬取,最终获取了大约50万条真实未脱敏的用户行为数据。数据 schemas 包括4部分,userID是虾米音乐网站真实用户昵称,SongName是该用户听过的歌曲名,Singer是该歌曲的演唱者,Count是用户听过该歌曲的次数。原始数据集数据如表1所示:
UserID | SongName | Singer | Count |
---|---|---|---|
唐喜 | 卡农D大调 | 群星 | 1 |
sora | 往日时光 | 黛青塔娜 | 8 |
king | 水城 | 万晓利 | 3 |
糖小孩 | 盛夏光年 | 林忆莲 | 1 |
sora | 卡农D大调 | 群星 | 2 |
由于爬取到的原始数据有的信息丢失,我们需要对原始数据集进行信息规整,删除丢失信息的用户数据数据。并且原始数据记录的是每个用户每天的行为,但实际情况一个用户不可能只有一条记录,比如某用户昨天听了某歌曲共3次,今天该用户又听了该歌曲5次,那么数据预处理部分我们要对这部分用户的行为信息进行预处理,得到该用户该歌曲共8次,最终我们要得到用户在历史行为上的行为总和。此处数据预处理是用阿里巴巴的 ODPS(OpenDataProcessingServices) 平台进行处理。预处理代码参见Github[4]。
推荐的第一步我们需要得到每个用户对每首歌的一个评价矩阵。这里我们用表1的数据为例,得到表2的用户评价矩阵R。矩阵的第一行表示不同的歌曲,矩阵的第一列表示不同的用户,矩阵中对应的坐标是某用户听过某首歌的次数,为空表示该用户没有听过该首歌。
… | 卡农D大调 | 往日时光 | 水城 | 盛夏光年 | … |
---|---|---|---|---|---|
唐喜 | 1 | ||||
sora | 8 | ||||
king | 3 | ||||
糖小孩 | 2 | 1 | |||
… |
衡量用户相似度的方法有很多,如余弦相似度、皮尔逊相似度、Jaccard相似度、LSH等等,本文利用最经典的余弦相似度。余弦相似度公式如下[5]:
通过2.3.2得到用户相似度之后,需要求解目标用户的最近邻用户,这里用快速排序算法来获取 TopK 个最近邻用户,即与目标用户相似度最高的前K个用户。接下来是用最近邻用户的评分来给目标用户进行推荐。音乐推荐系统评分的公式[7]如下:
Recommend(u,i) 表示用户对音乐评分值, U 是与目标用户有相同爱好的用户群组, R 是评价矩阵。得到推荐矩阵之后,再利用快速排序算法来提取目标用户评分最高的前 K 首歌作为最终的推荐结果。
通过上面的推荐算法之后得到最终的目标用户的推荐结果,推荐结果表如表3所示。其中SongName是推荐的歌名,Singer是其演唱者,Socre是评分值,就是最终推荐的依据。
SongName | Singer | Socre |
---|---|---|
奇妙能力歌 | 陈粒 | 123.07836337387708 |
易燃易爆炸 | 陈粒 | 106.76131934980407 |
Night Time | The fin. | 43.718180863139686 |
Loving Strangers | Russian Red | 43.246429879044435 |
Sorrow Is My Lover | 热斑 | 34.292579972249285 |
青春修炼手册 | TFBOYS | 32.82627477172324 |
本文的主要工作是利用真实未脱敏的虾米音乐用户的行为数据,采用已有的基于用户的协同过滤算法,完成了一个推荐算法的所有过程,实现了推荐的基本功能,最终得到我们对目标用户的推荐结果。
[1]LAWRENCERD, ALMASIGS, KOTLYARV, et al. Personalization of supermarket product recommendations
[ R]. IBM Research Report,2000(7):173-181
[2]徐小伟. 基于信任的协同过滤推荐算法在电子商务推荐系统的应用研究. 东华大学. 2013
[3]http://labrosa.ee.columbia.edu/millionsong/
[4]https://github.com/Aaron0927/musicRecommend
[5]https://zh.wikipedia.org/wiki/余弦相似性
[6]郭艳红.推荐系统的协同过滤算法与应用研究.大连理工大学博士学位论文.2008:1-41
[7]李雪. 基于协同过滤的推荐系统研究. 吉林大学. 2010
【完】