Skip to content

Instantly share code, notes, and snippets.

@kokukuma
Last active August 29, 2015 14:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kokukuma/85bebedb0635485e4f5b to your computer and use it in GitHub Desktop.
Save kokukuma/85bebedb0635485e4f5b to your computer and use it in GitHub Desktop.

word2vec code reading

目的

  • 実装した多層パーセプトロンでCBOWもどきやってみたけど, 遅すぎる.
  • word2vecの実装読めば, 速くするヒントが見えてくるかもしれない.

参考資料

word2vecとの実装の違い.

  • 実装がC.

  • multi threadで実行可能.

    • thread毎に, トレーニングデータの読み込み開始位置を変え, 学習する単語数を制限している.
    • その後全部終わるのを待って, 保存.
  • exponentialの計算を事前にやっておいて, Train中は参照だけ.

  • 学習係数かをどんどん下げるように変更している.

    • 単純にstart時のalphaに, 1 - 進捗率をかけている. 学習が進むにつれて, alphaが小さくなるように.
    • alpha下限は, start * 0.0001
  • Hierarchical Softmax

    • softmax関数の分母の計算を簡略化?.
    • 直接単語を特定するベクトルを学習するのではなく, 単語をハフマン符号化したものを学習対象としている.
    • 辞書の最大数3001万語, 符号化の最長が40に設定されてるから, 最大で3000万ノードを40ノードに減らすことができるということだろう.
    • なるほど. あたまいい.
    • huffman符号化するだけが, Hierarchical Softmaxではなかった. 更新式にも影響する.
  • hidden layerの励起関数ないな...

  • 出力層の重み更新式が通常のバックプロパゲーションと異なる.

    • hidden layerの励起関数ない影響か?, それとも, 階層型softmaxの影響か?
    • 出力層: 勾配に学習係数, 隠れ層の入力をかけたものを足す.
    • 隠れ層: 勾配に学習係数, 隠れ層の重みをかけたものを足す(多分入力は1だからだろう).
    • 計算しているexptableが, softmaxでなく, シグモイド関数.
    • この理由は, Hierarchical Softmaxを使っているため. 論文に書いてある.
  • すべてのトレーニングデータを1回学習したら終了している.

    • 誤差を確認して, 収束するまで繰り返すということをしていない.
    • 励起関数がないこと, 更新式が通常と異なることとかと関係あるのか?
  • 言語モデルは, CBOW/skip-gram

    • cbow: 1つの単語をその周辺の単語で表現する. NNLMとは違い, 1つの入力ベクトルで表現している. それが, Book of Wordのいみ.
    • skip-gram: 1つの単語から予測される周辺の単語を学習. 実装の法はまだ読んでない.
  • negative sampling

    • 入力-隠れ層間の重みを更新する前に, 逆伝播させたときの隠れ層のnet値を修正する.
    • 仮想のロジスティック回帰を考える.
      • 隠れ層のnet値を入力とする.
      • 今の単語はlabel=!, それ以外はlabel=0 として, 隠れ層のnet値とロジスティック回帰の重みを更新する.
    • なぜこれで, 結果が良くなるかは, Noise Contrastive Estimation(NCE)を理解した方が良いかな.
  • subsampling of the frequent words

  • 出現頻度が多い単語では(閾値以上), ランダムで読み込まない.

  • demoでは, トレーニングデータに含まれる単語の、0.001% 以上を閉めていたら, その対象としている.

論文で紹介されている改善内容

  • Hierarchical Softmax

  • softmaxの近似手法

  • 単純に, 辞書=>huffman符号化したものを学習という感じではない.

  • 出力層の重み更新式が通常のバックプロパゲーションと異なる理由はこれ.

  • hierarchical softmaxにおいて、事後確率は(3)式のように定義される.

  • なぜ, (3)式がでてくるかは, 分からなかった.

  • Negative Sampling

  • Noise Contrastive Estimation(NCE) をシンプルにしたもの.

  • 良いモデルは, データとノイズを区別できる. ロジスティック回帰を使って. ってどういうこと?

  • トレーニングデータが小さいときは, k=5-20, 大きいときは, k=2-5が良いと.

  • (4)式わからん.

  • subsampling of the frequent words

  • いっぱい出てくるtheとかaとかは, 他の少ない単語より情報量が少ない.

  • 「100万サンプルくらい学習したら, もう変えなくてもいいんじゃない?」

  • 学習の速さと, レアな単語ベクトルの精度がよくなった.

  • represent meaning of sentences by composing the word vectors

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment