前言
为了找到最伤感的一首歌,我分析了王力宏,周杰伦,林俊杰和潘玮柏32万字歌词。
本项目受到《我分析了42万字歌词,就为了搞清楚民谣歌手们在唱些什么》一文的启发以及下面的这幅图,一张让我更加确定了“已经年纪不小了”这个残酷事实的图。
说实话,这上面的歌手我大概只认识一半,听过的歌更是少的可怜,大概只有《青春修炼手册》,《演员》还有张杰翻唱的《街角的祝福》。
关于华语男歌手的认识应该是停在初中了吧。那时火的是周杰伦,王力宏,林俊杰和潘玮柏——
我们班几个男生因为经常唱他们的歌有了诸如“宗杰伦”,“温俊杰”,“鱼力宏”的外号;
我们全寝室在社会实践表演会上合唱了一首《枫》,由于有我这种跑调天王的存在,我们没有拿到最佳歌曲节目奖;
有一个学期在操场捡了一个用电池的mp3,只有512MB。我们在电脑课上把歌拷进去,然后每晚轮流听,听了好久;
由于他们的歌都烂熟于心,所以有几个同学就养成了一个不良爱好——改编歌词,往往会改得很恶俗,《菊花残》这种还算普通,印象中最恶俗的歌就是——《腋毛海》。
。
。
。
好了,虽然类似的回忆还有很多,但就此打住吧,毕竟这篇文章的主要目的,是从数据分析的角度对王力宏,周杰伦,林俊杰和潘玮柏的歌词进行分析。主要研究几个有趣的问题,比如:
- 他们最伤感的(情绪消极)的十首歌是哪些?
- 他们最欢乐的(情绪积极)的十首歌是哪些?
- 总的来说,哪个人的歌词最伤感?
- 总的来说,哪个人的歌词最欢快!
- 他们最喜欢季节是什么?
- 他们最常用“你”,“我”还是“她”?
- 谁最会说“爱”字?
当然,因为歌词和歌手存在着一定程度的割裂,有些作词并不是歌手本身,但本次研究不考虑这些问题。换个角度想,这些歌是被歌手不断演唱而知名,所以里面肯定蕴含了歌手本身的情感和认知,不然也不会唱火,你说是吧?(突然自己感觉自己说的很有道理,嗯)
数据来源
本次数据来源于百度音乐。我用第三方工具pyspider写了一个爬虫自动抓取了1000多条数据。说实话,从百度音乐抓下来的歌词数据格式不是特别好看,乱糟糟,比如歌词开头两三行介绍歌手、作曲、作词的顺序不太一样。这让我想起了以前用酷狗听歌的时候,歌词都是云端匹配,良莠不齐。很多歌词前面都会带着一个QQ号,大概是制作这个歌词的人,有的甚至会写一两段话,诸如“XXX,你要知道我一直很爱你”之类的话,有点莫名其妙。但是,因为一些版权的原因,百度音乐里的歌是最全的,所以只好用它。最终,我获得的数据包含了以下字段:
专辑名album,歌手singer, 歌词lyrics 和歌名title
歌词部分共有32万个字符。由于有些歌曲存在着歌词缺失,不得不做处理。在数据清洗之后的有效歌曲数如下:
接着就开始今天的重头戏——情感分析。
情感分析
在情感分析中,我用到了bosonnlp(玻森中文语义平台)这个工具,直接可以在python调用对字符串进行情感分析,免费用户只能一天五百次的调用次数,不过已经够用了(我注册了三四个号)。
在bosonnlp工具中,情感分析的结果由两部分构成,积极情绪分和消极情绪分,两者加起来等于1。当我们把它应用到歌词里时,积极情绪分越高,一般就认为这首歌比较正能量,欢快,高兴,活泼;如果消极情绪分高,则说明这首歌比较带有负面情绪,悲伤,难过,消沉。
在整体情感分析前,我挑了一些歌对即将用到的工具进行了测试。在下面表格sentiment一栏中,左侧的数字代表着积极情绪分,右侧的数字代表着消极情绪分。
首先测试的是周杰伦的《安静》,结果测出来是绝对的消极,似乎还不错:
再来一首《阳光宅男》,结果是绝对的积极,符合预期:
最后来测一首潘玮柏的《我对天空说》,这首歌真的悲伤啦,看来这个工具也能正确的识别:
在测试完这三个后我就放心的开始整体探索(其实我还测了很多),毕竟人家都把这个工具出来卖了,肯定是有很高的准确性。
最后得到了一个整体的结果,我发现四位歌手中,积极情绪分数最高的是王力宏,其次是林俊杰,潘玮柏第三,周杰伦最低。因为互加为1,消极情绪的分数的排名就刚好相反。
周杰伦的歌之所以积极情绪最低,消极情绪最高可能是有两个原因造成的:1)他的歌很多本身歌词就比较悲伤 2)周杰伦的歌总体数量比其他三位要多,而他们大部分的歌都是属于情歌,而情歌呢有大部分都很悲伤,所以就会拉低这积极情绪的评分。
至于王力宏最“正能量”呢,这个还是有点出乎我的意料。
接下来看一下每位歌手最积极和最消极的十大金曲吧!
王力宏
周杰伦
林俊杰
潘玮柏
基于以上榜单,我终于找到了最伤感的歌——《倒带》,消极指数高达0.99902。(虽然周杰伦只是唱过倒带)
当你看完这些排行榜,你可以留言告诉我,你是否对最消极(伤感)和最积极(欢乐)歌曲排名的认可,这也可以提高我对这个情感分析工具准确性的判断。
趣味探索
在结束了主要部分情感分析内容后,我对歌词的用词和意象也做了一些探索。我把每首歌的歌词进行拆分,排除掉了停用词,对剩下的词做了一个频率统计。
你我还是她?
我首先对“你”,“我”,“他/她”三个词进行分析。大部分的歌以第一人称和第二人称为主。其中王力宏的歌词中第一人称出现比率较高,潘玮柏的歌词中第二人称出现的比较多。相对而言,第三人称在周杰伦的歌词中出现的比率比较高。
我们可以推断出什么呢?王力宏是个自我意识比较强,善于表达自己的人;潘玮柏擅长与别人沟通,会站在对方角度考虑;周杰伦则像是站在旁观者的角度描述别人,有一种距离感(以上这是我的瞎扯)
“爱”你有多深
在流行歌曲中,情歌的比重占了绝大部分,所以“爱”一字出现的频率比较高,我也对此做了一个统计。结果显示,在王力宏的所有歌曲里,“爱”出现的频率略高于其他三位男歌手,周杰伦的反而最低。这也可能和他的“旁观者”角度也有关系。王力宏因为对“我”字用的比较频繁,所以就经常表达自己的爱意,这么一想也就解释的通了。
四个人最喜欢的季节?
通过词频分析,周杰伦的歌词中有关秋天的意象出现的最多,王力宏则比较喜欢冬天和春天,林俊杰对夏天的热爱比较浓烈,潘玮柏的歌词中表现出的倾向性不大。
(注:林俊杰和潘玮柏歌词中对季节描述相对较少)
总结与展望
本次项目主要从数据分析的角度对四位华语男歌手的歌词进行了探索,分析了歌词的情感,找出了消极和积极的前十排行,也对几个字词进行了趣味性的探索。
这是我第一次接触中文文本分析这块内容,自然有很大的不足。一开始我是想自己写情感分析模块,但是因为如果自己写的话会涉及到情感词典,否定词,程度词权重等诸多问题,我在尝试后得到的结果不尽如人意,又意外找到了一个快捷的工具,所以就放弃了自建情感分析。希望以后有机会可以自己再尝试,应用机器学习的方式做出自己的文本分析模型。