「网易云音乐」歌单推荐算法:技术同学体验反推

我是创始人李岩:很抱歉!给自己产品做个广告,点击进来看看。  

推荐算法可以通过APP表现进行反推,不会100%准确,但应该也八九不离十。

「网易云音乐」歌单推荐算法:技术同学体验反推

推荐依据

推荐算法不是无根之水,它必须借助用户的数据才可以进行推荐。即使是冷启动,也需要获得你的微博微信(你的登录方式)或其他已注册用户的热门喜好。

具体的数据包括:

  • 浏览记录
  • 页面停留时间
  • 歌曲播放次数
  • 点击歌曲但未播放记录
  • 点击歌曲且播放完成记录
  • 歌曲、歌单、歌手的收藏记录
  • 歌单播放次数和歌曲所属标签
  • 个人属性(性别,年龄,地理位置等)

……

这样的数据在算法模型里叫做特征,也就是通过这些历史行为数据中的特征,推荐算法可以进行非常精准的个性化推荐。在几年前,网易云音乐其实还没有那么“神”,很多推荐莫名其妙,但是现在的算法相对来说已经非常精准了。

推荐算法

在说歌单的同时,也会给大家看看网易云音乐这个APP里一共有哪些地方用到了推荐算法:

  • 场景一:开屏广告(按用户画像推荐/全量发布)
  • 场景二:私人FM(实时推荐)
  • 场景三:主页推荐-每日推荐、歌单推荐、电台推荐(搜索召回排序、多因素加权)
  • 场景四:云村推荐-云村广场、好友动态(搜索召回排序、多因素加权)
  • 场景五:视频推荐(根据历史行为精准推荐)

场景一 :开屏广告(按用户画像推荐/全量发布)

「网易云音乐」歌单推荐算法:技术同学体验反推

算法:有时候打开的广告会不一样,有时候会重复。全屏广告费用很高,假如不是独占类型的,那这块用到的可能有一些简单的 人群匹配 或者 用户画像。 如果是单次广告独占,则有可能是按照广告商的要求投放。18年之前没有这个广告功能,但是网易要恰饭的,能理解。

场景二:私人FM(实时推荐)

私人FM和电音位于个人主页的头部位置,用户点击率非常高。因为二者本质上很相似,这里只谈FM的算法。

「网易云音乐」歌单推荐算法:技术同学体验反推

私人FM和单曲、歌单推荐的最大区别是,歌单推荐是 一次性生成 一个歌曲/歌单列表,但FM只推荐下一首,没有“上一首”功能,这意味着推荐算法会更关注你的瞬时兴趣。因为FM只有喜欢、听完、切歌三种反馈,相对来说比歌单推荐要简单很多,但相对的,信息也少了很多。

可以推算,FM用到的具体方式是由“播放、喜欢、切歌”来判断用户对推荐结果的喜好程度。使用的算法应该是相似性召回和基于用户、基于内容的协同过滤三合一,这一点和单曲推荐很相似,甚至两个功能都使用了用一套推荐算法。

FM有个额外的要求是实时推荐,可以将私人FM理解为一个由动态变化的推荐歌曲组成的歌曲序列,这里面应该使用了深度学习算法中的“ 下一项推荐 ”模型来生成,用到的可能有Transformer或GRU/RNN模型。

实时推荐的意思是,上一首是“lemon”,如果你听完了,那么下一首可能会给你推荐米津玄师的另一首歌,或者相似的日文歌。如果我在听小英雄的OP,但没听完就切歌了,那么序列中的下一首本来是冰海战纪的ED,此刻可能就会变为一首英文流行歌。

网易云音乐是如何推荐歌单给不同用户的?

场景三:主页推荐 (这块包含的比较多,最主要的是“推荐歌单”功能)

网易云音乐是如何推荐歌单给不同用户的?

算法反推:页面可以拆开来看

网易云音乐是如何推荐歌单给不同用户的?

(1)每日推荐(多因素加权)

