一种基于迭代k-means算法的歌曲聚类方法与流程

文档序号:16368291发布日期:2018-12-22 08:33阅读:2553来源:国知局
一种基于迭代k-means算法的歌曲聚类方法与流程

本发明涉及数据处理技术领域,具体的说,是一种基于迭代k-means算法的歌曲聚类方法。

背景技术

当今互联网时代,大型音乐门户网站均拥有海量数据的歌曲库。用户往往有寻找与自己喜爱歌曲类似或者属于同一类别的歌曲的需求。传统搜索引擎只适合在用户对于目标歌曲信息有明确了解的条件下进行搜索,无法根据歌曲之间人耳感知的情感的相似性进行搜索。传统的依靠人工设置音乐标签对音乐进行分类的方法效率低下,不适合针对海量数据的处理,且人工标签准确性较低。因此,现有环境的音乐门户网站缺乏对海量歌曲的进行高效精确归类的方法,导致用户无法根据其余歌曲与自己喜爱歌曲的相似性来方便快速地找寻自己可能感兴趣的歌曲。

授权公告号:cn104077598b;发明创造名称:一种基于语音模糊聚类的情感识别方法的中国发明专利中公开了一种基于语音模糊聚类的情感识别方法,包括:对输入的语音信号进行预处理;提取处理后的语音信号的特征信息(特征信息包括梅尔倒谱系数(mfcc)、基音、共振峰、短时能量);将多类情感进行分组,并根据多类情感分组后的类型分别选取相应的特征信息;根据每一组情感类组合选取的特征信息分别进行分类处理;根据每一组情感类组合分类后的输出结果进行语音情感识别;本发明的有益效果为,通过不同情感选取不同的特征,用改进的自适应模糊k均值聚类方法比传统方式所有情感用同一种特征的fcm方法的识别效果要好很多,并且识别率更高,效果更好。

梅尔频率倒谱系数((mel-frequencycepstrumcoefficients,mfcc)能反映人耳的音高听觉特性,是一种广泛应用于语音处理领域的特征参数。通过将mfcc与其一阶差分、二阶差分结合可以全面反映音乐信号的静态特征和动态特征,提高对音频的识别性能。

k-means算法是一种基于样本间相似性度量的间接聚类方法,属于非监督学习方法。k-means算法接受输入量k,然后将n个数据对象划分为k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。其中,聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心或簇中心)来进行计算的。

k-means算法的工作过程为:首先从n个数据对象任意选择k个对象作为初始聚类中心;而对于所剩下其它对象,则根据它们与这些聚类中心的欧式距离判断二者相似度,分别将它们分配给聚类中心所代表的与其最相似的聚类;然后再计算每个所获新聚类的聚类中心,即该聚类中所有对象的均值;不断重复这一过程直到标准测度函数开始收敛为止。一般都采用均方差作为标准测度函数。k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。



技术实现要素:

本发明的目的在于提供一种基于迭代k-means算法的歌曲聚类方法,基于迭代k-means算法得到mfcc并以mfcc作为声学特征按情感类别对歌曲进行高效精准的聚类,实现曲库中海量歌曲以情感类别自动分类的功能。

本发明通过下述技术方案实现:一种基于迭代k-means算法的歌曲聚类方法,提取曲库中歌曲的mfcc向量作为声学特征,同时运用迭代k-means算法对歌曲进行情感识别和情感归类。

为了更好的实现本发明,进一步地,运用两次迭代k-means算法对歌曲进行情感识别和情感归类。

一种基于迭代k-means算法的歌曲聚类方法,具体包括以下步骤:

步骤s1:分时段提取曲库中歌曲的梅尔频率倒谱系数,得到每首歌曲各时段每一帧的mfcc向量;

步骤s2:对步骤s1中所有mfcc向量进行歌曲id标识,将各个mfcc向量所属歌曲信息汇整成数据集;

