
西野カナに「恋」とは何か聞いてみた
こんにちは。研修生のがっさんです。 いきなりですが、みなさん恋してますか? 僕は出来てないです。というか恋が何か分かってません(笑) 好きは分かるけど、恋って何か重い感じがする。「恋してる」何て言ったことないし、恋って何だーと思ったので、定義を調べてみると
恋:異性に愛情を寄せること、その心。 ほほう。愛情とは? 愛情:相手にそそぐ愛の気持。
ほほう。愛とは?
愛:そのものの価値を認め、強く引きつけられる気持。
うーん。。。よく分からないので、よく恋をしてそうな西野カナ先生に聞いてみましょう!
目次[非表示]
どうやって聞くか?
会って直接!とはいかないので、今回は西野カナ先生の歌に対して自然言語処理をして、先生が恋をどのように表現しているか調べてみます。言い換えると 「西野カナ先生に恋とは何かを聞く」 ↓ 「西野カナ先生の歌詞から辞書を作り、恋と類似度の高い言葉は何かを解析する」読者対象
- 自然言語処理で何が出来るか知りたい人
- 恋に悩んでいる人
使う技術
- 自然言語処理(Janome, word2vec)
- スクレイピング(BeautifulSoup)
- Python
データの抽出
まず始めに、こちらから西野カナの歌全167曲の歌詞をスクレイピングで抽出します。 ライブラリはBeautifulSoupを使います。
これでkashi.txtに全曲の歌詞が入りました。
データの前処理
歌詞にはLoveやWowといった英語も含まれており、英数字、記号を正規表現で削除し、日本語のみの歌詞にします。結果はこのようになります。 「・・・横顔を見つめながら考えてる・・・」(歌詞)
横顔 名詞,一般,*,*,*,*,横顔,ヨコガオ,ヨコガオ を 助詞,格助詞,一般,*,*,*,
を,ヲ,ヲ 見つめ 動詞,自立,*,*,一段,連用形,
見つめる,ミツメ,ミツメ
ながら 助詞,接続助詞,*,*,*,*,ながら,ナガラ,ナガラ
考え 動詞,自立,*,*,一段,連用形,考える,カンガエ,カンガエ
てる 動詞,非自立,*,*,一段,基本形,てる,テル,テル
「は」や「の」といった助詞・助動詞は今回は必要ないので、形態素解析を行った後に、名詞・動詞・形容詞・形容動詞だけを取り出しています。 動詞・形容詞・形容動詞に関しては、活用されているものは基本形に直します。基本形は.base_formで取り出せます。
(例)見つめ/て → 見つめる/て
surface |
表層形 |
infl_type |
活用型 |
infl_form |
活用形 |
base_form |
原形 |
print token.reading |
読み |
print token.phonetic |
発音 |
ストップワード 参考
これで辞書が完成しました。
word2vecで学習
word2vecは、大量のテキストデータを解析し、各単語の意味をベクトル表現化する手法です。Word2Vecを使うことで、単語と単語の関係性を簡単に表現でき、 「王様」 - 「男」+ 「女」 = 「女王」 「パリ」 - 「フランス」 + 「日本」 = 「東京」 のような 単語同士の 演算が出来たり、単語同士の類似度を計算することができます。 では歌詞データに使われている単語の関係性をword2vecに学習させましょう。
model = word2vec.Word2Vec(sentence, size=200, min_count=4, window=4, iter=50)
パラメータはそれぞれ以下を表しています。size |
ベクトルの次元数 |
min_count |
n回未満登場する単語を破棄 |
window |
学習に使う前後の単語数 |
類似度の計算
さあようやく準備が出揃いました。 後は西野カナ先生が恋をどのように表現しているのかを調べるだけです。 どうやって調べるかというと、恋という単語に対して類似度の高い単語を出力します。学習したモデルに対し、
topnで上位表示数を指定してます。
出力結果
1 追いかける 0.8969742059707642
2 待てる 0.8759297728538513
3 生まれ変わる 0.8688281178474426
4 押す 0.8627504110336304
5 つらい 0.8446334004402161
6 失う 0.8399721384048462
7 逃す 0.8399657011032104
8 送る 0.833713710308075
9 為 0.8328136801719666
10 噂 0.830684244632721
一番近かったのは「追いかける」でした。
西野先生いわく、恋とは追いかけるものらしいです。 てっきり「震える」が出ると思ったら出ませんでしたね。
これらの結果から無理やり定義すると
恋:追いかけて、時には待ち、つらい思いもするが生まれ変われるもの という結果になりました。 なるほど、さすが西野先生。納得しました! せっかくなのでaiko先生にも聞いてみたいと思います。
出力結果
1 堕ちる 0.9168707132339478
2 さよなら 0.915056347846984
3 全て 0.9063875675201416
4 嫌い 0.9030067920684814
5 怒る 0.889123797416687
6 並べる 0.8881044983863831
7 上げる 0.8861263990402222
8 我慢 0.885418713092804
9 勇気 0.8848025798797607
10 痺れる 0.8845231533050537
「さよなら」「嫌い」「怒る」「我慢」等。 aiko先生は恋はわりとネガティブなモノと考えているみたいですね。