Twitterの投稿でWord2Vecに「バブみ」とは何かを答えてもらった

技術的な話はわりと適当です。

Word2Vecとは

ざっくり言うならば「文書を与えると単語を意味のベクトルで表現してくれる」すごいやつです。
単語をベクトルで表現することで、「単語同士の相関」や「単語同士の和・差」を計算することができます。
詳しい話はO'Reilly Japan - word2vecによる自然言語処理あたりを読んだ方が早いです。

……ところで、Word2Vecでは「単語同士の相関」を計算できるので、こんな事もできるようです。 antibayesian.hateblo.jp

元となるコーパスにその単語が入っていれば、いわゆるサブカル語でも精度高く意味の推定が行えるようです。
つまり、「新語の意味を推定できるのではないか」というのが今回の話題です。

バブみとは

表題にある「バブみ」とは一体何なのでしょうか。アニヲタWiki(仮)では

「バブみ」とは、最近になって提唱された新たなる「萌え」の概念を表す言葉である。
基本的に男性が「年下の」女性に対して使う表現。
アニヲタWiki(仮) - バブみ

と定義されています。
また、「バブみ」をこのように捉える人もいます。

すなわち、上記の定義に加えてそれが「言語を失い幼児退行するほどの強い感情」であると解釈できます。

この語が広く用いられるようになったのは、Google Trendsのデータを見る限りでは2015年初頭からだと推測することができます。

www.google.co.jp

このような新語では、人々が前述したような意味で「バブみ」という単語を利用しているとは限りません。
そこで、今回はWord2Vecを利用して「バブみ」に近い単語を抽出し、人々がどのような意味合いで「バブみ」という単語を利用しているのかを推測してみようと思います。

準備

まずはAPIを叩いてツイートを集めます。
今回はPublic Stream(全ユーザーの投稿)から日本人の、RTやURLを含んでなさそうなツイートを取得することにしました。

require 'tweetstream'

TweetStream.configure do |config|
  config.consumer_key       = "XXX"
  config.consumer_secret    = "XXX"
  config.oauth_token         = "XXX"
  config.oauth_token_secret = "XXX"
  config.auth_method            = :oauth
end

File.open("tweet.txt","a") do |file|
  TweetStream::Client.new.sample do |status|
    if status.user.lang == "ja" && status.text !~ /RT|http|\(|\)||/
      file.puts "#{status.text.gsub(/(\r\n|\r|\n|)/, "")}\n"
    end
  end
end

丸2日動かしてだいたい70万ツイートが集まりました。

次に得た文章をmecab分かち書きされた文に直しました。
名詞等をうまく解析するために、Wikipediaはてなキーワードからユーザー辞書を作成しました。

qiita.com

今回は「バブみ」という単語について解析したいので、辞書に「バブみ」という単語を追加して一つの形態素としてみなすことにしました。

やってみよう

Ubuntu 14.04で以下のコマンドを叩いて、Python上からWord2Vecを使えるようにしました。

$ sudo apt-get install python-virtualenv python-pip
$ sudo apt-get build-dep python-numpy python-scipy
$ virtualenv .myenv
$ source .myenv/bin/activate
(myenv)$ pip install -U numpy
(myenv)$ pip install -U scipy
(myenv)$ pip install -U gensim
(myenv)$ pip install -U word2vec

後はIPython Notebookを立ち上げて、Word2Vecに「バブみ」について答えてもらうだけです。

from gensim.models import word2vec
data = word2vec.Text8Corpus('tweet.txt')
trained_model = word2vec.Word2Vec(data, size=400, window=10)

out = trained_model.most_similar(positive=[u'バブみ'], topn=30)
for x in out:
    print x[0],x[1]

さて、結果はどうなるのでしょうか。

押し付ける 0.494635820389
衣服 0.45427981019
容易い 0.408583015203
挟む 0.405536860228
述べ 0.39495164156
誓う 0.393519490957
思いつく 0.393076211214
揉む 0.389005869627
見せつける 0.38477614522
凶器 0.380573302507
イジ 0.379266470671
従う 0.375441968441
補う 0.374394536018
盗む 0.373954772949
味わえる 0.372387737036
...

