回到20世纪,Songza开启了在线音乐服务先河,那时候都是手动的为用户创建播放列表。通过组建一些音乐专家将一些听起来好听的类似歌曲手动的放在一起,然后听众只能听音乐专家们创建的播放列表。(之后,Beats Music也采用同样的策略。)人工创建播放歌单虽然效果也还行,但是比较简单以及需要依赖大量的手工操作。另外,人工创建播放歌单没有考虑到个人在音乐上的个性化偏好。
Pandora跟Songza一样,也是在线音乐服务的先驱之一,但是用的是一些更高级的方法:手动的为每一首歌打上属性标签。这个方法设想的是喜欢同一类音乐的用户会使用相同的描述歌曲的词汇去搜索,而Pandora根据这些词汇给歌曲打标签。之后,就可以很简单的根据某些标签进行过滤,将类似的歌曲放在一个歌单。
于此同时,MIT多媒体实验室的一个音乐智能机构–The Echo Nest诞生了。The Echo Nest使用的是更高级的方法进行个性化推荐,他们使用算法分析音乐的音频和文本内容,并基于此进行听曲识歌、个性化推荐、创建歌单以及分析。
最后介绍的是Last.fm使用的另一个不同的方法:协同过滤(collaborative filtering),这个方法至今依然在使用,这个方法用户辨别用户是否会喜欢这首音乐。
上面介绍了别的在线音乐服务商是如何进行音乐推荐的,Spotify是如何赶上并超越别的服务商,并且能将用户的喜好抓的死死的呢?
Spotify的3种推荐模型
Spotify并没有发明一种革命性的推荐模型,而是混合多种最优策略打造了自己的强有力的推荐引擎。
“每周推荐”采用了3种主要的推荐模型:
-
协同过滤模型( Last.fm最早使用的),用于分析不同用户之间的行为。
-
NLP模型,用户分析文本
-
音频模型,用于分析原始的音频
Image credit: Chris Johnson, Spotify
让我们深入的探索每一个推荐模块是如何工作的。
推荐模型1:协同过滤
看到“协同过滤”,很多人会想到Netflix。Netflix是第一家使用协同过滤模型的公司,他们使用基于用户评分的电影排序来将电影推荐给其他类似的用户。
Netflix成功的使用该模型之后,这个模型的应用迅速推广,现在已经成为构建推荐模型最开始考虑使用的方法了。
跟Netflix不同,Spotify不需要用户对音乐进行评分。取而代之的是,Spotify使用的隐藏反馈策略,通过跟踪用户是否保存到用户播放歌单或者听了之后是否浏览艺术家的主页。
但是,什么是协同过滤呢,它是如何工作的呢?
图中的两个人都有自己的偏好,左边的人喜欢歌曲P、Q、R、S,右边的人喜欢歌曲Q、R、S、T。
协同过滤使用的就是他们的偏好数据。首先他们共同偏好歌曲Q、R、S所以他们很有可能是同一类用户。因此可以得出:他们相互都会喜欢对方的歌单,因而可以给一方推荐给另一方的歌单上的歌曲。比如给右边的人推荐T,给左边的人推荐P。
那么Spotify是如何做的呢?
如上图所示,所有的Spotify用户的偏好数据都在上图的矩阵中,一行代表一个用户的歌单,列代表的是歌曲曲目。
在得到上面的矩阵之后,使用下面的公式进行因式分解:
分解完毕之后可以得到2个向量,X代表用户向量,表征用户的音乐偏好;Y代表歌曲向量,表征一首歌。
经过计算之后得到了1.4亿的用户向量以及3千万的歌曲向量。这些向量本身是毫无意义的,但是对于推荐的时候进行对比却具有很大的帮助。比如为了寻找最类似的用户,比如寻找两首最类似的歌。
推荐模型2:NLP
NLP处理的是非结构化文本,比如博客、网页、新闻等等。NLP用于理解人类的自然语言。
Spotify的做法是:爬取网上关于音乐的信息,并分析用户讨论的具体的艺术家或者歌曲内容,比如用的什么形容词或者哪些词用的最多。这里我并不知道Spotify具体是如何做的,但是可以分享一下我对 Echo Nest的理解。 Echo Nest通过对爬取的信息进行分析,得到“文化向量(cultural vectors)”和“高频短语(top terms)。每首歌每个艺术家都有上千个日常变化的高频短语。每一个短语都具有一个对应的权重,表明这个短语描述内容的重要程度(大致就是使用这个短语描述这首歌使用的词语的概率)。
然后,与协同过滤类似,NLP模型使用这些短语和权重得到了歌曲的向量表示,之后用于比较两首歌是否类似。
推荐模型3:音频模型
上述2个模型基本已经能够提供相当好的性能了,那为什么还需要引入本模型呢?原因有两个:1.帮助提升推荐性能;2.语音模型考虑了新歌。
比方说:一个歌手将自己的新作长传到Spotify,但他可能之后50个听众,并且由于是新歌,所以网上基本没有关于这些新歌的资料。这个时候上述的协同过滤模型和NLP模型就失去作用了。然而语音模型并不会对新歌和流行歌曲区别对待,而是新歌依然可以出现在“每周推荐”的流行榜上。
语音模型是如何做到的呢?但按就是使用到了CNN(卷积神经网络)。
CNN也用于人脸识别。Spotify只是将人脸识别中的像素替换成音乐的音频。下面是一个神经网络架构的示例:
图中的神经网络拥有4个卷积层(左边的4个大方框)和3个密集层(3个带箭头的长框)。网络的输入是时频表示的音轨,用于形成歌曲的频谱。
音轨通过卷积层之后,可以看到“全局池化层”,这一层贯穿了整个时间轴,有效的学习到歌曲在时间上特征的统计信息。
经过处理之后,神经网络分理出了对于歌曲的理解,包括时间签名、关键词、模式、时序和响度。下图是Daft Punk的 “Around the World”的30秒波形分析图。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
了95%以上Android开发知识点,真正体系化!**
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
[外链图片转存中…(img-hmyAsxDU-1712815684829)]