这里用到的是单曲推荐,具体算法不难想到,从我的每日推荐歌曲来看,基本是:

  • 我听过的歌手的其他单曲
  • 我听过的歌曲所属分类的其他热门歌曲
  • 我听过、收藏过、评论过的歌曲
  • 听过我听过歌曲的人,听过的其他热门歌曲

每个部分都分配有不同权重,权重高的,推荐的位置(排序机制)就会靠前,权重低的则会靠后。比如我的列表里,蓝莲花排名第一,但是我最近并没有听过蓝莲花,也没听过许巍的歌。但是我听过民谣/摇滚标签类的歌曲,并且很容易猜到,听过这个标签的人,基本都会听蓝莲花(热门)。那么我的列表里,第1项和第4项的权重应该是更高的。

网易云音乐是如何推荐歌单给不同用户的?

现在的算法几乎都是千人千面,所以每个用户都有自己的个性化匹配机制,也就是张三的权重和李四的权重是不同的,这也反映出一种个人喜好。而相对于FM,这里的推荐更关注用户的长期兴趣。由用户最近一个月、一个周的行为数据构成。

上面这4种只是主要推荐方式,在具体应用时,算法团队会有更多机制来筛选这些歌曲并在列表内排序,提高对新用户、不活跃用户的推荐精度,而这里用到的算法有协同过滤,基于内容召回以及相似性召回等。对算法具体原理感兴趣的可以自行搜索,这里不展开讲。

(2)歌单推荐(搜索召回排序)

点进“歌单”按钮,会跳到一个歌单广场,但是我平时不怎么用,这里和主页推荐歌单放在一起讲,因为两个模块的算法应该是一样的。

推荐歌单是网易云音乐的主要流量通道,95%以上的用户每天打开APP会首先看这些推荐歌单。推荐歌单算法,网易云在全球范围内都属于做的很不错,因为歌单这个东西和歌曲不一样,里面有很多首歌组成,并且每首歌的调性有可能相似,也有可能不同,比传统推荐要更难。B站、Youtube都有类似算法,比如通过用户的收藏夹推荐相似的收藏夹。

网易云音乐是如何推荐歌单给不同用户的?

歌单有个特点就是UGC(用户生成内容),UGC歌单是实时的,即用户有收听歌曲行为后可实时带来推荐变化,比如刷新一下,会推送不一样的歌单给你。

具体的推荐过程大概如下图,大家只需要知道“召回”和“排序”就行。

  • 召回,是从数以百万计的曲库进行初步筛选,选出几百个相对符合用户口味的候选歌曲;
  • 排序,是把这几百个候选歌曲通过深度学习、因子分解机等算法进行精准的个性化排序。

网易云音乐是如何推荐歌单给不同用户的?

召回的三种主要方式大概解释一下:

  • 协同过滤,基于用户的行为数据,如听过的歌曲或者个人标签找到 相似用户或者相似内容;
  • 基于内容,内容标签化,构建完整的用户画像,然后根据 内容相似度 进行匹配;
  • 基于热门 ,和你相似品味的用户聚合成一个圈, 圈里的人喜欢什么 ,就推给你什么。

这一块涉及技术太多,感兴趣的同学也可以自行搜索。

(3)电台推荐(搜索召回排序)

电台推荐就是以前的FM频道,现在整合了很多栏目。基本的流程和推荐算法其实和上面的歌单推荐一样,只不过歌单变成了电台,推荐的依据也从歌单里的歌曲、评论、收藏、用户,变成了电台的听众、主播、标签等。

网易云音乐是如何推荐歌单给不同用户的?

场景四:云村推荐

(1)云村广场( 搜索召回排序 )

网易云音乐以前总是被人说清高、不接地气、评论太文青。现在这个云村广场(为了回答这个问题,我第一次点进去看),就是云音乐开始接地气的证明。点进去,我以为自己打开了抖音+快手。

网易云音乐是如何推荐歌单给不同用户的?