步骤s3:将步骤s2中的数据集作为输入数据进行第一次k-means聚类,获取各个mfcc向量所属的簇信息,得到mfcc向量的聚类结果;

步骤s4:由每首歌曲所含mfcc向量在各个簇的比例生成与该歌曲对应的k维标签向量集;

步骤s5:以曲库中每首歌曲的k维标签向量集作为输入数据进行第二次k-means聚类,得到歌曲分类结果。

为了更好的实现本发明,进一步地,所述步骤s1的具体步骤包括:

步骤s1-1:对曲库中所有歌曲进行预处理,提取歌曲的开端时段、高潮时段、尾声时段生成三个wav格式文件作为每首歌曲的代表部分,并对每首歌曲的代表部分进行歌曲id标识;

步骤s1-2:运用python语言的scipy库读取并处理所有wav格式的音频文件,获取信号和频率数据;

步骤s1-3:依次对信号数据进行预加重、分帧、加窗、离散傅里叶变换、梅尔滤波、取对数、离散余弦变换、求一阶差分、将mfcc系数与其一阶差分结合得到每一帧的mfcc向量。

为了更好的实现本发明,进一步地,所述步骤1-3具体包括以下步骤:

步骤s1-3-1:对步骤s1-2中提取的原始的信号进行预加重处理,提升信号中高频部分,使信号更加平坦,同时突出高频的共振峰;

步骤s1-3-2:以256个采样点为一帧,对信号进行分帧;且两相邻帧之间保有一段重叠区域;

步骤s1-3-3:将每一帧乘以汉明窗(hammingwindow),增加帧左右两端的连续性;

步骤s1-3-4:进行离散傅里叶变换将信号由时域转到频域,得到后续分析用的幅度谱;

步骤s1-3-5:使用梅尔刻度滤波器组对幅度谱进行频率相乘累加,得到该帧数据在每个滤波器对应频段的能量值,即对频域幅值进行过滤精简;

步骤s1-3-6:对能量值作自然对数运算,转化为人耳对声音感知的非线性关系;

步骤s1-3-7:将对数能量带入离散余弦变换,分除冗余数据,求出mfcc系数;

步骤s1-3-8:对步骤s1-3-7得到的mfcc系数进行动态差分参数提取,得到mfcc的一阶差分,并将其静动态特征结合而拼接得到最终的mfcc向量。

为了更好的实现本发明,进一步地,所述步骤s1-1中歌曲的开端时段是指歌曲开始0-15秒,歌曲的高潮时段是指歌曲高潮开始0-20秒,歌曲的尾声时段是指歌曲最后20秒的前15秒。

为了更好的实现本发明,进一步地,所述步骤s3具体包括以下步骤:

步骤s3-1:从曲库的所有mfcc向量中选取k个互相之间欧式距离不近的mfcc向量作为簇的中心向量;

步骤s3-2:计算曲库中除去步骤s3-1中已选取的k个mfcc向量以外的其余mfcc向量与各个簇的中心向量之间的欧式距离,将每个mfcc向量划归到以与其距离最近的簇的中心向量为中心的一个簇中;

步骤s3-3:用标准k-means算法计算k个新的簇的簇中心向量而得到各维平均值;

步骤s3-4:重复步骤s3-3直到k个新的簇的中心向量不再变化或达到迭代次数,得到最终的聚类结果。

所述步骤s3-1中选取k个互相之间欧式距离不近的mfcc向量,具体是指,选择批次距离尽可能远的k个mfcc向量。选择k个互相之间欧式距离不近的mfcc向量的具体过程如下:首先随机选择一个mfcc向量作为第一个初始类簇的中心向量,然后选择距离第一个初始类簇的中心向量最远的那个mfcc向量作为第二个初始类簇的中心向量,然后再选择距离前两个向量(第一个初始类簇的中心向量、第二个初始类簇的中心向量)的最近距离最大的mfcc向量作为第三个初始类簇的中心向量,以此类推,直至选出k个初始类簇的中心向量。

