当你按下「随机播放」时,QQ 音乐和网易云们都做了什么?
itomcoil 2025-05-23 17:46 14 浏览
下班了,又一次走进熟悉的地铁站,听着已经听过无数遍哐当哐当的地铁轨道声,你突然觉得每天的日子有点乏味和单调,就像太阳每天从东边升起,又从西边落下。
戴上耳机,打开你最喜欢的歌单,就像往常那样。你点下随机播放的按钮,希望把掌控权交给播放器和算法,让它们带给你一点未知的新鲜。
你有没有想过,随机播放算法究竟是如何给我们呈现一个随机歌单的?
「真随机」还是「伪随机」
历史上最经典的随机音乐播放器,应该还要数 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 则是真正的随机播放,也就是说每次切换音乐都是独立的未知数,会随机到不同的音乐,就像「抓阄」一样,它没有列表的概念,所以没有上一首和下一首的概念,是「真随机」算法。
怎么判断是「真随机」还是「伪随机」,其实只要按下「上一首」就知道了,如果切换到是你刚才听过的那一首,那就是「伪随机」的洗牌算法,如果是每次都在切换不同的歌,那么就是「真随机」算法。
▲ 洗牌算法本质来自洗扑克牌。图片来自:Phys.org
这两种哪种方法更好一些?对于目前的用户来说,洗牌算法要更能接受一些,理论上它更加具备可控性,又能满足用户乱序播放的要求,还能防止重复听到一首歌的可能性。
目前在各大音乐 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 抖动),最终将歌曲更加均匀平衡的分散到播放列表之中。
就是这样,今天,各家的随机播放算法虽然大都基于「洗牌算法」的模式,但也都有着自己的「调味秘方」,有的用户会喜欢,也有做的糟糕的,不停被用户吐槽的。
但本质上,随机播放算法的重点不在于「随机」,而是一场产品和用户之间的心理博弈对决,甚至它们会随着你的听歌习惯的逐渐养成,自身也在改变着随机歌单的加权倾向。
越听,它们就会越了解你。
相关推荐
- 最强聚类模型,层次聚类 !!_层次聚类的优缺点
-
哈喽,我是小白~咱们今天聊聊层次聚类,这种聚类方法在后面的使用,也是非常频繁的~首先,聚类很好理解,聚类(Clustering)就是把一堆“东西”自动分组。这些“东西”可以是人、...
- python决策树用于分类和回归问题实际应用案例
-
决策树(DecisionTrees)通过树状结构进行决策,在每个节点上根据特征进行分支。用于分类和回归问题。实际应用案例:预测一个顾客是否会流失。决策树是一种基于树状结构的机器学习算法,用于解决分类...
- Python教程(四十五):推荐系统-个性化推荐算法
-
今日目标o理解推荐系统的基本概念和类型o掌握协同过滤算法(用户和物品)o学会基于内容的推荐方法o了解矩阵分解和深度学习推荐o掌握推荐系统评估和优化技术推荐系统概述推荐系统是信息过滤系统,用于...
- 简单学Python——NumPy库7——排序和去重
-
NumPy数组排序主要用sort方法,sort方法只能将数值按升充排列(可以用[::-1]的切片方式实现降序排序),并且不改变原数组。例如:importnumpyasnpa=np.array(...
- PyTorch实战:TorchVision目标检测模型微调完
-
PyTorch实战:TorchVision目标检测模型微调完整教程一、什么是微调(Finetuning)?微调(Finetuning)是指在已经预训练好的模型基础上,使用自己的数据对模型进行进一步训练...
- C4.5算法解释_简述c4.5算法的基本思想
-
C4.5算法是ID3算法的改进版,它在特征选择上采用了信息增益比来解决ID3算法对取值较多的特征有偏好的问题。C4.5算法也是一种用于决策树构建的算法,它同样基于信息熵的概念。C4.5算法的步骤如下:...
- Python中的数据聚类及可视化分析实践
-
探索如何通过聚类分析揭露糖尿病预测数据集的特征!我们将运用Python的强力工具,深入挖掘数据,以直观的可视化揭示不同特征间的关系。一同探索聚类分析在糖尿病预测中的实践!所有这些可视化都可以通过数据操...
- 用Python来统计大乐透号码的概率分布
-
用Python来统计大乐透号码的概率分布,可以按照以下步骤进行:导入所需的库:使用Python中的numpy库生成数字序列,使用matplotlib库生成概率分布图。读取大乐透历史数据:从网络上找到大...
- python:支持向量机监督学习算法用于二分类和多分类问题示例
-
监督学习-支持向量机(SVM)支持向量机(SupportVectorMachine,简称SVM)是一种常用的监督学习算法,用于解决分类和回归问题。SVM的目标是找到一个最优的超平面,将不同类别的...
- 25个例子学会Pandas Groupby 操作
-
groupby是Pandas在数据分析中最常用的函数之一。它用于根据给定列中的不同值对数据点(即行)进行分组,分组后的数据可以计算生成组的聚合值。如果我们有一个包含汽车品牌和价格信息的数据集,那么可以...
- 数据挖掘流程_数据挖掘流程主要有哪些步骤
-
数据挖掘流程1.了解需求,确认目标说一下几点思考方法:做什么?目的是什么?目标是什么?为什么要做?有什么价值和意义?如何去做?完整解决方案是什么?2.获取数据pandas读取数据pd.read.c...
- 使用Python寻找图像最常见的颜色_python 以图找图
-
如果我们知道图像或对象最常见的是哪种颜色,那么可以解决图像处理中的几个用例,例如在农业领域,我们可能需要确定水果的成熟度。我们可以简单地检查一下水果的颜色是否在预定的范围内,看看它是成熟的,腐烂的,还...
- 财务预算分析全网最佳实践:从每月分析到每天分析
-
原文链接如下:「链接」掌握本文的方法,你就掌握了企业预算精细化分析的能力,全网首发。数据模拟稍微有点问题,不要在意数据细节,先看下最终效果。在编制财务预算或业务预算的过程中,通常预算的所有数据都是按月...
- 常用数据工具去重方法_数据去重公式
-
在数据处理中,去除重复数据是确保数据质量和分析准确性的关键步骤。特别是在处理多列数据时,保留唯一值组合能够有效清理数据集,避免冗余信息对分析结果的干扰。不同的工具和编程语言提供了多种方法来实现多列去重...
- Python教程(四十):PyTorch深度学习-动态计算图
-
今日目标o理解PyTorch的基本概念和动态计算图o掌握PyTorch张量操作和自动求导o学会构建神经网络模型o了解PyTorch的高级特性o掌握模型训练和部署PyTorch概述PyTorc...
- 一周热门
- 最近发表
- 标签列表
-
- ps图案在哪里 (33)
- super().__init__ (33)
- python 获取日期 (34)
- 0xa (36)
- super().__init__()详解 (33)
- python安装包在哪里找 (33)
- linux查看python版本信息 (35)
- python怎么改成中文 (35)
- php文件怎么在浏览器运行 (33)
- eval在python中的意思 (33)
- python安装opencv库 (35)
- python div (34)
- sticky css (33)
- python中random.randint()函数 (34)
- python去掉字符串中的指定字符 (33)
- python入门经典100题 (34)
- anaconda安装路径 (34)
- yield和return的区别 (33)
- 1到10的阶乘之和是多少 (35)
- python安装sklearn库 (33)
- dom和bom区别 (33)
- js 替换指定位置的字符 (33)
- python判断元素是否存在 (33)
- sorted key (33)
- shutil.copy() (33)