Tech Blog

Information Technology / Machine Learning / Data Analysis / Big Data / System Integration

word2vecで単語をマッピングする

何を作ったか?

こんなものを作りました。
http://tkdmah.com/word2cordinates

どんなものか?

word2vecを用いて単語を2次元にマッピングします。
word2vecは、単語を200次元ベクトルに変換するモデルです。
ベクトルは単位ベクトルなので、200次元球面に配置されることになります。

200次元ベクトルを人間が見るのは難しいので、2次元化します。
そのためにまず、4つの単語を用いてX軸とY軸を作成します。
次に、その軸で張られた座標に対して、単語をプロットします。

単語の座標は、以下のように決定されます。

X軸を規定する単語ベクトルをv_x+, v_x-, Y軸を規定する単語ベクトルをv_y+, v_y-とします。
また、プロット対象とする単語ベクトルをv_targetとします。

このとき、v_targetがv_x+, v_x-となす角(θ_x+, θ_x-)がどちらに近いかを[-1,1]にマッピングしたものが、X座標(x_target)となります。
同様に、Y座標はv_y+,v_y-から計算します。

f:id:tkdmah:20150329181555p:plain

どうやって作ったか?

1. 日本語版Wikipediaのデータをダウンロードする。
2. mecab分かち書きする。
3. gensim/pythonを用いてword2vecのモデルを作成する。
4. モデルを利用したアプリケーションをgensim, django, d3.jsなどを利用して作成する。
5. webサーバを構築して公開する。
f:id:tkdmah:20150329182901p:plain

サンプル

  • X軸:期待⇔不安、Y軸:幸福⇔不幸としてプロット

f:id:tkdmah:20150329185158p:plain

  • X軸:数学⇔文学、Y軸:科学⇔社会としてプロット

f:id:tkdmah:20150329185208p:plain

その他におもしろいサンプルができたら教えて下さい^^

今後の課題

  • Twitterデータでモデル作るとか
  • 可視化の仕方を変えるとか