バブみは感じられませんでした。
ツイートの収集元が「全ユーザー」だったため、そもそも一般人は「バブみ」について言及するようなツイートをしない可能性があります。

そこで、試しに「バブみ」を含んだツイートを5000件ほど取得して追加してみることにしました。

require 'twitter'

client = Twitter::REST::Client.new do |config|
  config.consumer_key       = "XXX"
  config.consumer_secret    = "XXX"
  config.access_token        = "XXX"
  config.access_token_secret = "XXX"
end

File.open("tweet.txt","a") do |file|
  client.search("バブみ", :result_type => "recent").take(5000).collect do |tweet|
    if tweet.full_text !~ /RT|http|\(|\)||/
      file.puts tweet.full_text.gsub(/(\r\n|\r|\n)/, " ")
    end
  end
end

結果は、

バブバブ 0.663827717304
母性 0.634560227394
シャア 0.608289599419
退行 0.586075365543
ぎゃる 0.585104584694
マッマ 0.58508259058
バブ 0.57053655386
哺乳 0.56352186203
) 0.550026416779
オギャ 0.546709775925
切光 0.546124339104
紬 0.545040547848
ララァ 0.542407214642
スミレ 0.530540287495
ハイエース 0.530275344849
( 0.529384613037
切に 0.527534067631
かんじる 0.527476787567
兼ね備え 0.526362776756
遊矢 0.523782134056
ブヒ 0.522665500641
バブ 0.507027804852
ロボミ 0.506911277771
羽風 0.502806007862
蜻蛉 0.50190448761
帯び 0.493449777365
甘やかさ 0.49190479517
マミ 0.480626702309
授乳 0.477073252201
膜 0.469877272844

と、キモいオタクツイート成分が増えたことによってそれっぽい結果が出てきました。
上位に「母性」という単語が現れているので、先のアニヲタWikiの定義と一致します。

この結果で特徴的なのが、「バブみ」に近い意味の語よりもキャラクターの名前が複数現れているという点です。
上位から、

シャア・アズナブル機動戦士ガンダム
燭台切光忠(刀剣乱舞ONLINE)
椎葉紬*1(サノバウィッチ)
ララァ・スン機動戦士ガンダム
氷上スミレ(アイカツ!
榊遊矢(遊戯王ARC-V)
羽風薫(あんさんぶるスターズ!)
蜻蛉切(刀剣乱舞ONLINE)
巴マミ魔法少女まどか☆マギカ

と、何故かシャア・アズナブルがぶっちぎりの首位を獲得してしまいました。
これについて検索してみると、「バブみ」は「シャアがララァに感じている感情」だと説明される事が多いようです。
そのため、結果に影響を与えたのだと推測することができます。

したがって、シャアが「バブみ」を感じている可能性はありますが、シャアそのものに「バブみ」を感じられる可能性は低いです。
その他のキャラクターについては人々が「○○ママ」とキャラクターをまるで自分の母親のように呼ぶようなツイートをしているため、「バブみ」を感じられるキャラクターであると言えます。

まとめ

Twitterの投稿でWord2Vecに「バブみ」について答えてもらうと、「バブみ」に近い意味の単語よりも我々が「バブみ」を感じることが出来るキャラクターを列挙してくれました。
これはTwitterが「バブみ」について論じる場ではなく、「バブみ」を感じたことを報告する場であるためです。

今回の結果から、「バブみとは何か」に対する一般認識として「シャアがララァに感じている感情」であり、それは「母性」に深く関わっているのだと推測できます。
また、人々は先ほど列挙したキャラクターに少なからず「バブみ」を感じているのだと推測できるため、これらのキャラクターを手掛かりに「バブみ」について考えることができるのではないでしょうか。

ただし、コーパスの処理がかなり適当なので信頼できるデータかと言われると微妙です。正直Word2Vecの使い方がまだよく分かってないので、参考になりそうな本等あれば教えてください……

オタクたちが感じている「バブみ」という不思議な感情を理解するのにはまだまだ時間が掛かりそうですが、根気よく解明していきたいと考えています。

*1:僕のママです。