この記事は個人的なお勉強用のメモです。
このお勉強の位置
深層学習 Day 3
Section 1 再帰型ニューラルネットワークの概念
Section 2 LSTM
Section 3 GRU
Section 4 双方向RNN
Section 5 Seq2Seq
Section 6 Word2vec ← これ
Section 7 Attention Mechanism
講義
RNNの課題
可変長の文字列をNNに与えられない。(固定長のみ可能)
word2vecの処理
単語のボキャブラリを作成する。(単語の重複なし)
I want to eat apples. I like apples.
⇒ {apples, eat, I, like, to, want}
one-hotベクトルにする。
「apples」が入力の場合。
1...apples
0...eat
0...I
0...like
0...to
0...want
word2vecのメリット
大規模データの分散表現の学習を
現実激な計算速度とメモリ量で実現できる。
以前の方法:ボキャブラリ数 × ボキャブラリ数
word2vec:ボキャブラリ数 × 単語ベクトル
重みの数を減らせるようになった。
演習チャレンジ
def traverse(node):
if not isinstance(node, dict):
v = node
else:
left = traverse(node['left'])
right = traverse(node['right'])
v = _activation(W.dot(np.concatenate([left, right]))
return v
np.concatenate関数:ndarrayを結合する
上のソースでは1次元ベクトル同士を連結しているので結合の方向は気にしなくていい。
これは選択肢を見れば正解はわかる。
W の形状が (embed_size, 2*embed_size) であることからも明らか。
実装演習
なし。
確認テスト
RNNとword2vecの違い
word2vecは単語をone-hotベクトルで計算する。
模範解答
word2vecは重みの計算が現実的な計算速度で可能。
少ないリソース消費量。
RNNはボキャブラリ数 × ボキャブラリ数の重み
word2vecはボキャブラリ数 × 単語ベクトルの重み
修了テスト~練習問題~
修了テスト内にword2vecの問題は無い。
代わりに赤本2でお勉強。
- 入力層は扱う単語の数だけ、中間層を経て、出力層へ
- それぞれが全結合層
- 入力層に与える単語はone-hot表現
- 入力層から中間層への重みは分散表現を表す行列、学習によって更新される
- 出力層によって出力されるのはスコア
- スコアをSoftmax関数で確率に変換
- 複数の単語を入力として与えると、確率として推測結果が出力される
例:「you」と「goodbye」から推測される単語の中で最も確率が高いのは「say」