作者:飘荡的鱼头
来自:优达学城Udacity(ID:youdaxue) 已获授权
我分析了王力宏、周杰伦、林俊杰和潘玮柏的32万字歌词,就是为了找到最伤感的一首歌。
关于华语男歌手的认识应该是停在初中了吧。那时火的是周杰伦,王力宏,林俊杰和潘玮柏——我们班几个男生因为经常唱他们的歌有了诸如“宗杰伦”,“温俊杰”,“鱼力宏”的外号;
我们全寝室在社会实践表演会上合唱了一首《枫》,由于有我这种跑调天王的存在,没有拿到最佳歌曲节目奖;
有个学期在操场捡了一个用电池的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)周杰伦的歌总体数量比其他三位要多,而他们大部分的歌都是属于情歌,而情歌呢有大部分都很悲伤,所以就会拉低这积极情绪的评分。
接下来看一下每位歌手最正面情绪和最负面情绪的十大金曲吧!