word2vecのコードをみたび読んだメモ
前回挫折した時
http://d.hatena.ne.jp/m_matsunag/20150518/1431925897
事前にnegative sampling用のtableを作る関数:InitUnigramTable
頻度の3/4乗の確率分布を作っている
具体的には、3/4乗した頻度の分だけindex (ハッシュ値)を持つハッシュを作っている
初期化の関数:InitNet
syn0 (入力)、syn1neg (negative samplingのベクトル), syn1 (出力だがhsを使わない時は用いられない) を初期化
syn0はランダム、syn1negは0
実働の関数:TrainModelThread
TrainModelから並列で実行するために呼ばれている
入力文全体の変数名はsen
・まず、ファイルから1語ずつ読み込んでsenに収容
subsumplingが有効な場合、一定の(頻度に基づく)確率で収容されない
・cbowやnsなどのオプションに応じて重みが更新される
解析対象の語のsen上のindexはsentence_position
neu1, neu1eはここで0で初期化される
どのくらいの幅を見るかはランダムな値をwindowで割った値bで決定される