即便是对于 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抖动),最终将歌曲更加均匀平衡的分散到播放列表之中。
就是这样,今天,各家的随机播放算法虽然大都基于「洗牌算法」的模式,但也都有着自己的「调味秘方」,有的用户会喜欢,也有做的糟糕的,不停被用户吐槽的。
但本质上,随机播放算法的重点不在于「随机」,而是一场产品和用户之间的心理博弈对决,甚至它们会随着你的听歌习惯的逐渐养成,自身也在改变着随机歌单的加权倾向。