メモ: CBOW, Skip-Gram, NS
https://cs224d.stanford.edu/lecture_notes/notes1.pdf と eisenstein-nlp-notes.pdf から主にとってる.
何か間違えてたらコメントでお願いします
CBOW
The cat jumped over the puddle.
について, {"The", "cat", "over", "the", "puddle"} から "jumped" を推測したい.
記号
- 語彙
における単語V w_i - 入力の行列
, このW_{in} \in R^{n \times |V|} 列目がi の分散表現となるべきものw_i - 出力の行列
, このW_{out} \in R^{|V| \times n} 行目がi の分散表現となるべきものw_i
推測の仕組み
- ある
番目の単語について周囲c 個の単語の one-hot 表現m があるx^{(c-m)}, ..., x^{(c-1)}, x^{(c+1)}, ..., x^{(c+m)} - それぞれ左から
をかける(W_{in} )と, それぞれの単語の分散表現v_i = W_{in} x^{(i)} が得られるv_{c-m}, ..., v_{c-1}, v_{c+1}, ..., v_{c+m}
(one-hot表現なので特定の列ベクトルを切り出しているだけ) - これら
個のベクトルの平均を取る:2m \hat{v} -
を計算z = W_{out} \hat{v} - softmax で正規化する:
\hat{y} = softmax(z) - こうして得られた
が\hat{y} 番目の単語の one-hot 表現c に近いベクトルであってほしいx^{(c)} = y
この推測の学習をすることで,
学習では,
を小さくするように学習する. クロスエントロピーは勾配が綺麗なので逆伝播の式が書きやすく, ディープラーニングだと使うことが多い.
そして,
結局, そういう計算で何をするかというと
を最大化(あるいはこれにマイナスをつけたものを最小化するとも言える)して, その過程で, 入力行列や出力行列をいい感じにしていくということになる
Skip-Gram
The cat jumped over the puddle.
について, {"The", "cat", "over", "the", "puddle"} を "jumped" から推測したい.
CBOW とそんなに変わらなくて, CBOW では周囲
Skip-Gram は自身
式にすると,
を最大化して, その過程で, 入力行列や出力行列をいい感じにしていく
Negative Sampling
どちらのモデルにしても, Softmax 関数の分母
Hierarchical softmax と Negative Sampling という2つの工夫が提案されている. そのうち Negative Sampling について述べる.
ゼロから作る本の表現によると「多値分類ではなく二値分類」ということ.
{"The", "cat", "over", "the", "puddle"} から考えるべきなのは正解 "jumped" であるかどうかであり,
間違いのバリエーションは割とどうでもいい.
二値分類ではソフトマックス関数ではなくシグモイド関数を使う.
したがって,
みたいな形になる.
誤差評価はやはりクロスエントロピーである.
負例
あまりに確率の低い単語を見捨てない効果があるらしいが, 非常にヒューリスティックですね
今後
Negative Sampling が PMI の分解と等価という話について調べたい
Discussion