内容推荐算法之:音乐推荐
Posted 惠每移健
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内容推荐算法之:音乐推荐相关的知识,希望对你有一定的参考价值。
转载自:www.DataQuestion.com
提到机器学习算法,其中很大的一个应用场景就是内容推荐,无论是我们在电商网站上的商品推荐、新闻聚合App上的咨询推荐,都是内容推荐算法的应用场景。
即便在相对而言内容数量并不那么庞大的制药行业,从今年开始,我们也看到了一些智能化的内容推荐的应用需求,有一些是医学网站上的内容推荐、有一些是对医生多渠道营销时的内容推荐。
在各种各样的内容推荐应用场景中,音乐推荐可称得上是实施技术相对比较复杂的一个了。
相对于文字、图像而言,对于音频的分类、标签,进而推荐,难度更高;同时,这又是一个我们几乎每天都在各种各样的音乐应用、音乐网站上可以看到的一个场景。
那么,今天我们就来看看,神奇的“音乐推荐”是如何通过机器学习算法实现的呢?
在机器学习和人工智能技术兴起之前,大部分的音乐推荐都是人工完成的,也就是音乐编辑将推荐的音乐“置顶”推送给用户,这也是目前在很多制药企业里“内容推荐”的做法——通过人工的方式将推荐内容“置顶”或者“推送”,显然这种方式不能满足“千人千面”的不同需求。
二十一世纪初,在麻省理工学院的媒体实验室中诞生了一种在当时非常先进的个性化音乐推荐方法:使用算法去分析音乐的音频和文字内容,它可以做到音乐识别,个性化推荐,创建音乐列表,而且还能分析。
这时的音乐推荐已经有了一些“智能”的方法,后来,著名的Last.fm采取了另外一种方法,这种方法至今依然存在,它就是机器学习算法中著名的协同过滤(collaborative filtering),从而开创了机器学习推荐音乐的大幕。
那么,具体是什么算法能够知道我们喜欢什么音乐,应该推荐什么音乐给我们呢?
大部分的网站使用了三种模型。
推荐模型1:协同过滤
首先,先来点背景介绍:
当很多人听到这个“协同过滤”这个词的第一反应就是Netflix,总所周知Netflix是首批使用协同过滤来强化他们推荐系统的公司。他们使用用户对电影的星级评价来帮助他们决定应该推荐什么电影给“相似”的用户。
当Netflix获得巨大成功之后,这种用法得以快速传播。所以现在通常被认为是推荐模型的起点。
不同的是,大多数音乐网站并没有像Netflix那样让用户给音乐进行星级评价,而是隐性反馈(implicit feedback)。这其中包括许多播放数据,首当其冲的是播放次数(stream counts),也包括这首歌是否被添加到歌单,或者用户是否有访问歌手的页面等等。
那但协同过滤在哪里呢?下面的这幅图很好的把这个复杂的问题概括到了一个简单的对话中:
这图里发生了什么呢?这两个家伙中的每一个都有一些自己喜欢的歌,左边的那个人喜欢P,Q,R和S;右边的那个人喜欢Q,R,S和T。
协同过滤看到这些数据之后会认为:
“既然这样。你们两个有三首共同喜欢的歌Q,R和 S,所以你们可能是类似的用户。因此,你们很可能会喜欢对方喜欢的,但是你没听过的歌。
因此右边的人可能会喜欢P,左边的人可能会喜欢T。非常简单的逻辑,对吧?
但在实践中如何实际使用这个概念来给数以百万用户推荐歌曲的呢?要知道这些推荐是基于其他数以千万的用户喜好来推荐的。
上图的矩阵只是一个例子。实际上,真正的矩阵是巨大无比的。每一行代表了海量的音乐用户中的一个用户;每一列代表了音乐数据库中的一首歌。
然后,Python库就会运行这个又长又复杂的矩阵分解公式:
嗯,就是个复杂的数学公式。。。
当矩阵运行完这个公式后,我们会得到两种类型的向量,这里用X和Y表示。X是一个用户向量(user vector),表示一个用户的喜好,Y是一个歌曲向量(song vector),代表一首歌曲的资料。
这个用户歌曲矩阵产生两种向量:用户向量和歌曲向量
现在我们得到了很多个用户向量(每个向量代表了一个用户)以及歌曲向量。这些向量的实际内容只是一堆本质上没有意义的数字,但它们用来做比较的时候却非常有用。
为了找到和我拥有最相似品味的用户,协同过滤算法会把我的向量和其他所有用户的向量进行比较,最终找出和我最相似的用户。同样的道理对歌曲向量也是一样,把一首歌的向量和其他所有歌曲向量进行比较,然后发现那些和你要找的歌最相似的歌曲。
推荐模型2:自然语言处理
Natural Language Processing, NLP
第二种推荐模型是自然语言处理。顾名思义,这些模型的数据来源,就是互联网上的各种文字数据,音轨的元数据,新闻文章,博客和其他网络上的文本。
自然语言处理,即电脑理解人类语言的能力,本身就是一个广阔的领域。NLP背后的确切机制已经超出了本文的范围,在概念上解释起来就是:通过不断地在网上爬各种音乐文章和其他关于音乐的社交媒体文字,来找出哪些人们会对特定歌手和歌曲的评价;什么形容词和语言经常被用于描述这些歌曲,以及哪些其他歌手和歌曲也同时被一起讨论。
算法会把他们分成所谓的“文化向量”或“高频词汇”,每个歌手,每首歌都有上千条每天不断变化地高频词汇。每个词条都有权重,这个权重表示了这个描述的重要性(简单来说,就是一个人要描述这首歌最可能用的词汇)。
然后,很像协同过滤的做法,NLP模型用这些词和权重,创造出一个向量来代表歌曲,然后用这个向量来两两判断歌曲是否相似。
听起来是不是很酷?
推荐模型3:原始音频模型
写了这么多了,你可能会想:等等,我们不是已经通过前两个模型来分析这么多数据了吗?为什么我们还要分析音频自身呢?
首先,加入第三个模型可以提升推荐服务的准确性。但是实际上这个模型还有另一个目的:不同于前两个模型,原始音频可以把新歌考虑进去。
比如说,你有个创作型歌手朋友在网站上传了一首新歌。也许它只有50个播放量,所以没有其他的听众协同过滤它。另外,网上没有任何地方会提到它,所以NLP模型也找不到它。但好在还有原始音频模型,它不会在意一首歌是新歌还是热门歌曲。所以在它的帮助下,你朋友的歌曲可能会和其他流行歌曲一起出现在推荐的播放列表中!
那么,原始音频数据是如何运作的呢?答案就是:
卷积神经网络(Convolutional Neural Networks)!
卷积神经网络就是面部识别使用的技术,只不过人们将它从像素上,转而应用在音频文件上了。
图中的神经网络有四个卷积层,就是左边的四个很厚的条形,而右边是三个更加细的密集层。输入是音频帧的时频表示,然后将其连接以形成频谱图。
音频帧经过这四个卷积层之后,你可以看到一个“全局时间池”层,该层在整个时间轴上汇集,有效地计算在歌曲时间内所学特征的统计量。
经过这个处理后,神经网络对歌曲有了一个了解,包括这首歌的拍子记号(time signature),音调(key),调式(mode),速度(tempo)和响度(loudness)等特征。 下图是Daft Punk的“Around the World”的一个30秒片段的数据图。
最终,对歌曲关键特征的理解使得算法能够理解歌曲之间的本质上的相似性,从而用户会享受这些根据自己的收听历史得到的推荐歌曲。
[ 相关阅读 ]
药企的"beyond the pill"战略是什么?系列之二
惠每移健为某美资药企提供KOL图谱
在顶尖药企数字化研讨会上,惠每移健聊了什么?
以上是关于内容推荐算法之:音乐推荐的主要内容,如果未能解决你的问题,请参考以下文章