Word2Vecを使ってBUMP OF CHICKENの歌詞を分析してみた
きっかけ
2019年11月3日,東京ドームにて BUMP OF CHICKEN(以下BUMPと表記) のライブに参戦してきました.
ライブの余韻に浸っているとき,ふとある記事のことを思い出しました.この記事を見たとき「めっちゃ簡単に自然言語処理できるやん」と衝撃が走り,「BUMPの歌詞でも簡単にコーパスを作れるだろ」という何とも安直な理由で分析を始めました.
注意
自然言語処理についてほぼ何も知らない状態で分析を行ったので所々間違っている可能性があります.また,数式的な話は一切しません(できません).理論的な話を知りたい方はツヨツヨな先人がたくさんいらっしゃるのでそちらの方々の記事,資料を参考にしてください.
また,普段Rを使用しているのでpythonのコードも間違いがあるかも知れません.ご了承ください.
準備
データ収集
分析するためにはデータが必要ですね.ということでBUMPの歌詞データを準備します.ここでは明示的なやり方は割愛させていただきますが,下のQiitaの記事が参考になると思います.ちなみに,私は全て手動で集めました.
データクレンジング
今回,入手できた歌詞データは合計125曲でした.
しかし,このままでは少々問題があるので数曲の歌詞データを取り除き最終的に121曲のデータを使用していきます.以下に問題があると判断してデータから除外したり修正したりした曲名と理由を述べますが,特に重要ではないので読み飛ばしてもらっても構いません.しかし,自分的にはここが一番面白かったりします.
ハイブリッドレインボウ
この曲はthe pillowsがSYNCHRONIZED ROCKERSというアルバムを制作する際にカバーのオファーを出したそうです*1.そのため,純粋なBUMP OF CHICKENの曲ではないと判断して除外することにしました.
Ever lasting lie
この曲はオリジナル*2とアコースティックバージョン*3の2つが存在しています.歌詞は全く同じなので一方を除外することにしました.(複数のバージョンが存在する曲は他にもあるが,この曲だけが2つ掲載されているのは謎...)(例:ガラスのブルースはオリジナル*4と28yearsバージョン*5,Smileは弾き語り*6とバンドバージョン*7)
OpeningとEnding
この2曲はプレゼントという曲の一部*8なので除外しました.
voyagerとflyby
この2曲は歌詞がカタカナで表記されているのでひらがなにする処理を施しました.
実際に動かしてみた
pythonのコードは次のQiitaの記事をほとんどコピペ参考にしました.
まずはライブラリのインポートです.
次にワードを抽出する関数を定義します.
ここでBUMPの歌詞データを読み込みます.
これで準備は終わりです.では,実際にモデルを作っていきます.
はい.これだけでモデルの出来上がりです!めっちゃ簡単ですね!
では,単語がどれだけあるかをみてみます.下のコードを実行すると単語とその数が歌詞の中でどれだけ出てきてるかがわかります.
今回は単語数が上位10個を表示してみます.
おおっ!何となくできてそうですね〜
ちなみに下のコードで具体的な単語数をさくっと調べることができます.
では,Word2Vec恒例の類似語をみてみましょう.まずは,”君”の類似語をみてみます.
結果:
僕 0.6448466777801514
出会える 0.46511760354042053
だす 0.41381388902664185
増える 0.4025307297706604
おかげ 0.3966715931892395
宝石 0.39443904161453247
今夜 0.3940380811691284
越える 0.3933907151222229
いた事 0.3921634554862976
一緒 0.3907034397125244
おおお!!!!できてる!!!!
”君”と”僕”が類似語っていかにもBUMPっぽいですよね!
”出会える”も”君と出会える”って解釈すればBUMPっぽいですよね!
他にもBUMPっぽい言葉と言えば”ガラス”や”猫”,”声”などがありますね!やってみましょう!!!と言いたいところですが,長くなってきたんでエモそうな結果だけを載せます.
"ガラス”の結果:
眼 0.7653242349624634
玉 0.7509319186210632
猫 0.7420406341552734
"猫”の結果:
黒 0.7920424938201904
眼 0.7430715560913086
ガラス 0.742040753364563
"声”の結果:
耳 0.6141402721405029
塞ぐ 0.6018502116203308
聴く 0.5937756896018982
エモみの塊ですね!!
エモそうなものだけ載せてるからそりゃエモみの塊になりますよね笑
大体この曲のことかなってのがよくわかりますね!Kとかガラスのブルースとかプレゼントとか.
次に動詞についてみてみます.BUMPっぽい動詞と言ったら”泣く”や”繋ぐ”,”走る”などが思いついたのでこれらの類似語を載せます.
"泣く”の結果:
怒る 0.7565212249755859
近く 0.5425382852554321
困る 0.4250868558883667
"繋ぐ”の結果:
紐 0.5604400634765625
離す 0.5582458972930908
離れる 0.5504225492477417
"走る”の結果:
急ぐ 0.6995325088500977
名 0.6664260625839233
手紙 0.5832282304763794
こちらもエモみが溢れてますね!泣くと怒るの類似度が高かったり,繋ぐと離す,離れるの類似度が高いあたりはBUMPっぽいですよね!
次にこれもWord2Vec恒例の足し算,引き算をやってみます.まずは”君”+”出会える”=”僕”+”?”を考えます.
結果:
教える 0.47623467445373535
いつか 0.4419512152671814
エモそう!!
”君”+”出会える”=”僕”+”教える”は”君と出会えることを僕が教える”みたいに解釈できそうですよね(強引かな?)
”君”+”出会える”=”僕”+”いつか”は”君と僕はいつか出会える”的な感じに解釈できそうですよね?!!(これは強引)
それでは,”君”と”僕”を入れ替えた”僕”+”出会える”=”君”+”?”も考えてみます.
結果:
おかげ 0.48257261514663696
向ける 0.45529890060424805
エモそう?
”僕”+”出会える”=”君”+”おかげ”は”僕が出会えるのは僕のおかげ”みたいに解釈できそうですよね(強引ですね)
”僕”+”出会える”=”僕”+”向ける”は何かいい解釈ありませんかね笑
まとめ
安直な思いから始めた分析でしたが,結果としてはエモいものが多くとても満足いく結果を得ることができました.まだまだ,分析したい単語はあるので分析次第追記するなり呟くなりしたいと思います.
謝辞
分析してつぶやいたときに先人の方からありがたくモデルに名前をつけていただけました.ここでにのぴらさんには熱く御礼申し上げます.
BUMP2Vec 笑 https://t.co/KSbLKWleQx
— にのぴら (@nino_pira) 2019年11月3日
自分はbz2vec作るついでに、AKB2vecとミスチル2vec作って 各アーティストごとの同単語の意味比較をしましたので よろしければご参考ください 笑
— にのぴら (@nino_pira) 2019年11月3日
また 別の方がaiko2vecを作成していましたので こちらもよろしければ見てください笑https://t.co/Qe8Ks5Drqohttps://t.co/f95l6GVh2v
次回
にのぴらさんから歌詞作成も面白いからやってみなという啓示を受けたのでやってみたいと思います.
また,歌詞が作成された年代も考慮に入れた分析もやってみたいと思います.
*1:https://ja.wikipedia.org/wiki/SYNCHRONIZED_ROCKERS
*2:https://ja.wikipedia.org/wiki/THE_LIVING_DEAD
*3:https://ja.wikipedia.org/wiki/Present_from_you
*4:https://ja.wikipedia.org/wiki/FLAME_VEIN
*5:https://ja.wikipedia.org/wiki/メーデー_(BUMP_OF_CHICKENの曲)
*6:https://ja.wikipedia.org/wiki/Smile_(BUMP_OF_CHICKENの曲)