春と言えば出会い。
出会いと言えば恋。
「恋」「愛」は人類が未だ解明できていない難問です。
恋と一言でいっても、男にとっての恋と女にとっての恋は全くの別物だと思っています。
男女の恋愛観の違いで破局に追い込まれたり、恋が実らなかった経験がある人も多いのではないでしょうか?
そんな男女の恋愛観の違いをラブソングから読み解くことができるのではないかと思い分析してみたので、今回はその結果を記事にしたいと思います。
「恋」と「愛」とはいったい何なのか?word2vecを使って歌詞分析をしてみた
という記事があったので参考にしました。
技術に寄った話ではないので息抜き程度に読んでもらえたらと思います。
対象読者
- 仕事や作業の合間に息抜きをしたい人
- 技術を使って面白いことをしたい人
- 恋に悩みがちな人
- 今年の春は一発かましてやるぞと躍起になっている人
アプローチ
何を明らかにすれば恋愛観の違いを示す事ができるでしょうか?
YouTuberのしゅくろーさんの次の動画を参考にして、いくつか仮説を立てました。
【仮説】
- 男は瞬間的に好きになり、女は時間をかけて好きになる
- 男は行動を大切にし、女は言葉を大切にする
今回はこの仮説を検証することから男女の恋愛観の違いについて明らかにします。
検証方法には単語の分散表現を使います。
単語の分散表現とは簡単に言うと単語を数値ベクトルで表現する自然言語処理でよく使われている手法の事です。
単語をベクトルとして扱える事で「東京」-「日本」+「フランス」=「パリ」という風に単語に対して演算処理を施す事が可能となります。
データについて
以下の条件の下で歌詞データを集めました。
- 作詞家の性別ではなく、歌い手の性別で各歌に性別ラベルを割り当てる
- デュエット(男女混合)は除く
- 国による恋愛観の違いを排除するため邦楽のみを扱う
- 世代差は無視する
恋愛ソングに関しては以下のサイトを参考に選びました。
データ数は少ないですが、男性アーティスト、女性アーティストそれぞれで100曲集めました。
分析結果
仮説1: 男は瞬間的に好きになり、女は時間をかけて好きになる
男の「欲しい」「踏み外す」「叫ぶ」「勇気」「連れる」
女の「心」「気持ち」「押さえる」「嫉妬」「願う」「知る」
などは仮説に沿った結果かもしれません。
その一方で女性の「分かる」「見える」などから、女性は好きになる時は「この人だっ」と直感的に決めているのかもしれないですね。
仮説2: 男は行動を大切にし、女は言葉を大切にする
男の「尽くす」「触れる」「居る」
女の「聞く」
は仮説に沿った結果かもしれませんが、女性が「言葉」を大切にすることをサポートする単語は十分に得られませんでした。
実装
jupyter labで値を変えながらやっていたために、コードがまとまっていないので全貌を見せることはできませんが基本的な流れだけ載せておきます。
import pandas as pd
from collections import Counter
from gensim.models import word2vec
def main():
# データフレームの読み込み
df= pd.read_pickle('./data/df.pickle')
# 男女で分割
m_df = df[df['性別'] == 'M'].reset_index(drop=True)
f_df = df[df['性別'] == 'F'].reset_index(drop=True)
# model用に各歌詞を表す単語リストを一つのリストにまとめる
m_wlist = [words.split() for words in m_df['分ち書き'].tolist()]
f_wlist = [words.split() for words in f_df['分ち書き'].tolist()]
for target in ['恋', '愛']:
# word2vecのモデルを作成
m_model = word2vec.Word2Vec(m_wlist, size=75, iter=15, min_count=3, window=5)
f_model = word2vec.Word2Vec(f_wlist, size=75, iter=15, min_count=3, window=5)
# 類似語を取得
m_sim_words = m_model.wv.most_similar(positive=[target], topn=15)
f_sim_words = f_model.wv.most_similar(positive=[target], topn=15)
# 類似語の表示
print('----------{}----------'.format(target))
print('男')
for i, word in enumerate(m_sim_words):
print(i+1, word[0])
print('女')
for i, word in enumerate(f_sim_words):
print(i+1, word[0])
if __name__ == '__main__':
main()
前処理は省略しました。
一応データフレームは次のようになっています。
分ち書きでは名詞、代名詞、動詞、形容詞のみをとりだしています。
まとめ
いかがでしたでしょうか?
あくまで技術を使ってこんな事もできるんだ程度で、分析結果は真に受けないでください笑
今回のテーマ以外にも
- 世代差による恋愛観の違い
- 国ごとの恋愛観の違い
- 小説からみる男女の恋愛観の違い
- 小説からみる作家の恋愛観の違い
など調べられたら面白そうですね。
「他にもこんな事できそうだよね」
「こうしてみたらもっと良いかも」
みたいなの大歓迎なのでコメントしてください!
歴史上数多くの偉大な哲学者や芸術家が愛について考え、作品にしてきました。
しかしその正体は謎に包まれたままです。
そもそも愛を頭で理解しようとしていることが間違いで、愛は考えるものではなく感じるものなのかもしれませんね。