6997
自然言語処理の分野を沸かせたword2vecについてです。  
単語をベクトルデータに変換するプログラムにword2vecというものがあります。  
[word2vecのコード](http://word2vec.googlecode.com/svn/trunk/word2vec.c)

このプログラムでは単語を任意の次元のベクトルに変換できます。  
このプログラムで生成された単語ベクトルは驚くことに単語ベクトルをたし引きすると直感的に意味が通る単語になることが知られています。

例えば、'king' - 'man' + 'woman' = 'queen'  
と言った感じです。とても精度が高く、すごいプログラムです。

各種サイトではこのアルゴリズムの  
・ Skip-gram  
・ C-bow  
については説明がありますが、単語情報をどうやって任意の次元のベクトルに落としこんでいるかは説明がなく、分かりません。

word2vecは最終的にどうやって単語をベクトルにしているのでしょうか？  
また、どうやって単語をベクトル空間上で意味を持つように学習しているのでしょうか？

日本語の解説をお願いします。

* * *

追記  
学習はリカレントニューラルネットワークで行われていることは知識として分かります。  
学習されるベクトルの各次元はニューラルネットワークの何に対応しているのかが知りたいです。

word2vecで学習されるのは文章（テキスト）のベクトルではなく、単語のベクトルです。  
文章のベクトルは1単語1次元に対応しているので単語の出現頻度が元になっています。  
単語の出現頻度を元に文書の特徴を表しています。これは納得がいきます。

しかし、単語のベクトルは一体何が元になっているか分かりません。  
どうして例えば100次元のベクトル空間中で王、女王、男、女、が上記のような関係に位置するのか？  
不思議です。word2vecでは単語の共起の確率を元にニューラルネットワークで学習しているそうです。ニューラルネットワークで言うノード、シナプスは単語ベクトルの何に対応しているのか？  
そのへんがいまいちよく分かりません
CC BY-SA 3.0
2015-02-16T13:12:15.557
6585
2015-03-03T09:15:55.307
2015-03-03T09:15:55.307
2155
2155
question
c アルゴリズム 自然言語処理 word2vec
C言語 word2vecのベクトル化アルゴリズムについて
word2vecは次のような性質を持ちます  
・単語を1of-Kベクトルで表現  
・ニューラルネットで学習  
・ニューラルネットの入力と出力は単語

その際に中間層としてn個（nはユーザーが決める任意の数）のノードを介しています。  
注目している単語と周囲に出現（共起）する単語を入力と出力（正解データ）として各ノードを少しずつ学習します。

学習が終わった際の中間層のn個のノードがword2vecの各単語のもつベクトルです。  
この中間層のn個のノードがまさかベクトルの各次元になっているとは思いませんでした。

この方法でできたベクトルが上記のような性質を持っているなんて不思議ですね。  
以下の参考文献のお陰で理解出来ました。もしよければ読んでみて下さい。  
[参考文献：word2vecによる自然言語処理](http://www.oreilly.co.jp/books/9784873116839/)
CC BY-SA 3.0
2015-02-24T02:39:03.223
6997
2015-02-24T05:53:54.627
2015-02-24T05:53:54.627
2155
2155
6585
answer