为了更好的实现本发明,进一步地,所述步骤s4具体是指根据步骤s3最终的聚类结果,计算曲库中每首歌曲所含n个mfcc向量属于k个簇中各个簇的比例,根据计算结果生成k维标签向量集;

其中:n为一首歌曲的mfcc向量总数;k为第一次k-means聚类的簇总数。

为了更好的实现本发明,进一步地,所述步骤s5中第二次k-means聚类的簇数不由人工指定,而是基于“罩盖思想”根据曲库中的歌曲数量智能决定;具体实现步骤如下:

步骤s5-1:设置两个距离阈值d1和d2,且d1>d2;

步骤s5-2:将曲库中所有歌曲的k维标签向量集装入一个容器中,并建立一个罩盖标签向量集合c等待填充;

步骤s5-3:从容器中所有的k维标签向量集中随机选择一个不属于罩盖标签向量集合c的标签向量p,并计算标签向量p与罩盖标签向量集合c中每个向量的欧式距离:

若罩盖标签向量集合c为空,则将标签向量p加入罩盖标签向量集合c执行下一步;

若标签向量p与罩盖标签向量集合c中每个向量的距离均大于d1,则将标签向量p作为一个新罩盖标签向量加入罩盖标签向量集合c;

若标签向量p与罩盖标签向量集合c中某一向量的距离小于d1,则将标签向量p加入以该向量为中心的罩盖;

步骤s5-4:若标签向量p与罩盖标签向量集合c中某一向量的距离小于d2,则将标签向量p从容器c中删除并执行下一步;

步骤s5-5:重复s5-3和s5-4步骤直到容器内为空,此时罩盖标签向量集合c中的k维标签向量集为第二次k-means聚类的初始化k2个类别中心向量;

步骤s5-6:开始第二次k-means聚类,计算曲库中各歌曲的k维标签向量集中除这k2个类别中心向量外所有标签向量与这k2个类别中心向量的欧式距离,将每个标签向量划归到离它最近的类别中心向量所在的簇中;

步骤s5-7:计算k2个新的簇的类别中心向量,即求各维平均值的标准k-means算法;

步骤s5-8:重复步骤s5-6与s5-7直到k2个类别中心向量不再变化或达到迭代次数。

k2为第二次k-means的聚类簇数,也是曲库歌曲最终分类的类别总数。两次k-means聚类后最终得到曲库中所有歌曲的聚类结果,将听觉感知相近的歌曲分类到一起。

本发明与现有技术相比,具有以下优点及有益效果:

(1)本发明基于迭代k-means算法得到mfcc向量并以mfcc向量作为声学特征按情感类别对歌曲进行高效精准的聚类,实现曲库中海量歌曲以情感类别自动分类的功能。

(2)本发明基于两次迭代k-means对曲库中的歌曲进行了聚类,将对于人耳感知性相近的歌曲分类到一起,解决人工分类困难且准确率交底的问题。

附图说明

图1为本发明基于迭代k-means算法的歌曲聚类方法的总流程图。

图2为本发明基于迭代k-means算法的歌曲聚类方法中的mfcc向量提取流程图。

图3为本发明基于迭代k-means算法的歌曲聚类方法中第一次k-means聚类的流程图。

图4为本发明基于迭代k-means算法的歌曲聚类方法中第二次k-mean聚类的流程图。

具体实施方式

为使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明的具体运作流程进行更为详细的说明,本发明的示意性实施方式及其说明仅用于解释本发明,并不作为本发明的限定。

实施例1:

本实施例的一种基于迭代k-means算法的歌曲聚类方法,如图1-4所示,具体包括以下步骤:

步骤s1:分时段提取曲库中歌曲的梅尔频率倒谱系数,得到每首歌曲各时段每一帧的mfcc向量;

步骤s2:对步骤s1中所有mfcc向量进行歌曲id标识,将各个mfcc向量所属歌曲信息汇整成数据集;

