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で決定される