word2vecのword-analogyを可視化した

word2vecについての解説は省略。参考文献:

word2vecは簡単に説明すると単語をベクトルにするツール。デフォルトの設定だと400次元の実ベクトル空間に単語を射影する。わぁい、ベクトル空間!

man king womanと3単語のクエリを投げると、ベクトル空間上で king - man + woman に最も近い単語を探して queen と答えてくれる。

ベクトル空間上で3点が与えられればそれを通る平面が決まるので、その平面に対して投影してやれば2次元で可視化ができる。わぁい、可視化!

うーん、右上の角周辺に分布することを期待したのだがな。実はword2vecのword-analogyが「king - man + womanに最も近い単語を探す」をやるうえで、ベクトルを全部正規化している。ということは各単語は超球面上に分布していて、king - man + woman は一般には球面上にない。そこで king - man + woman に対しても正規化を掛けて球面上に落としている。というわけでking - man軸と woman - man軸で張られる平面に射影しても球面上の分布を横から見たようなごちゃっとしたものになってしまう。

候補の部分だけ拡大してもこんな感じ。赤丸が「king - man + womanに最も近い球面上の点」なので、1位のqueenが特段近く見えないなぁ。まあそれはこの図でqueenよりも赤丸に近い点はqueenよりもこの2軸以外の方向で赤丸から離れているってことなんだけども。

ソースはこちら https://github.com/nishio/word2vec-analogy-vis