pandazx's blog

データ分析など雑多な技術ブログ

Word2vecの仕組みの勉強

Word2vecについて個人メモ(私の理解)。詳しく知りたい人は参考文献を参照して欲しい。参考文献先には元論文のリンクもある。

Word2vecは二層のニューラルネットワーク(NN)で構成される。学習して計算された重み付けの値により、学習データに含まれる情報を数値ベクトルで表現できる。

NNの隠れ層、出力層のノード数は単語数x200次元程度の次元数。ただし、出力層はコンテキストサイズごとに同じノード数のものを用意する。

コンテキストサイズとは、対象となる単語の前後、何単語まで、その出現位置の関係を学習するか、というもの。サイズが1なら、一つ前に現れる単語、一つ先に現れる単語を学習する。

これは、近い場所に現れる単語は意味的に近い、という考え方を前提としている。

各単語が200次元で表現されるが、これを分散的意味表現と呼ぶ。共起頻度を学習する場合は単語数x単語数の次元数が必要となり、通常、こちらの方が圧倒的に次元数が大きい。こちらは分布的意味表現と呼ばれる。

何らかの単語をNNに入力すると、前後に現れる単語の確率ランキングが得られる。コンテキストサイズが2なら、2つ先と前の確率ランキングも得られる。

Word2vecの使い方でよく説明されるものに、フランス-パリ+東京で、日本が得られる、という計算例がある。

私の理解では、これはフランスから、パリを引くと、パリに意味的に近い単語が除かれる(おそらく、該当単語の値が引かれるので、フランスの確率ランキングにおいて、パリの確率ランキングの上位の単語が下位になる)。次に、東京を足すので、東京に意味的に近い単語が上位に来る。フランスは国であるので、元々、日本とは意味的に近く、パリが引かれて、東京が足されるので、東京に最も意味的に近い国、つまり、日本が確率ランキングの最上位に来るという流れだと思われる(あまり、自信はない)

NNを使うからというのもあるが、なぜ、この方法で意味的に近い単語の表現が可能になるかは、理論的にはわかってないらしい。

参考文献
http://business.nikkeibp.co.jp/article/bigdata/20141110/273649/