作者:飘荡的鱼头 公众号:优达学城Udacity(youdaxue)
关于华语男歌手的认识应该是停在初中了吧。那时火的是周杰伦,王力宏,林俊杰和潘玮柏——我们班几个男生因为经常唱他们的歌有了诸如“宗杰伦”,“温俊杰”,“鱼力宏”的外号;
我们全寝室在社会实践表演会上合唱了一首《枫》,由于有我这种跑调天王的存在,没有拿到最佳歌曲节目奖;
有个学期在操场捡了一个用电池的mp3,只有512MB。我们在电脑课上把歌拷进去,然后每晚轮流听,听了好久;
由于他们的歌都烂熟于心,所以有几个同学就养成了一个不良爱好——改编歌词,往往会改得很恶俗,《菊花残》这种还算普通,印象中最恶俗的歌就是——《腋毛海》
虽然类似的回忆还有很多,但就此打住吧,写这篇文章是受了之前相关歌词分析文章和歌手排行榜等图片数据的启发,主要目的是从数据分析的角度对他们这四位的歌词进行分析。研究有几个有趣的方向,如:
1. 他们最正面情绪的十首歌是哪些?
2. 他们最负面情绪的十首歌是哪些?
3. 总的来说,哪个人的歌词最伤感?
4. 总的来说,哪个人的歌词最欢快!
5. 他们最喜欢季节是什么?
6. 他们最常用“你”,“我”还是“她”?
7. 谁最会说“爱”字?
当然,因为歌词和歌手存在着一定程度的割裂,有些作词并不是歌手本身,但本次研究不考虑这些问题。换个角度想,这些歌是被歌手不断演唱而知名,所以里面肯定蕴含了歌手本身的情感和认知,不然也不会唱火,你说是吧?
来源于百度音乐。我用第三方工具pyspider写了一个爬虫自动抓取了1000多条数据。说实话,从百度音乐抓下来的歌词数据格式不是特别好看,比如歌词开头两三行介绍歌手、作曲、作词的顺序不太一样。这让我想起了以前用酷狗听歌的时候,歌词都是云端匹配,良莠不齐。很多歌词前面都会带着一个QQ号,大概是制作这个歌词的人,有的甚至会写一两段话,诸如“XXX,你要知道我一直很爱你”之类的话,有点莫名其妙。
但是,因为一些版权和爬虫抓取难易程度的原因,百度音乐是目前的最佳选择,所以只好用它。最终,我获得的数据包含了以下字段:
专辑名album,歌手singer, 歌词lyrics 和歌名title
歌词部分共有32万个字符。由于有些歌曲存在着歌词缺失,不得不做处理。在数据清洗之后的有效歌曲数如下:
在情感分析中,我用到了BosonNLP这个工具,直接可以在python调用对字符串进行情感分析,免费用户只能一天五百次的调用次数,不过已经够用了(我注册了三四个号)。
它是这么介绍他的情感分析功能的:基于上百万条社交网络平衡语料和数十万条新闻平衡语料的机器学习模型,结合自主开发的半监督学习技术,正负面情感分析准确度达到80%~85% ,在BosonNLP工具中,情感分析的结果由两部分构成,正面情绪分和负面情绪分,两者加起来等于1。
心理学上把焦虑、紧张、愤怒、沮丧、悲伤、痛苦等情绪统称为负面情绪。而正面情绪是指人的一种积极的情绪,开心、乐观、自信、欣赏、放松等等。所以之前我用消极和积极有点不妥(虽然negative和positive翻译过来是这样),毕竟汉语博大精深。
例如,我发现一些rap歌曲被分到了负面情绪,但它并不是消极的,只是包含了紧张激动的情绪,在整体情感分析前,我挑了一些歌对即将用到的工具进行了测试。在下面表格sentiment一栏中,左侧的数字代表着积极情绪分,右侧的数字代表着消极情绪分。
首先测试的是周杰伦的《安静》,结果测出来是绝对的负面,似乎还不错:
再来一首《阳光宅男》,结果是绝对的正面,符合预期:
最后来测一首潘玮柏的《我对天空说》,这首歌真的悲伤啦,看来这个工具也能正确的识别:
在测试完这三个后我就放心的开始整体探索(其实我还测了很多),毕竟人家都把这个工具出来卖了,准确性肯定很高。
我修改了下BosonNLP的接口,把通用接口换成了微博接口,重新跑了一次情感分数,已经更新如下。后面的榜单也做了更新,个人感觉稍微又合理些。但是微博语料和歌词还是差很多,最好的条件应该是自己有个针对歌词的训练样本,这样准确率会提高很多。
最后得到了一个整体的结果,我发现四位歌手中,积极情绪分数最高的是林俊杰,其次是潘玮柏,王力宏第三,周杰伦最低。因为互加为1,消极情绪的分数的排名就刚好相反。
周杰伦的歌之所以积极情绪最低,消极情绪最高可能是有两个原因造成的:
1、他的歌很多本身歌词就比较悲伤
2、周杰伦的歌总体数量比其他三位要多,而他们大部分的歌都是属于情歌,而情歌呢有大部分都很悲伤,所以就会拉低这积极情绪的评分。
接下来看一下每位歌手最正面情绪和最负面情绪的十大金曲吧!
王力宏十大“负面情绪”歌曲:
王力宏十大“正面情绪”歌曲:
周杰伦
林俊杰十大“正面情绪”歌曲:
基于以上榜单,我终于找到了最伤感的歌——《倒带》,消极指数高达0.99726。
大家说某某一歌曲怎么没有入选十大榜单,那是因为BosonNLP给的分数稍微低了点。但提到的歌我都看了下,基本分类正确,即大家认为它应该是负面情绪的,BosonNLP算出来的负面情绪就是大于0.5。只不过在小数点之后的数值差异受到训练样本和算法的影响,有差距。
所以前十的榜单只是一个参考作用。毕竟情感分析的首要目的是分类正确(正面or负面),而不是在分类后的排序中的准确。歌曲查询地址:https://jinshuju.net/s/P762Yj,用了金数据的一个功能,点进去后输入想查的歌名,就会得到反馈,如图所示:
在结束了主要部分情感分析内容后,我对歌词的用词和意象也做了一些探索。我把每首歌的歌词进行拆分,排除掉了停用词,对剩下的词做了一个频率统计。
你我还是她?
我首先对“你”,“我”,“他/她”三个词进行分析。大部分的歌以第一人称和第二人称为主。其中王力宏的歌词中第一人称出现比率较高,潘玮柏的歌词中第二人称出现的比较多。相对而言,第三人称在周杰伦的歌词中出现的比率比较高。
我们可以推断出什么呢?王力宏是个自我意识比较强,善于表达自己的人;潘玮柏擅长与别人沟通,会站在对方角度考虑;周杰伦则像是站在旁观者的角度描述别人,有一种距离感(以上这是我的瞎扯)
“爱”你有多深?
在流行歌曲中,情歌的比重占了绝大部分,所以“爱”一字出现的频率比较高,我也对此做了一个统计。结果显示,在王力宏的所有歌曲里,“爱”出现的频率略高于其他三位男歌手,周杰伦的反而最低。这也可能和他的“旁观者”角度也有关系。王力宏因为对“我”字用的比较频繁,所以经常表达自己的爱意,这么一想也就解释的通了。
四个人最喜欢的季节?
通过词频分析,周杰伦的歌词中有关秋天的意象出现的最多,王力宏则比较喜欢冬天和春天,林俊杰对夏天的热爱比较浓烈,潘玮柏的歌词中表现出的倾向性不大。
总结与展望
本次项目主要从数据分析的角度对四位华语男歌手的歌词进行了探索,分析了歌词的情感,找出了消极和积极的前十排行,也对几个字词进行了趣味性的探索。
这是我第一次接触中文文本分析这块内容,自然有不足。一开始我是想自己写情感分析模块,但如果自己写的话,会涉及到情感词典,否定词,程度词权重等诸多问题,我在尝试后得到的结果不尽人意,又意外找到了一个快捷的工具,所以就放弃了自建情感分析。希望以后有机会可以自己再尝试,应用机器学习的方式做出自己的文本分析模型。
(本文作者为飘荡的鱼头,转载已获得授权,略增删。)
学 Facebook 数据分析课,成为硅谷认证数据分析师!
新版 “数据分析师” 将由 “数据分析师(入门)”、“数据分析师(进阶)” 两大认证项目组成。新版项目除原有的独家硅谷技术课程、行业领导者设计的实战项目、一对一学习辅导和名企颁发学习认证外,学员还享有全中文的学习辅导、直播辅导、学习小组服务。
* 课程报名倒计时,将于 6月28日 23:59 截止报名。
* 课程报名请点击阅读原文,了解学费及课程安排,还能加入微信群,掌握第一手信息,关注课程后还可加入直播答疑分享。
优惠码: DataManage
长按二维码关注,每天离硅谷更近一步!
>> 点击 “阅读原文”,赶紧报名抢座