作为网易云音乐的老用户,一直以来都特别喜欢云音乐推荐的歌曲,它仿佛是你肚中的蛔虫,总能猜透你的心思,而优秀的个性化推荐和良好的社区氛围也使得其在所拥有的版权相对有限的情况下仍然吸引着越来越多的人选择这个特别的音乐软件。由于本文的分析未经网易内部求证,所以可能部分内容不一定严谨正确,仅是以一个长期用户的角度试分析云音乐推荐系统的运作模式。
一、什么是推荐系统
推荐系统的本质是用特征去联系用户和信息,具体而言就是在用户没有明确需求的情况下,一方面帮助用户发现对自己有价值的信息,一方面让信息能够展示在对他感兴趣的用户面前。
二、为什么要做音乐推荐系统
1.这是信息过载的时代
随着信息技术和互联网的发展,人们逐渐从信息匮乏的时代走入了信息过载的时代,单就歌曲而言,时至今日歌曲的积累量已经达到亿级,在这样的背景下,无论是音乐的消费者还是音乐的创作者都遇到了很大的挑战。对音乐消费者而言,如何发现他感兴趣的音乐成了件麻烦事,而对音乐创作者而言,如何让自己的音乐被对他感兴趣的人听到也变得愈发困难,而推荐系统就是解决这一矛盾的重要工具。
2.这也是个性化需求的时代
从用户的角度看,随着时代的发展,人们的听歌需求也在改变,仅仅靠传统的编辑推荐、热门排行已经不能满足用户对音乐更深层次的需求了,用户的音乐口味向小众和个性化发展,愈发渴望能够从海量的音乐库中发现符合自我个性与情感表达的歌曲。与之对应,具有千人千面、发掘长尾优点的推荐系统无疑是最适合的方式之一。
三、音乐推荐的实现方式
1.推荐算法
音乐是一个典型的长尾物品丰富,用户个性化需求强烈的领域,且物品的数量与变化程度都不如用户方面显著,十分适用于基于物品的协同过滤算法(以下简称ItemCF),核心思想:假使喜欢音乐A的用户也大都喜欢音乐B,则认为这两个音乐具有相似性,计算相似度的算法如下图:
N(i)和N(j)分别表示喜欢物品和j的用户,N(u)表示用户u喜欢的音乐集合需要注意的是,因为热门音乐的消费面广,使得任何音乐都和热门音乐有很大的相似度,同时每个用户产生行为的权重也不一样,比如活跃用户因为大量的消费行为,导致许多音乐之间都产生了联系,这显然是不能完全等同不活跃用户产生的行为的,所以这里对热门音乐和活跃用户做了一定的惩罚。一般认为,冷门音乐比热门音乐更反映兴趣,不活跃用户比活跃用户的消费行为更有价值,当然此处“专家”用户不包括在活跃用户中。
在得到音乐的相似度后,我们可以通过如下公式计算用户u对一个音乐j的兴趣(兴趣度*相似度),并得到一个初始的推荐结果,即和用户历史上感兴趣的音乐越相似的音乐,越有可能获得更高的相似度。
S(j,k)是物品j最相似的K个物品的集合,wji是音乐j和i的相似度,rui表示用户u对音乐i的兴趣
2.过滤&排序模块
在获得了初始结果后,需要对数据做进一步的处理,才能得到可用的推荐列表。首先推荐系统会根据某些既定策略进行过滤,比如质量很差的音乐、用户在某个时间段内产生过规定行为(如喜欢/下载)的音乐、用户表现出明显厌恶的音乐等等。
举个例子:张三喜欢听音乐A,但是不喜欢听音乐B且选过不喜欢,但是音乐A和音乐B具有很高的相似度,那么根据初始的推荐算法计算,音乐B会进入初始推荐结果中,此时系统为了保证张三得到满意的推荐结果,就需要在正式推荐列表中过滤音乐B。
在过滤完成后,将剩余的结果按照已有的排名规则进行Ranking,一般来说排名规则需要综合考虑相似度、用户预估反馈(听/下载/喜欢)、新颖性、多样性以及时间多样性等因素,得到一个包含多个解释变量的方程,根据每首歌计算出的值。
这里着重解释下时间多样性,时间多样性是指用户在不同时间或在产生新的行为后使用推荐得到的结果是不尽相同的。要提高推荐系统的时间多样性要从两个地方着手,首先要保证推荐系统的实时性,在用户有新行为时实时调整推荐结果以满足用户最近的需求。第二方面是要在用户没有新行为时,也要保证推荐结果每天都有变化。
具体来看:当用户在每日推荐对推荐的歌曲中点击不感兴趣后,歌单会马上移除这首歌曲,同时系统需要实时记录这些数据并转化为新特征,保证在之后的推荐中实时用到该特征;同时每日推荐也需要保证即使用户在连续的几日没有使用的情况下,歌单的内容也是不断变化的。
3.归一化与多样性问题
既然提到多样性,就不得不讨论下归一化的问题,尤其在物品具有较多类目的音乐平台中,我们更需要考虑下面这样一个场景:
假设张三喜欢五首A类歌曲,喜欢五首B类歌曲,A类歌曲之间的相似度为0.7,而B类的歌曲相似度只有0.4,A类与B类的歌曲相似度只有0.3,那根据上文的相似度公式得到的推荐结果应该全为A类歌曲,而这显然是不符合我们的预期的。
上述的情况的产生主要是由于一些音乐类的类内音乐相似度较高(一般来说,热门的类的类内相似度比较大)如果不进行归一化,有可能会导致推荐列表都是某一类的音乐,所以在实际操作中,可以将所有A类和B类歌曲分别看做一个物品,这样推荐的结果应该是A类和B类歌曲数量占比差不多,再从A类和B类中分别选出5首歌,可以按照上文的方式进行选取。当然在实际操作中,归一的粒度粗细还需要视具体情况决定。
4.冷启动问题
由于上文所提到的推荐方法都依赖于用户的历史数据,这里就伴生了一个问题,对于第一次使用的用户以及第一次被收录的音乐,在没有任何数据留存的情况下,如何解决冷启动?
4.1用户冷启动
i.利用社交网络账号信息
网易云音乐在注册和登录界面支持用户通过社交网络账号。导入用户在社交网络上的好友信息和公开发布的信息进行数据分析,这里可能涉及到对人口统计学信息(性别、职业)、公开发布信息的兴趣分析来获取初步的用户画像;同时可以基于社交好友关系链进行推荐。
ii.要求用户描述自己的兴趣
利用选择的音乐标签,根据内容属性推荐音乐,在冷启动时推荐的音乐应该具备以下特点:
a.具有代表性和区分性,尽量不要推荐那些绝大部分人都会喜欢的热门音乐;
b.比较热门,用户在初次表达兴趣时倾向于自己较熟悉的音乐,而过于冷门的音乐不容易唤起用户的表达意愿;
c.启动物品集合的多样性,在初期推荐时应该提供覆盖率尽可能高的启动物品集合,让用户更好的反馈自己的兴趣;
4.2音乐冷启动
对于新收录的音乐由于没有用户使用数据的积累,无法根据上文的方式进行推荐,
i.在资源位上适当倾斜
在产品运营时可以在一些非推荐位置留出曝光机会,比如新歌榜,歌单等,从而增加用户对新收录音乐产生行为的可能性。
ii.辅之以其他推荐方式
根据音乐的内容信息,将它推荐给曾经喜欢过和其内容相似音乐的用户;同时在上文提到的推荐算法中可以增加利用物品的内容信息计算的物品相关推荐以及基于用户的协同过滤,在实际推荐系统运行中,可以赋予不同的推荐引擎的以不同的权重,得到一个混合的初始结果,再统一进行过滤与排序。
四、一些建议
很多时候音乐是一种表达与发泄自我情绪的方式,一个好的音乐推荐系统应该要能够感受到用户当前的情感状态,帮他们发现当前最适合他的音乐。所以个人建议可以在个性化推荐时考虑增加一个心情上下文,在功能实现的方式可以有很多种方式,可以让用户主动的去告诉你他的心情,也可以通过用户当下消费音乐的类型和数量去主动学习用户的心情特征;可以在现有的私人FM里面增加一个心情FM,亦可在其他位置增加入口,这里不去细致展开,但最重要的是希望一切关于我的时光,无论好与坏我都想听见,而你都能懂。
网易云音乐曾经的slogan: 听见·好时光
#先写到这,之后再补充上关于每日推荐与私人FM的区别#
网友评论