步骤s3:将步骤s2中的数据集作为输入数据进行第一次k-means聚类,获取各个mfcc向量所属的簇信息,得到mfcc向量的聚类结果;

步骤s4:由每首歌曲所含mfcc向量在各个簇的比例生成与该歌曲对应的k维标签向量集;每首歌曲有且只有一个对应的k维标签向量集;

步骤s5:以曲库中每首歌曲的k维标签向量集作为输入数据进行第二次k-means聚类,得到歌曲分类结果。

本发明以mfcc系数作为声学特征,运用两次迭代k-means对曲库中的歌曲进行了聚类。第一次聚类针对曲库中所有mfcc向量提取该曲库中标签,即传统的特征向量提取过程。第二次聚类根据加工后的标签向量进行曲库中的歌曲聚类,将对于人耳感知性相近的歌曲分类到一起。

实施例2:

本实施例以实施例1为基础,限定所述步骤s1中分时段提取曲库中歌曲的梅尔频率倒谱系数并得到每首歌曲各时段每一帧的26维mfcc向量,即第一次k-means聚类的特征向量为26维mfcc向量。同时,所述步骤s3中设置第一次k-means聚类的簇总数k的值为50,即通过第一次k-means聚类提取出曲库中mfcc向量中具有标志性特征的50个代表向量。

基于上述限定,本实施例中的一种基于迭代k-means算法的歌曲聚类方法,具体包括步骤s1~s5。

步骤s1:分时段提取曲库中歌曲的梅尔频率倒谱系数,得到每首歌曲各时段每一帧的mfcc向量。

步骤s1具体是指:

步骤s1-1:对曲库中所有歌曲进行预处理,提取歌曲的开端时段、高潮时段、尾声时段生成三个wav格式文件作为每首歌曲的代表部分,并对每首歌曲的代表部分进行歌曲id标识;

步骤s1-2:运用python语言的scipy库读取并处理所有wav格式的音频文件,获取信号数据和采样频率;

步骤s1-3:依次对信号数据进行预加重、分帧、加窗、离散傅里叶变换、梅尔滤波、取对数、离散余弦变换、求一阶差分、将mfcc系数与其一阶差分结合得到每一帧的26维mfcc向量。

所述步骤1-3具体包括步骤s1-3-1~s1-3-8:

步骤s1-3-1:预加重。具体指:对步骤s1-2中提取的原始的信号数据进行预加重处理,提升信号中高频部分,使信号更加平坦,同时突出高频的共振峰。

实现预加重处理的具体公式如下:

s’(n)=s(n)–β*s(n);

其中,β为加重系数,且β设为0.95;

s’(n)为加重后的数字语音信号;

s(n)为采样后的数字语音信号。

当加重系数β为0.95时,预加重处理的公式可以简化为s’(n)=0.05s(n)。

步骤s1-3-2:分帧。具体指:以256个采样点为一帧,对信号进行分帧。为了避免临近两帧变化过大,因此会让两相邻帧之间保有一段重叠区域。

步骤s1-3-3:加窗。具体指:将每一帧乘以汉明窗(hammingwindow),增加帧左右两端的连续性。

为了处理语音信号,需要对语音信号进行加窗,也就是一次仅处理窗中的数据。因为实际的语音信号很长,实际操作过程中不能也不必对非常长的数据进行一次性处理。明智的解决办法就是每次取一段数据,进行分析,然后再取下一段数据,再进行分析。

本发明中以构造汉明窗这样一个函数的方式取一段数据。汉明窗是一种函数,它的形状像窗,类似的函数被叫做窗函数。

实现加窗的具体公式如下:

其中,a为窗系数,且a取0.46;

n为帧的大小;

n=0,1,…,n-1。

步骤s1-3-4:离散傅里叶变换,fft。具体指:进行离散傅里叶变换将时域信号转化到频域进行后续分析。

步骤s1-3-5:梅尔滤波。具体实现方式为使用s1-3-4得到的幅度谱分别和26个滤波器中的每一个滤波器进行频率相乘累加,得到该帧数据在每个滤波器对应频段的能量值;使用梅尔刻度滤波器组进行过滤,对频域幅值进行精简。

步骤s1-3-6:取对数。具体指:对能量值作自然对数运算,转化为人耳对声音感知的非线性关系。

步骤s1-3-7:离散余弦变换,dct。具体指:将对数能量带入离散余弦变换,分除冗余数据,求出mfcc系数。

实现离散余弦变换的具体公式如下:

其中,l为mfcc系数阶数,且l取13;

m为梅尔滤波器个数;

c(n)为mfcc系数;

m为滤波器编号;

s(m)为滤波器组输出的对数能量。

步骤s1-3-8:求一阶差分、将mfcc系数与其一阶差分结合。具体指:对s1-3-7的到的mfcc系数进行动态差分参数提取,得到mfcc的一阶差分,并将其静动态特征结合后拼接得到最终的26维mfcc向量。

具体实现公式如下:

其中:表示第t个一阶差分;

表示第t个倒谱系数;

表示第t+1个倒谱系数;

表示第t-1个倒谱系数;

表示第t+k个倒谱系数;

表示第t-k个倒谱系数;

表示mfcc系数特定阶数;

表示k的遍历;

表示倒谱系数的阶数;

表示一阶倒数的时间差,可取1或2。

步骤s2:对步骤s1中所有mfcc向量进行歌曲id标识,将各个mfcc向量所属歌曲信息汇整成数据集。对每一帧mfcc向量进行歌曲id标识,指明它属于曲库中哪一首歌曲,同时以曲库中所有mfcc向量作为数据集,便于后续操作。

步骤s3:将步骤s2中的数据集作为输入数据进行第一次k-means聚类,获取各个mfcc向量所属的簇信息,得到mfcc向量的聚类结果。进行第一次k-means聚类操作时,设置k的值为50,旨在通过第一次k-means聚类提取出曲库中mfcc向量中具有标志性特征的50个代表向量。

所述步骤s3具体包括步骤s3-1~步骤s3-4。

步骤s3-1:从曲库所有mfcc向量中选取50个互相之间欧式距离不太近的mfcc向量作为初始的簇的中心向量;

步骤s3-2:计算曲库中其余mfcc向量与各个簇的中心向量之间的欧式距离,将每个mfcc向量划归到以与其距离最近的簇的中心向量为中心的一个簇中;

步骤s3-3:计算50个新的簇的簇中心向量,即求各维平均值的标准k-means算法;

步骤s3-4:重复步骤s3-3直到50个簇中心向量不再变化或达到迭代次数;

步骤s4:根据步骤s3最终的聚类结果,计算曲库中每首歌曲所含n个mfcc向量属于50个类簇的比例;

根据计算结果生成50维标签向量ni(i=1,2,…,50)。

其中:ni为歌曲的mfcc向量属于第i个聚类的数量,i=1,2,…,k;

n为一首歌曲的mfcc向量总数;

k为第一次k-means聚类的簇总数。

步骤s5:以曲库中每首歌曲的50维标签向量作为特征向量,进行第二次k-means聚类,并且基于“罩盖”思想以曲库中歌曲的数量智能确定最后的歌曲类别数,最终得到歌曲分类结果。

传统的聚类算法对于一般的小数据量的应用问题都是可行的解决方法,但是当数据量呈几何级增长时,实施难度也会越来越高。这里的数据量增长指的是:①数据的条目很多,整个数据集包含的样本数据向量很多;②针对①中的每个样本数据向量其维度很大,即包含多个属性;③要聚类的中心向量很多。

本申请中的罩盖思想用在k均值之前的粗聚类。考虑到k均值在使用上必须要确定k的大小,而往往数据集预先不能确定k的值大小的,这样如果k取的不合理会带来k均值的误差很大,也就是说k均值对噪声的抗干扰能力较差。

本发明中罩盖思想的具体思路为:使用一个简单距离计算方法来产生具有一定数量的可重叠的子集。通过粗糙距离计算方法把数据划入不同的可重叠的子集中,然后只计算在同一个重叠子集中的样本数据向量来减少对于需要距离计算的样本数量,同时得到的子集个数即为k-means算法的聚类簇数k。

所述步骤s5具体包括步骤s5-1~步骤s5-5。

步骤s5-1:设置两个距离阈值d1和d2,且d1>d2;

步骤s5-2:将曲库中所有歌曲的k维标签向量集装入一个容器中,并建立一个罩盖标签向量集合c等待填充;首次建立盖标签向量罩盖标签向量集合c时,盖标签向量罩盖标签向量集合c为空;

步骤s5-3:从容器中所有的k维标签向量集中随机选择一个不属于罩盖标签向量集合c的标签向量p,并计算标签向量p与罩盖标签向量集合c中每个向量的欧式距离:

若罩盖标签向量集合c为空,则将标签向量p加入罩盖标签向量集合c执行下一步;

若标签向量p与罩盖标签向量集合c中每个向量的距离均大于d1,则将标签向量p作为一个新罩盖标签向量加入罩盖标签向量集合c;

若标签向量p与罩盖标签向量集合c中某一向量的距离小于d1,则将标签向量p加入以该向量为中心的罩盖;

步骤s5-4:若标签向量p与罩盖标签向量集合c中某一向量的距离小于d2,则将标签向量p从容器c中删除并执行下一步;

步骤s5-5:重复s5-3和s5-4步骤直到容器内为空,此时罩盖标签向量集合c中的k维标签向量集为第二次k-means聚类的初始化k2个类别中心向量;

步骤s5-6:开始第二次k-means聚类,计算曲库中各歌曲的k维标签向量集中除这k2个类别中心向量外所有标签向量与这k2个类别中心向量的欧式距离,将每个标签向量划归到离它最近的类别中心向量所在的簇中;

步骤s5-7:计算k2个新的簇的类别中心向量,即求各维平均值的标准k-means算法;

步骤s5-8:重复步骤s5-6与s5-7直到k2个类别中心向量不再变化或达到迭代次数。

k、k2均为k-means的聚类簇数,其中k为第一次k-means的聚类簇数,k2为第二次k-means的聚类簇数,也是曲库歌曲最终分类的类别总数。两次k-means聚类后最终得到曲库中所有歌曲的聚类结果,将听觉感知相近的歌曲分类到一起。

本发明中罩盖相当于一个容器,若步骤s5-3中标签向量p与罩盖标签向量集合c中某一向量x的距离小于d1,则将标签向量p加入以该向量x为中心的罩盖。即罩盖标签向量集合c中有一向量x,若步骤s5-3中标签向量p与向量x的距离小于d1,则标签向量p应属于并归入以向量x为中心的罩盖。

由此,本发明提供了一种基于二次迭代k-means的歌曲聚类方法。能根据曲库的mfcc向量,从人耳感知方面将乐库中相似歌曲归类到一起,解决了海量歌曲根据情感类别聚类困难的问题,使用户能更加方便准确地找到自己可能喜欢却又不清楚具体信息的歌曲。

实施例3:

本实施例在实施例1、实施例2的基础上进一步优化,歌曲的开端时段是指歌曲开始0-15秒,歌曲的高潮时段是指歌曲高潮开始0-20秒,歌曲的尾声时段是指歌曲最后20秒的前15秒。

也就是指,所述步骤s1-1中对曲库中所有歌曲进行预处理,提取歌曲开端(前15秒),高潮(中间20秒),尾声(结尾20秒中的前15秒)生成三个wav格式文件,作为每首歌的代表部分,并对其进行歌曲id标识。

本实施例的其他部分与实施例1或实施例2相同,故不再赘述。

以上所述,仅是本发明的较佳实施例,并非对本发明做任何形式上的限制,凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化,均落入本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1