AD

2017年9月22日星期五

我分析了王力宏、周傑倫、林俊傑和潘瑋柏的32萬字歌詞:為了找到最傷感的一首歌

作者:飄蕩的魚頭   


來自:優達學城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)周傑倫的歌總體數量比其他三位要多,而他們大部分的歌都是屬於情歌,而情歌呢有大部分都很悲傷,所以就會拉低這積極情緒的評分。



接下來看一下每位歌手最正麵情緒和最負麵情緒的十大金曲吧!


 

王力宏

 
 

王力宏十大"負麵情緒"歌曲:

王力宏十大"正麵情緒"歌曲:


 

周傑倫

 
 

周傑倫十大"負麵情緒"歌曲:


周傑倫十大"正麵情緒"歌曲:


 

林俊傑

 
 

林俊傑十大"負麵情緒"歌曲:


林俊傑十大"正麵情緒"歌曲:


 

潘瑋柏

 
 

潘瑋柏十大"負麵情緒"歌曲:


潘瑋柏十大"正麵情緒"歌曲:


基於以上榜單,我終於找到了最傷感的歌——《倒帶》,消極指數高達0.99726。


大家說某某一歌曲怎麼沒有入選十大榜單,那是因為BosonNLP給的分數稍微低了點。但提到的歌我都看了下,基本分類正確,即大家認為它應該是負麵情緒的,BosonNLP算出來的負麵情緒就是大於0.5。隻不過在小數點之後的數值差異受到訓練樣本和算法的影響,有差距。


所以前十的榜單隻是一個參考作用。畢竟情感分析的首要目的是分類正確(正麵or負麵),而不是在分類後的排序中的準確。歌曲查詢地址:https://jinshuju.net/s/P762Yj,用了金數據的一個功能,點進去後輸入想查的歌名,就會得到反饋,如圖所示:



 

趣味探索


在結束了主要部分情感分析內容後,我對歌詞的用詞和意象也做了一些探索。我把每首歌的歌詞進行拆分,排除掉了停用詞,對剩下的詞做了一個頻率統計。


你我還是她?


我首先對"你","我","他/她"三個詞進行分析。大部分的歌以第一人稱和第二人稱為主。其中王力宏的歌詞中第一人稱出現比率較高,潘瑋柏的歌詞中第二人稱出現的比較多。相對而言,第三人稱在周傑倫的歌詞中出現的比率比較高。


我們可以推斷出什麼呢?王力宏是個自我意識比較強,善於表達自己的人;潘瑋柏擅長與別人溝通,會站在對方角度考慮;周傑倫則像是站在旁觀者的角度描述別人,有一種距離感(以上這是我的瞎扯)


"愛"你有多深?


在流行歌曲中,情歌的比重占了絕大部分,所以"愛"一字出現的頻率比較高,我也對此做了一個統計。結果顯示,在王力宏的所有歌曲裏,"愛"出現的頻率略高於其他三位男歌手,周傑倫的反而最低。這也可能和他的"旁觀者"角度也有關係。王力宏因為對"我"字用的比較頻繁,所以經常表達自己的愛意,這麼一想也就解釋的通了。


四個人最喜歡的季節?


通過詞頻分析,周傑倫的歌詞中有關秋天的意象出現的最多,王力宏則比較喜歡冬天和春天,林俊傑對夏天的熱愛比較濃烈,潘瑋柏的歌詞中表現出的傾向性不大。


 

總結與展望


本次項目主要從數據分析的角度對四位華語男歌手的歌詞進行了探索,分析了歌詞的情感,找出了消極和積極的前十排行,也對幾個字詞進行了趣味性的探索。


這是我第一次接觸中文文本分析這塊內容,自然有不足。一開始我是想自己寫情感分析模塊,但如果自己寫的話,會涉及到情感詞典,否定詞,程度詞權重等諸多問題,我在嚐試後得到的結果不盡人意,又意外找到了一個快捷的工具,所以就放棄了自建情感分析。希望以後有機會可以自己再嚐試,應用機器學習的方式做出自己的文本分析模型。



2100名分析師一起學習,讓口碑說話!


         (保存圖片到手機相冊,掃一掃加入)


相關文章
"在一起"後絕不是隻能進不能退2017年07月27日
【教程】如何正確使用和維護電池?手機、相機、筆記本通用2017年07月27日
孫正義最新預言:巨變即將到來,感覺睡覺都是浪費時間2017年07月27日
【CHRC分享活動】20170802-北京-管理培訓生招募與培養論壇2017年07月27日
沈從文:李白的胡子應該是翹翹的!2017年07月27日
國際奧賽再現黑馬,不過我更關心韓國數學課和中國到底有何不同?2017年07月27日
蒙牛、旺旺、可口可樂集團要做同一款產品!到底誰能贏?2017年07月27日
"我愛生活,我愛加班"2017年07月27日
好久好久沒看過這麼好的懸疑片了2017年07月27日
重回侏羅紀,你能跑贏霸王龍嗎?2017年07月27日

没有评论:

发表评论