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

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

www.oreilly.co.jp

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

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

 

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

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

 

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

 

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

 

「4章 word2vecの高速化」

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

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

 

この辺りは、以下の動画も併せて見るとよい。

www.youtube.com

 

 更に参考情報

deepage.net