下班了,又一次走进熟悉的地铁站,听着已经听过无数遍哐当哐当的地铁轨道声,你突然觉得每天的日子有点乏味和单调,就像太阳每天从东边升起,又从西边落下。
戴上耳机,打开你最喜欢的歌单,就像往常那样。你点下随机播放的按钮,希望把掌控权交给播放器和算法,让它们带给你一点未知的新鲜。
你有没有想过,随机播放算法究竟是如何给我们呈现一个随机歌单的?
「真随机」还是「伪随机」
历史上最经典的随机音乐播放器,应该还要数 iPod Shuffle。
2005 年的时候,苹果公司推出了经典的 iPod Shuffle,iPod Shuffle 在当时来说可以算是一个异类,那时候的音乐播放器(还在直接叫 MP3 的时代)基本上都已经有了一块用来显示音乐信息的屏幕,用户可以自由的选择自己喜欢的音乐,甚至有些 MP3 还能播放视频,比如 2006 年没魅族推出的 miniplayer M6 已经搭载了 2.4 英寸显示屏。
而 iPod Shuffle 没有屏幕,整体比起苹果自家的 iPad Nano 来说也来的简陋。但最大的问题是,用户如何选择自己喜欢的歌曲?
答案是随机列表,你可以通过 iTunes 同步你喜欢的音乐,也可以直接同步一个你喜欢的播放列表,但是在 iPod Shuffle 上,你所能获取的最大感受是「随机播放的魅力」。
实际上,我们所说的「随机播放」常见的方式有两种,一种叫「Shuffle」,一种叫「Random」。
▲ 洗牌算法。图片来自:9to5Mac
Shuffle 一般叫做「洗牌算法」,它的原理是像扑克洗牌一样,将不同数量的扑克牌进行随机排列就能得到一个乱序的顺序。随机播放歌单也是如此,每次播放的时候会将这个列表中的歌曲进行洗牌,从而获得一个乱序的播放,也就是「伪随机」算法。
而 Random 则是真正的随机播放,也就是说每次切换音乐都是独立的未知数,会随机到不同的音乐,就像「抓阄」一样,它没有列表的概念,所以没有上一首和下一首的概念,是「真随机」算法。
怎么判断是「真随机」还是「伪随机」,其实只要按下「上一首」就知道了,如果切换到是你刚才听过的那一首,那就是「伪随机」的洗牌算法,如果是每次都在切换不同的歌,那么就是「真随机」算法。
▲ 洗牌算法本质来自洗扑克牌。图片来自:P
这两种哪种方法更好一些?对于目前的用户来说,洗牌算法要更能接受一些,理论上它更加具备可控性,又能满足用户乱序播放的要求,还能防止重复听到一首歌的可能性。
目前在各大音乐 App 中用得比较多的是「洗牌算法」,比如用户数量很大的网易云音乐和 QQ 音乐等播放器都在使用。
好的随机算法应当是怎样的
但即便「洗牌算法」本身有足够多的优点,但原始的「洗牌算法」已经无法满足日益增长的听歌需求,或者说也有播放器越改越糟糕的情况。比如知乎提问中,很多人都感觉网易云音乐的随机算法有着很大问题,比如只放一小部分固定的歌曲,而有些歌曲似乎永远随机不到。甚至有的用户还表示自己删除的一首歌曲还能被随机到。
其实 App 对于这个「随机列表」是有干预的,而并非简单的进行洗牌,而但从结果上说,到底用户感知是好还是差,就看各家对于「洗牌算法」的理解和设计了。尽管吐槽网易云算法的用户不少,但也并不影响推荐歌单和评论等受到欢迎的功能。
根据知乎简介为 QQ 音乐产品经理的用户刘彦彬的回答,在洗牌算法之中也会掺杂更多的大数据算法干预:
根据产品团队调研,用户想要的其实不是真正的「随机播放」,而是用户更多是不知道听哪首,更多是选择困难,希望能帮我做决定。而且,尽量的符合我当前的心境。
随机算法可以解决选择困难,但是并不能真正解决用户需要的心境,因为「洗牌算法」并不会知道用户究竟想要什么。但是音乐应用其实是可以做到这一点的,在足够大的个人听歌数据样本和大数据调研情况下,算法可以做出一些判断,用户此刻更想要听哪些歌。
▲ QQ 音乐。图片来自:YouTube
举个简单的例子,比如说在夜深人静的深夜点开随机播放,那么用户很大可能性是不想听比如金属、摇滚等过于吵杂的音乐,结合用户以往的听歌历史,这个时候随机算法就会根据用户当前的环境时间,更多的随机到轻音乐。
不然你以为那些听歌报告为什么那么详细,你夜里不睡觉循环了多少遍哪首歌,它都一清二楚。
QQ 音乐产品经理刘彦彬还总结了好的随机算法应该具备的几条特征:
- 记录我本地或最近一段时间的听歌记录,尽量在随机时不会推荐出来,保证随机的新鲜感
- 洗牌算法做好,尽可能的隔开某个歌手,某张专辑,让用户从感官上感觉是一个随机列表
- 可以在本地做用户操作记录,比如跳过歌曲的次数,对用户不感兴趣的歌曲进行降权或者过滤,精选随机的池子
- 在对歌曲标签丰富后,可以做的事情就更多了,比如根据当前的场景,推荐本地适合收听的歌曲优先随机播放,这些都有助于让用户感知智能。
▲ Spotify 的随机播放。图片来自:REGENDUS
对随机播放算法调研的当然不只是 QQ 音乐,一直以推荐算法闻名的流媒体音乐服务 Spotify 也有对「洗牌算法」更深度的思考,甚至他们还在官网里面写出了如何改进随机播放算法。
即便是对于 Spotify 这样的流媒体音乐,依然有许多用户会觉得随机播放不「随机」,Spotify 的洗牌算法当然是随机的,但他们开始思考为什么用户会这样觉得。
从基础上说,Spotify 从提供服务开始就用的是 Fisher-Yates 洗牌算法,他们觉得这个洗牌算法做的最出色。
▲ 如果用不同颜色代表不同歌手,这意味完全真随机时,上下两种列表都可能出现
不过,Spotify 一开始并不理解用户说的「不随机」是什么意思,但在研究之后发现,用户的核心理念是不希望一位歌手在短时间内重复出现,但这里其实用户陷入了了一个经典的「赌徒谬论」,当人们连续几次没有中彩票时,就会认为自己下次中奖的几率会增大,而其实每次概率都是独立而相同的。
但如果用户连续听到某一位歌手的作品时,他们就会粗暴的觉得这个算法「有问题」。
结论表示,用户并不喜欢「完美的随机」。
比起「完美」,用户更喜欢的是「平衡」
那什么是「不完美的随机」?
在马丁・菲德勒(Martin Fiedler)的博客文章 「混洗音乐的艺术」中,他展示了为什么完全的随机列表是糟糕的。
假设在你的播放器中存在三种不同曲风的流派分别是 A、B、C,其中 A 有 10 首,B 和 C 都是 11 首,一共 32 首歌。如果使用真正的随机算法来洗牌会出现怎样的情况?可能是:
AACBBCBACABBCCACCCCABBACBACABABB
其中出现了连续的 C 曲风流派,以及在四分之一的时间里是没有 B 曲风流派的,对于用户来说,重复单一的曲风无疑是糟糕的。而绝对的随机算法,很可能在大部分情况下都会生成这种糟糕的播放列表,因为绝对的随机也意味着「不平衡」。
▲ 图片来自:Marie Claire
更好的随机里列表是为了满足用户无法下决定但又想要获得新鲜感的心理,这时就应该尽可能的避免重复和单调,所以下面这种播放列表才是更合适的:
ABCBCABACBACBCABCACBABCACBACBCAB
很四平八稳的一个播放列表,没有任何「异常」存在,马丁・菲德勒称之为「平衡洗牌」。为了实现将歌单洗牌更加平衡,马丁・菲德勒发明了一套较为复杂的洗牌算法,如果你对具体实现感兴趣,也可以直接移步到这篇博客。
Spotify 借鉴了这个算法,但将之修改为更适合自己的方式,并且同时借鉴了抖动算法(例如 Floyd–Steinberg 抖动),最终将歌曲更加均匀平衡的分散到播放列表之中。
就是这样,今天,各家的随机播放算法虽然大都基于「洗牌算法」的模式,但也都有着自己的「调味秘方」,有的用户会喜欢,也有做的糟糕的,不停被用户吐槽的。
但本质上,随机播放算法的重点不在于「随机」,而是一场产品和用户之间的心理博弈对决,甚至它们会随着你的听歌习惯的逐渐养成,自身也在改变着随机歌单的加权倾向。
越听,它们就会越了解你。