MLD: Revisiting Word2vec
去年 deep learning とやらを勉強しようと思いたって最初にたてた目標は "word2vec を理解する" だった。適当な目標にむかって逆算しながら入門する方が効率が良いと思ってたてたマイルストンだけど、いま思うと筋が悪かった。はさておき、そのときは細々した資料を読んだ結果テキストデータを通じ distributed representation を学習できるという A Neural Probabilistic Language Model の主張したいことはわかるようになったものの、アーキテクチャとかはわかららずじまい。挫折して逆算は諦め、普通に入門することにした。
時は流れ Learning TF 本をはじめ各種 TF 入門に word2vec が出てくる昨今。しかし実際にコードを写経してみるといまいちわからない。何がわからないのか、いまいちど word2vec の paper を読みなおしてみる・・・と、やっぱわからん。
さすがに一年前よりは理解が進んでいるけれど、データや語彙のサイズに依存しない probability (loss) の計算方法という肝心な部分がよくわからない。
TF tutorial 群では tf.nn.nce_loss という関数を使っている。ということで次に Learning word embeddings efficiently with noise-contrastive estimation を読む。が、わかんねー。Linear regression を解いてあげればいいんだよというけれど、肝心なところがめちゃ確率変数の世界。Noise Contrastive Estiamtion の出典はこれだということでチラ見したら理解するのは無理げな雰囲気。撤収。Word2vec のような一見基本的なものがこんなに確率変数ばりばりの方法に依存していたとは・・・。
nce_loss のAPIからリンクされている資料によると、NCE やオリジナルの word2vec がつかっている negative sampling などは candidate sampling とよばれる手法のひとつらしい。割と出番がありそうだけれど理解できてない。つらし。仕組みはともかく意図はわかるので blackbox として使うのだろうな。