当前信息社会对歌曲的需求与日俱增,各种智能歌曲搜索和推荐系统逐渐涌现。歌曲情感分类是智能歌曲搜索和推荐的关键技术,目标是赋予歌曲特定的情感标签,以方便用户搜索或者系统推荐。近年来,歌曲情感分类首先在音频信号处理研究中涌现,人们试图借助Mel倒谱系数(MFCC)从音频信号中提取可能会反映情感的音频特征(例如强度、频谱质心、能量、节奏、速度等),再借助机器学习算法实现情感分类。
歌曲以多种媒体表达情感,包括音乐、演唱和歌词等。因此,仅以歌词判定歌曲情感存在一定片面性。尤其是随着歌曲形式的不断推陈出新,歌词所表达的情感有时依赖于歌手对歌曲的演绎风格,二者甚至会发生偏差。某些歌曲从歌词看并无明显情感倾向,但经过歌手演绎后,能表达强烈的情感。之前有学者在进行相关研究前,对歌曲进行了调查,结果显示中文歌曲中只有不到5%的流行歌曲属于这种类型。所以,本文以歌词为歌曲情感的分析依据,以自然语言处理技术判定歌曲情感。
歌曲情感分析的依据是情感模型,即对情感类别的预设。本文采取流行的Thayer情感模型,分别从能量和压力两个坐标轴将歌曲情感划分为两类,从而形成“满足(contentment)”、“沮丧(depression)”、“焦虑(anxious)/狂乱(frantic)”和“生气勃勃(Exuberance)”四类情感。有学者的实验证明,音频信号在能量高低的判定上具有较高准确度,而难以在压力大小进行判定。因此本文只针对压力大小的判定展开基于歌词的研究,试图从歌词中分析歌曲所表达的情感压力水平,将歌曲情感定义为“轻松(light-hearted)”和“压抑(heavy-hearted)”两类。这同本文观点极性分析中的“积极”和“消极”有相似之处。
首先将歌词表示为向量空间模型,然后以朴素贝叶斯和支持向量机算法实现歌曲情感分类。在前人实验的基础上总结发现,基于词汇的向量空间模型(w-VSM)在歌词文本表示上存在如下问题:
(1)尽管有很多算法可用于特征选择,但w-VSM无法消除某些与情感表达无关的词汇特征,这些特征不会对情感分析起到作用。 (2)歌词中很多情感词汇在实际使用时存在歧义。歧义在w-VSM中未经适当消解而直接参与情感分析,会对结果形成影响。 (3)否定词和修饰词在歌词中频繁出现,他们对情感的增强、削弱和置反作用在w-VSM中无法体现。 (4)歌词往往比较短,平均在 50 ~ 80 个词左右,这导致w-VSM严重的数据稀疏问题。
针对上述问题,有学者提出情感向量空间模型(s-VSM),以情感单元作为特征提取对象,以情感单元的统计量作为情感特征。情感向量空间模型(s-VSM)遵循如下设计原则:
(1)只考虑情感相关词汇对情感分析的影响。 (2)情感词汇需在语义上下文中进行必要消歧后才用于情感分析。 (3)考虑否定词和修饰词对情感的置反、增强和削弱影响。
基于上述设计原则,参考了之前学者情感向量空间模型的设计,本文也将情感单元作为情感特征定义的基本元素。下面提出本文对情感单元的形式化定义。
情感词典(L)可描述为三元组:
L ={C, N , M};
C ={ci}, i =1 , …, I ; N ={nj}, j =1 , …, J ; M ={mt}, t =1 , … , T
其中C代表情感词集,N代表否定词集,M代表程度词集。这些词汇可从当前主流的词典中获取,每个情感词都被赋予积极或消极的极性。给定一篇歌词W:
W ={wh}, h =1 , … , H
可借助情感词典将 W 转换为情感单元集合:
U ={uv}={ci , v , nj , v , mt , v}
ci, v∈W∩C ; nj , v∈W∩N; mt , v∈W∩M
其中 ci , v ,nj , v和mt , v出现在约定大小(每一行)的文本上下文窗口中。
实际应用中,否定词、修饰词与情感词存在依赖关系。以最简单的情感判断为例,每一行歌词中出现一个积极情感词+1分,出现一个消极情感词-1分;但情感词前面通常会有一个程度修饰词,“极好”就比“较好”或者“好”所表达的情感更强烈,所以需要在找到情感词后往前找一下有没有程度修饰,并给不同的程度一个权值;情感词前面有时也有有否定词出现,比如”不“,”不能“这些词。而且如果否定词出现的次数是单数,那么情感置反,情感分值*-1,如果是偶数,那么情感就没有置反;另外由于中文在情感表达上的复杂性,一句话里面可能有褒有贬,不能只用一个分值来表示它的情感倾向,敏感度太高了。因此本文在向量空间模型的构建中,每一个情感单元都有一个积极情感分值和一个消极情感分值,同时表示这个情感单元的情感倾向。
至此,情感单元覆盖了上下文关系和依赖关系,情感词的大部分歧义可被消除,定义如下情感向量空间模型:
VSi = (f1i(U) , f2i(U) , … , f Ti(U))
其中VSi代表第i篇歌词所对应的情感向量,fji表示第j个情感特征在第i篇歌词中出现的次数。中文歌词表达的情感往往存在铺陈、递进、高潮等不同阶段,用“行”作为上下文单位更适合歌词情感分析。
本文通过Python爬虫爬取了网易云音乐网站上被收听次数最多的中文歌单中的192首中文歌词,按照严格的实验标准,情感压力类别应该由两位专家人工判定,但由于资源不足,两类情感压力类别“轻松”和“压抑”均是根据网易云音乐歌曲下听众的普遍评论来进行主观判定,会存在部分误差。本文采取哈尔滨工业大学分词工具LTP进行分词,采用的情感词典大部分来自知网的HowNet
(包含正面情感词语、负面情感词语、正面评价词语、负面评价词语,6种级别的程度词,以及否定词),为了补充又融合了台湾大学的情感词典(包含积极情感词和消极情感词)。
提取歌词中情感单元的具体过程如下(代码详见mapper.py
):由于爬取到的歌词文本每一行表示一句,已经完成分句,直接进行分词;扫描识别情感词,记录积极还是消极,以及出现的位置;往情感词前扫描查找程度词,找到即停止扫描,为程度词设权值,乘以情感值;往情感词前扫描查找否定词,找到全部否定词,若数量为奇数,则乘-1置反,若为偶数,乘1;计算每首歌每一句歌词的积极情感值和消极情感值,用数组记录,得到每首歌的情感单元。去重得到情感特征集合之后,用向量形式表示每首歌。
在将歌曲表示为情感向量后,本文随机选取了154(80%)首歌作为训练集生成分类器,剩下的32(20%)首歌作为测试集,再利用分类器对测试集歌曲进行情感分类。,本文的歌词情感分类属于二元分类,采取了Scikit-Learn
库中的朴素贝叶斯和支持向量机两种分类算法,Scikit-Learn
包含有完善的文档和丰富的机器学习算法。
朴素贝叶斯分类器是一个以贝叶斯定理为基础,广泛应用于情感分类领域的分类器。本文采用的朴素贝叶斯分类器类别是多项贝叶斯(Multinomial NB),这个分类器以出现次数作为特征值,某项情感特征([积极情感分值,高级情感分值])在某首歌曲中可能出现多次,符合歌词情感值的分布。其他的朴素贝叶斯分类器如高斯贝叶斯(Gaussian NB)适用于高斯分布的特征,而伯努利贝叶斯(Bernoulli NB)适用于伯努利分布的特征。
多次实验得到的分类准确率均在70%以上,详细实验结果如图1所示:
支持向量机(SVM),是把数据映射到多维空间中以点的形式存在,然后找到能够分类的最优超平面,最后根据这个平面来分类。SVM能对训练集之外的数据做很好的预测、泛化错误率低、计算开销小、结果易解释,但其对参数调节和核函数的参数过于敏感。多次实验得到的分类准确率在66%左右,详细实验结果如图2所示:
从F值和分类准确率来看,在本文的歌词情感分类实验中,朴素贝叶斯分类算法优于支持向量机算法。本文还存在很多不足,训练集和测试集的数据偏少,而且情感分类是带有主观色彩的分类准则,个人标注的两类情感压力类别“轻松”和“压抑”存在主观误差,情感特征的提取方法导致向量偏稀疏等,都会导致实验结果存在偏差。
[1] 夏云庆,杨莹,张鹏洲,刘宇飞. 基于情感向量空间模型的歌词情感分析[J]. 中文信息学报,2010,24(01):99-103.
[2] 郑亚斌,刘知远,孙茂松. 中文歌词的统计特征及其检索应用[J]. 中文信息学报, 2007,(05):61-67.