您的位置:首页 > 其它

听豆瓣电台引发的感想

2014-09-29 23:38 169 查看
作为一名ACMer,天天接触算法,对生活中许多用到算法的地方都会变得敏感,本人听歌喜欢听豆瓣电台,之前对这个音乐网的私人兆赫这一块不是很在意,只到打了不少红心歌和不喜欢听的歌之后,再一次打开私人兆赫,发现私人兆赫里放的歌居然真的开始合我心意,甚至找出了不少我以前只因喜欢其中某个调却一直找不到的歌,故搜查网络上关于豆瓣网的信息,感觉这篇文章写得挺好的。

叶伟说:“我也很少收藏豆列的,都是直接点红心,我点了很多红心,也点了很多不再播放,但私人电台里还是很多不喜欢的歌。”我有同感。这个产品是不是已经停止进化了。

本来应该是另一个“不便回答”的问题。但有人盛情邀请,所以稍微说一下。豆瓣电台的私人电台会综合用户在豆瓣上的各种音乐行为做算法推荐。当然考虑最多的是电台本身的“红心”, “垃圾”, “跳过”这些数据。

至于算法本身,在任何领域里,超出基本的普通推荐算法之后,就没有“亢龙有悔”一招打遍天下的东西。可以说全是细节。这个是不断积累、观察、学习、创造的过程,而且每天在持续变化。做推荐是在一条没有终结的马路上一边攒车一边开车,教科书、论文里的东西都是基本的零件,中间碰到各种奇奇怪怪的算法都可能被捡起来装到车上。Swiss army knife, yes. Silver bullet, no.

1)豆瓣会计算和每首歌近似的歌曲集合,这个可以基于“用户歌曲矩阵”的传统方法,并依次作为核心数据,这个核心数据的更新频率并不需要很高。

2)豆瓣会为每个用户维护一个线性的播放列表。

3)每当用户对一首歌曲给出正向反馈,系统会取出与这首歌相似的歌曲列表中的几首,插入用户当前的播放列表。

4)如果一个用户给出负向反馈,系统会从这个列表中删除那些与这首歌相关性高的歌曲。(这一点有一些工作可以做,例如是删除同一个歌手的歌曲呢?还是曲风呢?或者是基于之前的核心库的相似歌曲列表呢?)

2011年05月04日,补充了一些豆瓣电台的策略:

1. 豆瓣实现了自更新模块,主要依赖于内部的自动配置协议,能够动态的配置新算法或者一个算法的参数,同时分配一定比例的用户给一个新的推荐模块(也就是动态AB测试)。在进行评测之后,再自动的进行调整。

2. 用户行文建模:豆瓣对一些典型的用户行为进行了特殊建模,如一些连续点击喜欢或者不喜欢的用户。

3. 时间因素:豆瓣似乎会根据当前的时间来推荐不同的歌曲,例如在工作时间会倾向于推荐一些较为柔和的歌曲。

4. 歌曲标签:豆瓣的歌曲会被打上标签,从而为推荐提供辅助信息。

5. 用户聚类:豆瓣似乎使用了一些用户聚类的算法来提高算法的效率。

-----------------------------------------------------------

2011年03月11日,一些猜测:

豆瓣的电台应该分成三部分:

1. 一部分是根据你的social行为推荐的音乐,例如你打分的专辑,你加入的标签等等。

2. 另外一部分是根据你使用电台的行为推荐的音乐列表,这个估计是基于user-based或者item-based来计算的,数据就是喜欢、不喜欢和跳过。

3. 第三部分应该是通过编辑加入的歌曲,例如在特定的时期对特定的人群发送特定的歌曲(一个例子是在大年初一听到的第一首歌是新年祝福相关的)

虽然只是这三部分,但是第一部分和第二部分会引入很多的参数,于是又有了一层算法:参数调优。这里有三种实现形式:所有用户用同一组参数;每个用户用不同的参数;先把用户聚类,然后每类用户用一组参数。

这里的参数也会有很多种,一个关键在于比例的配置。例如,我们有15个源来产生推荐的歌曲,如何才能混合这些歌曲才能取得用户最大的满意度。理想情况是要同时考虑熟悉度、多样度、和惊奇度。在具体算法中也有选择多少个相似用户、每个用户对最终结果的影响度是多少、贡献的数量是多少。再有就是如何从用户听过的成百上千的歌曲中选择一个子集来进行后续的运算。当然,虽然这么说,但是千万不要让自己陷入其中,最重要是找到一个简约的方案来调优。

除此之外,不知道豆瓣可能还有另外一层的算法,就是即使给一个用户准备好了一堆可以推荐的歌曲,应该按照什么顺序来播放给用户。这一点也能说出很多复杂的需要考虑的因素,我们在设计的时候也不要陷入在细节中,而应该找出最关键的几点来撬动这个石头:)

最后,豆瓣也应该有个过滤的前端,会根据大家对一首歌的整体评分来决定后续推荐的音乐集合
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: