C言語 word2vecのベクトル化アルゴリズムについて
自然言語処理の分野を沸かせたword2vecについてです。
単語をベクトルデータに変換するプログラムにword2vecというものがあります。
word2vecのコード
このプログラムでは単語を任意の次元のベクトルに変換できます。
このプログラムで生成された単語ベクトルは驚くことに単語ベクトルをたし引きすると直感的に意味が通る単語になることが知られています。
例えば、'king' - 'man' + 'woman' = 'queen'
と言った感じです。とても精度が高く、すごいプログラムです。
各種サイトではこのアルゴリズムの
・ Skip-gram
・ C-bow
については説明がありますが、単語情報をどうやって任意の次元のベクトルに落としこんでいるかは説明がなく、分かりません。
word2vecは最終的にどうやって単語をベクトルにしているのでしょうか?
また、どうやって単語をベクトル空間上で意味を持つように学習しているのでしょうか?
日本語の解説をお願いします。
追記
学習はリカレントニューラルネットワークで行われていることは知識として分かります。
学習されるベクトルの各次元はニューラルネットワークの何に対応しているのかが知りたいです。
word2vecで学習されるのは文章(テキスト)のベクトルではなく、単語のベクトルです。
文章のベクトルは1単語1次元に対応しているので単語の出現頻度が元になっています。
単語の出現頻度を元に文書の特徴を表しています。これは納得がいきます。
しかし、単語のベクトルは一体何が元になっているか分かりません。
どうして例えば100次元のベクトル空間中で王、女王、男、女、が上記のような関係に位置するのか?
不思議です。word2vecでは単語の共起の確率を元にニューラルネットワークで学習しているそうです。ニューラルネットワークで言うノード、シナプスは単語ベクトルの何に対応しているのか?
そのへんがいまいちよく分かりません