word2vec
原論文が数学的解説をかなり端折っているので、解説論文も添付しておきます。
どんなものか ( 要約、システムのI/Oなど)
単語をベクトルに埋め込む手法の一つ。高品質な(分布が単語の意味・文法に基づいている)分散表現の獲得が目標。
ex) king + woman = queen
Skip-gramとCBOW(continus-bag-of-words)という2種類のモデルが提案されている。
Skip-gramの方が高コストだがいい結果が出る。(今回はskip-gramを解説)
「単語の意味は(文章中の)周囲の単語によって形成される」という分布仮説に基づいたモデル。
先行研究と比べてすごいところ、貢献
単語をベクトル化する手法は沢山ある
高品質な分散表現を獲得することは難しい。(教師なし学習:LSA, LDAなど)
ニューラルネットワークを使えばいけるんじゃないか??
LDA, Nural Network Language Model(NNLM)はとにかく計算コストが高かった
word2vecはそれまでのモデルよりも大幅に計算コストを下げたため、より大規模なコーパスを用いてより高次元への埋め込みを可能にした
必然的に従来よりも高品質な分散表現を獲得できるようになった
モデルの隠れ層が持つ重み行列を利用する手法を改良
手法
skip-gramモデル
https://gyazo.com/e3bfe8d5eefcf710a4b4d64bbef8bb46
分布仮説に基づき、ある単語の周辺語彙を推定するモデル
周辺語彙の量はwindow-sizeで決める
ただし、出力層でEmbeddingされるのではなく、入力層→隠れ層の間にある重み行列がそのまま単語ベクトルになる!
https://gyazo.com/ad2c8dde994e50fc53e02661a31704b8
入力層は語彙数(V,1)の1次元ベクトル
one-hot encodingによりとりあえず単語をベクトル化
入力された単語がembeddingされているスカラーのみ1。それ以外は0。
V×N(最終的な埋め込み先の次元数)の重み行列Wと入力されたベクトルの積が隠れ層の出力となる(活性化はしていない・全結合)
入力はone-hot化されているので隠れ層の出力は(1,N)
https://gyazo.com/db92a1e7a3abbd48640d220b9440f8c9
(N,V)の重み行列W'と隠れ層の出力(1,N)の積を(V,1)の1次元ベクトルとして出力(Softmax・全結合)
ここは使わない
入力した単語が埋め込まれている次元pに対応する、重み行列Wのp行目が、そのまま単語の(分布仮説の)特徴量となっている。
CBOWモデル
https://gyazo.com/7050b093d1fec22d01043d74bcdd6538
分布仮説に基づき、ある単語Aの周辺語彙群からターゲットとなる単語Aを推定するモデル(skip-gramの逆)
ただし、出力層でEmbeddingされるのではなく、入力層→隠れ層の間にある重み行列がそのまま単語ベクトルになる!(のもskip-gramと同じ)
skip-gramとの違い
入力層がwindow-size分存在する
周辺語それぞれのone-hot vectorを入力
中間層の出力は全入力層がWによって重み付けされたものの平均
検証方法
既存のNNLM, LSAなどの手法と語彙数、埋め込み先の次元数、精度(文法的・意味的)、計算にかかった時間で比較している。
https://gyazo.com/0cbde6e209e25b036e170693ef5ecc0d
https://gyazo.com/61774abcdeea8d60f5e51d9c5ba36369
議論、課題
2013年発表。年代を考えるとこれまではより計算コストの低いアルゴリズムでEmbeddingしてきたが、GPUとニューラルネットワークが盛り上がりを見せてきていて使わない手はない!ということなのだろう。
分散並列型の計算機を使えば計算理論上無制限の語彙数で学習できる
Using the DistBelief distributed framework, it should be possible to train the CBOW and Skip-gram models even on corpora with one trillion words, for basically unlimited size of the vocabulary.
次に読むべき論文
fastText
Word2Vecを作った天才Mikolovが作ったfastText。とにかく学習が早い。形態素を考慮するために各単語を文字ngramで表現し、それらのベクトル表現を学習している。
word2vecを応用して文章丸ごとの分散表現の獲得を目指す。
コメント
visualから離れている気がしますが、石井実装パートの作品の予習だと思って勉強中ですのでご容赦ください。。。(石井)
線形代数の勉強しなければ。。。(石井)
参考文献