ゼロから作るDeep Learning2(その1)

「ゼロから作るDeep Learning2」 external_linkを読んだ時のメモ。

「1章 ニューラルネットワークの復習」

復習の章。特にコメントなし。

「2章 自然言語と単語の分散表現」と「3章 word2vec」

自然言語処理では、単語をベクトルとして表そうとしている。 ベクトルで表現できると何がよいかというと、ベクトルは方向を表しているので 例えば、車と自転車が同じような方向を持つことが表せるようになる。 さらにベクトルは足し算引き算ができるので、うまくモデルが作れれば以下のようなこともできるようになる。

「王様」- 「男」+ 「女」= 「女王」

このベクトルデータのことを分散表現と読んでいる。

よいベクトルを作るには、単語と単語の関連から作るとよいらしく コーパス(学習元となる文章たち)を集めて、その文の単語毎の前後の出現確率からベクトルを作成する。

ベクトル作成の手法として2種類あり、カウントベースと推論ベースと呼ばれている。 カウントベースの手法では、周囲の単語の共起行列から単語の分散表現を作っていた。 大規模なコーパスを扱うのが大変という問題がある。
カウントベースの手法は、全データを一気にバッチで学習するが 推論ベースの手法は、ミニバッチでデータサンプルから繰り返し学習することができる。
単語の出現確率をニューラルネットワークで計算する。

「4章 word2vecの高速化」

3章で作成したword2vecの高速化のために「Embeddig」と「Negative Sampling」を行う。「Embeddig」は最初からこれでやった方がわかりやすい気もした。まぁ、ゼロから作る本だから一旦簡単なニューラルネットワークから作っているのだろう。

「Negative Sampling」は、正解ケースと失敗ケースの学習に分けて、失敗ケースはサンプリングで学習させることにより、計算量を少なくしている。

自然言語処理関係の動画

参考情報

Word2Vec:発明した本人も驚く単語ベクトルの驚異的な力 external_link