単語をベクトル化することで類似語を抽出したり、単語の意味の足し算・引き算ができるWord2Vecという手法を用いて、「おじさん」「お兄さん」という言葉を比較してみました。

チャレンジ&ナレッジ最終更新日: 20181030

Word2Vecで「おじさん」と「お兄さん」を比較してみた

  • このエントリーをはてなブックマークに追加

この前、知人の30代男性から「最近、一人称として“お兄さん”が使えなくなった…」という悩みを聞きました。女性に対する呼称の「お姉さん」「おばさん」問題の闇の深さは言うまでもありませんが、男性も意外と気にしていることを知りました。
そこで今回、単語をベクトル化することで類似語を抽出したり、単語の意味の足し算・引き算ができるWord2Vecという手法を用いて、「おじさん」「お兄さん」という言葉を比較してみようと思います。

「おじさん」と「お兄さん」についてアンケートを取ってみた

ただWord2Vecを使って言葉の意味を考えるだけでは面白くないので、分析を行う前に20代〜50代の男性73名に「おじさん」と「お兄さん」という言葉についてアンケートを取ってみました。

『自分はお兄さんとおじさんのどちらだと思いますか?』という質問には40人が「お兄さんだと思う」、33人が「おじさんだと思う」と答えました。

各回答について回答者の年齢は以下のような割合でした。

自分は「お兄さん」だと思う(40人)自分は「おじさん」だと思う(33人)

Wikipediaでは「お兄さん」については、“おおむね小学校高学年から30歳代までの男性を指す一般語として用いられる”、「おじさん」については、“壮年期以降の成人男性を指して呼ぶ一般語としても用する”という記載があります。結果と比較しても、概ね言語的な定義と一般的な認識はずれていないようです。しかし、20代でも自分のことを「おじさん」だと思う人がいたのは少し意外でした。

次に『お兄さんからおじさんになって失うものは何だと思いますか?』と『お兄さんからおじさんになって得るものは何だと思いますか?』という質問をしてみました。いろんな回答が得られましたが、中でも多かったもの、特徴的だったものが以下になります。

「お兄さん」から「おじさん」になって失うものは何だと思いますか?
● 失敗しても良い空気(20代)
● 若さ、体力、フレッシュさ、時間、髪(20代)
● 肌のハリ、恥じらい、若い子からの視線、体力、気力(30代)
● 周りからの目を気にしなくなるため、清潔感や美意識、ファッションへのこだわりなどがマジで死ぬ(30代)
● 無邪気さ。新しいことでも興味あることはガンガンやっていこう!みたいな情熱。(30代)
● 冒険心、体力、健康、視力(40代)
● 健康(40代)
● 若さ(50代)

「お兄さん」から「おじさん」になって得るものは何だと思いますか?
● お金(20代)
● 経験(20代)
● なにもありません。マイナスしかございません。(30代)
● 余裕と家族(30代)
● 家族を守り抜く不退転の決意(30代)
● 無駄な脂肪と余分な皮脂(40代)
● 社会的信用かなぁ…その是非はさておき(40代)
● 貫禄(50代)

このような結果を頭の片隅に置きつつ、Word2Vecで「おじさん」と「お兄さん」を比較してみましょう。

Word2Vecとは?

今回使うWord2Vecという手法と使い方を簡単に解説します。

Word2Vecは2013年にGoogleの研究所から発表された自然言語処理の基礎技術の1つで同じ文脈で用いられる単語は似た意味を持つという仮定に基づき、単語の特徴をベクトルで表現する技術です。これによって、類似語を抽出したり、単語の足し算・引き算ができるようになりました。

Word2Vecによる単語の足し算・引き算の例でよく用いられるのが以下の式です。

「King」―「Man」+「Woman」=「Queen」

「King(王様)」から「Man(男)」という意味を引いて「Woman(女)」という意味を足すと「Queen(女王)」という答えが出るような計算を行うことができます。

今回はこの単語の足し算・引き算を使って、「お兄さん」から「おじさん」になって失ったもの(=「お兄さん」から「おじさん」を引き算)と「お兄さん」から「おじさん」になって得るもの(=「おじさん」から「お兄さん」を引き算)を考えます。

Word2Vecの使い方

今回はPythonのgensimというライブラリを用いてWord2Vecを使います。

必要なライブラリ
・gensim
・mecab-python3

まずは、Word2Vecのモデルを生成するための学習データを用意します。今回はTwitterから「お兄さん」あるいは「おじさん」を含むツイートを約10,000ツイート取得しました。今回は分析する単語が決まっていますが、いろんな単語で試してみたい場合は、Wikipediaデータベースや青空文庫のデータを利用してみるのがおすすめです。

“Wikipediaデータベース”.Wikipedia.2018. ※配信情報は随時更新されています。

https://ja.wikipedia.org/wiki/Wikipedia:%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89

“青空文庫”.青空文庫.2018. ※配信情報は随時更新されています。

https://www.aozora.gr.jp/

次に、Word2vecを使うには文章を単語ごとに区切る必要があるので、Mecabを使ってツイートデータを形態素解析します。

# -*- coding: utf-8 -*-

import MeCab

tagger = MeCab.Tagger('-O wakati')

fi = open('テキストデータのファイル名', 'r')
fo = open('出力するファイル名', 'w')

line = fi.readline()

while line:
    result = tagger.parse(line)
    fo.write(result[1:])
    line = fi.readline()

fi.close()
fo.close()

続いて、形態素解析を行ったテキストファイルを用いて、Word2Vecのモデルを生成します。出力するモデルのファイル名は「〇〇.model」としてください。

# -*- coding: utf-8 -*-

from gensim.models import word2vec

sentences = word2vec.LineSentence('形態素解析したテキストファイル名')
model = word2vec.Word2Vec(sentences,
                          sg=1,
                          size=100,
                          min_count=1,
                          window=10,
                          hs=1,
                          negative=0)
model.save('出力するモデル')

最後に出力したWord2Vecのモデルを使って、単語の足し算・引き算を行います。

# -*- coding: utf-8 -*-

from gensim.models import word2vec

model   = word2vec.Word2Vec.load('モデルのファイル名')
results = model.most_similar(positive=[u'足し算したい単語'], negative=[u'引き算したい単語'], topn=表示したい単語数)
for result in results:
    print(result[0])

ここまでのプログラムを実行すると、単語の足し算・引き算による結果が得られま

「おじさん」と「お兄さん」を比べてみた

「お兄さん」から「おじさん」になって失ったものを考えるために行った「お兄さん」―「おじさん」=?の結果はこちらです。上位20単語を表にまとめました。

「お兄さん」から「おじさん」になって失ったもの

まず、「不器用」や「覚える」が入っていることから「おじさん」になると何でも器用にできるようになったり、覚えることが少なくなったりするんだろうな…ということがわかります。また、アンケートの回答にあった「冒険心」に近い「探す」や「恥じらい」に近い「照れる」があったりもします。

「ありがとう」と「感謝」という単語が入っていることも気になります。おじさんになると、「ありがとう」と言われたり、「感謝」されることのほうが多くなってしまうためなのか、自ら「ありがとう」と言ったり「感謝」する機会がどうしても減ってしまう…という意味なのでしょうか?

全体的に気になったのは、「優しい」や「笑顔」、「よい」、「良い」、「微笑ましい」、「かわいい」、「大好き」、「嬉しい」などポジティブな感情が表されている単語が多いことです。なぜなのでしょうか…もし解説してくれるおじさんがいたら、ぜひお願いします。

パソコン工房NEXMAG編集部のおじさんの感想
「優しい」「笑顔」が1位と2位とは…おじさんとしてはつらい結果ですが、「ありがとう」「感謝」含め、年を重ねるに連れて照れくさくて言えない(照れていることすら知られたくないから「照れる」とも言えない)ことが増えてくるからなのでは、と思っています。そう思いたいです。

続いて、「お兄さん」から「おじさん」になって得たものを考えるために行った「おじさん」―「お兄さん」=?の結果はこちらです。上位20単語を表にまとめました。

「お兄さん」から「おじさん」になって得たもの

結果を見て、真っ先に「わかる〜!おじさんのポケモンGOやってる率めっちゃ高い!」と思いました。つまり、ポケモンGOにハマっていたら、おじさん…かも?

「お父さん」や「夫」という単語もおじさんになって得ることが多い立場なので納得です。「キッズ」という単語が出てきたのもなんだかほんわかした気持ちになっていいな〜と思いました。アンケートの回答にあった「家族」とも関連した結果となったようです。

「寝る」という単語からは「お兄さん」だったときよりも睡眠時間が増えたということでしょうか…? これはアンケートの失ったものの回答にあった「体力」と関係しているような気がします。

パソコン工房NEXMAG編集部のおじさんの感想
歳とともに口下手になっていくおじさんがたどり着いたのはスマホのゲーム…ではなく、子どもと一緒に楽しく遊ぶことが増えているからこそゲーム系の言葉が上位に入っているのだと思います。そう思わせてください。
「寝る」については体力との関係もありますが、「寝る」という行為に癒やしを求めているのかもしれません…。

まとめ

以上、Word2Vecを使って「おじさん」と「お兄さん」を比べてみました。自然言語処理というとハードルが高いイメージがあるかもしれません。しかし、Word2Vecはこのように言葉遊び的に使ってみている人も多いとても面白いアルゴリズムなので、もし少しでも興味が沸いたら、ぜひ気になる単語の足し算・引き算をやってみてください!

また、今回のように学習に使うデータによっては世の中の人が考えていることを圧縮して可視化するようなこともできるので、今後も様々な分野で活用されることが期待できそうです。

(参考)

“gensim: Topic modelling for humans”.Radim Řehůřek.2018.10.28

https://radimrehurek.com/gensim/

ranranプロフィール画像
ライタープロフィール ranran

工学部女子大生とライターをしています。卒業研究で彼氏の浮気を防ぐためにSNS上で彼氏と彼氏のフォロワーの親密度推定に挑戦中。大学院では計量言語学を専攻予定。

記事を
シェア