http://chaoqun.17348.com/2009/02/slope-one-for-music-recommender-system/
不知不觉,研究歌曲相关推荐快半年了,第一篇文章利用orange进行关联规则挖掘完成于2008.08.26,到现在基本搞定基于矩阵奇异值分解(SVD)的协同过滤算法,期间得到了很多朋友的帮助,在此致谢。有些收获,将逐步的分享出来,有兴趣的可以参照研习。
对于Slope One算法,不熟悉的可以参照我之前的文章:Slope one:简单高效的推荐算法,已经被很多人证明有很好的推荐效果。
Slope one算法中有一个很重要的步骤是获取用户的打分数据,这个对很多网站都很费劲,很多用户都会听歌,但大多懒得去给歌曲打分,另外用户打分的时候会比较困惑,该打多少分呢?喜欢这首歌,是打4分还是5分呢?费劲。
我这里给出的是另外一种方法,做法是分析用户的听歌记录,一般网站都会记录这样的记录,统计一段时间内用户的听歌记录,我们得到下面格式的数据:
用户ID 歌曲ID 听歌次数
比如某个片段:
3389 9527 23
3389 9528 56
3306 1211 78
3306 9527 45
表示用户3389听歌曲9527的次数是23,听9528的次数是56,诸如此类。这样的数据当然不能直接用来做Slope one,需要把数据格式化到某个区间。我们分析一下用户听歌的行为,一般来说最喜欢的歌曲听的最多,越喜欢的歌曲听的越多,听的少的歌曲自然不那么喜欢。所以我们可以简单的模拟用户对歌曲的打分:
用户对歌曲的打分 = 用户听此歌曲的次数 / 用户听单首歌曲的最大次数
这样就可以把打分数据规整到0~1之间,还是上面的数据:
3389 9527 23/56
3389 9528 56/56
3306 1211 78/78
3306 9527 45/78
用户听的最多的歌曲打分是1,其他歌曲的打分等于听歌次数除以最大次数,我们就获得了用户的打分数据了。剩下的工作就是按照标准的Slope One流程走了,程序代码可以参考:http://code.google.com/p/openslopeone/
贴出几个实例大家看看,第一次做的结果,再去做的话应该比这个要好一些:
歌曲 | 推荐歌曲 |
南无大悲观世音菩萨 刘小茜 | 梵音大悲咒 齐豫 大悲咒 齐豫 观世音菩萨发愿偈.大悲咒 齐豫 大悲咒 邝美云 般若波罗蜜多心经 齐豫 大悲咒 齐豫 清净法身佛 齐豫 阿弥陀佛在心间 小娟 吉祥如意 凤凰传奇 |
好一朵茉莉花 朱昌耀 | 理查德-克莱德曼《梦中的婚礼》 合辑(欧美) 茉莉花(汉族民歌) 雷佳 好一朵茉莉花-笛子 合辑(内地) 最浪漫的事 赵咏华 沧海一声笑 罗文 how can i keep from singing Enya 生死不离 成龙 羞答答的玫瑰静悄悄地开 孟庭苇 |
过三关 吴卓羲 | 别怪她 吴卓羲 生命有一种绝对 五月天 春日(电视剧’春日’主题曲) 吴卓羲 爱玛仕小姐 吴卓羲 别人问起 吴卓羲 别怪她(Dance Remix) 吴卓羲 别怪她 - 吴卓羲 合辑 米老鼠 五月天 One Last Dance Craig David 新不了情 薛凯琪 |
Tips:
做Slope one之前最好过滤掉那些超热门的歌曲,因为很多人都听过了,会让这些歌曲经常出现在推荐结果里面,我的感觉是过滤掉Top100就可以了。