这里用到的短视频推荐算法应该和快手、抖音一样,使用短视频的属性、标签和用户的口味、标签做匹配,相似性高的或者比较热门的就进行推荐。具体流程也是先召回再排序,可使用的模型较多,这里不好猜。不过短视频时代,最吸引眼球的就是图里这种内容,比什么算法都好使。

(2)好友动态(时间倒序)

这里的动态推荐算法和朋友圈一样,但是比朋友圈简单,就是按你的关注的人的动态,以时间倒序(最新的排在最前面)进行排序。

网易云音乐是如何推荐歌单给不同用户的?

场景五:视频推荐(根据历史行为精准推荐)

视频是云音乐后来推出的一大功能,应该也是按照短视频推荐的方法来进行精准推荐,不同点在于这些视频主题更加明确,比如第一个就是华晨宇的采访,直接推送给听过华晨宇歌曲、买过华晨宇专辑的用户即可。

网易云音乐是如何推荐歌单给不同用户的?

问题分析

用云音乐这么久,有一些问题大家肯定也比较困惑,这里做个简单分析:

问题1:马太效应

19年之前网易云的推荐算法存在一个明显的问题: 什么热门推什么

比如下面这个歌单,在我的推荐歌单列表中出现过不下100次,我怀疑给每个听过英文歌的用户都推了这个歌单,在座的如果有人听过,麻烦评论区留个“1”,一起验证一下。

网易云音乐是如何推荐歌单给不同用户的?

这样的问题在于,越是热门的歌单越容易得到曝光,曝光越多也就越热门,而新歌单就很难得到曝光。这个问题在很多APP上都存在,解决方法也比较成熟。

可以看到,从2019年开始,云音乐的算法团队做了改进,把基于热门的召回降低了权重,所以现在这种现象在逐渐减少。(也不排除是我的听歌口味变了)

问题2:重复推荐

现在很多推荐算法存在一个致命问题,就是重复推荐。在云音乐里,当你听过一些歌曲,就使劲推送相似的歌曲,比如我有一次听了小鳄鱼,之后就使劲给我推儿歌,这很容易引起用户的反感。

这其实是推荐算法中著名的EE(Exploitation,Exploration)问题。EE问题中的Exploitation(开发)就是:对用户比较确定的兴趣,当然要尽可能迎合用户口味,而Exploration(探索)就是:光对着用户已知的兴趣使用,用户很快会腻,所以要不断探索用户新的兴趣才行。

如何解决这个问题,我想云音乐一定使用了BANDIT一类的强化学习方法来优化,下面举个例子帮助大家理解:

一个赌徒,要去摇老虎机,走进赌场一看,一排老虎机,外表一模一样,但是每个老虎机吐钱的概率可不一样,他不知道每个老虎机吐钱的概率分布是什么,那么每次该选择哪个老虎机可以做到最大化收益呢?

最好的办法是去试一试,不是盲目地试,而是有策略地快速试一试,这些策略就是Bandit算法。假设我们已经通过一些数据,得到了当前每个老虎机的吐钱的概率,如果想要获得最大的收益,我们会一直摇哪个吐钱概率最高的老虎机,这就是Exploitation。

但是,当前获得的信息并不是老虎机吐钱的真实概率,可能还有更好的老虎机吐钱概率更高,因此还需要进一步探索,这就是Exploration。

最后,云音乐里很多模块的推荐算法其实都非常相似,但因为具体实施的算法团队不同,细节上肯定有所差异,效果也不会完全一样。对于EE问题的解决,以及如何提高用户粘性,想必算法团队也做了很多尝试,所以才有了这几年界面、体验的不断改善。

其实,有个问题不解决,推荐算法做的再好也没用—— 版权。所以 网易云音乐的未来将何去何从,让我们保持关注吧。

欢迎在文末或者关注公众号留言交流~

 

作者:图灵的猫,香港中文大学 (深圳) 计算机博士;微信公众号:「图灵的猫」

本文由 @图灵的猫 原创发布于人人都是产品经理。未经许可,禁止转载

题图来自Unsplash,基于CC0协议

随意打赏

提交建议
微信扫一扫,分享给好友吧。