「word2vecによる自然言語処理」を読んだので word2vec についてまとめておく。
word2vec とは?
ニューラルネットワークをはじめとした機械学習で自然言語を扱うには、単語などをベクトルで表す必要がある。
word2vec は単語をベクトルに変換するための手法の1つで、分散表現とも呼ばれる。
word2vec では意味の近い単語は近いベクトルになるとされる。
例としては king - man + woman = queen は「王様から男を引いて女を足したら女王になる」というのがある。
word2vec の仕組み
word2vec のモデルの1つである Skip-gram はニューラルネットワークが基礎となっている。
Skip-gram のニューラルネットワークは、入力層と出力層の次元数が単語数であるのに対し、中間層の次元数は200次元と小さくなっている。
これにより入力データは中間層で無理やり次元圧縮され、入力データの特徴を表すベクトルが得られる。
計算の高速化のために階層的ソフトマックスやネガティブサンプリングといった手法がある。
階層的ソフトマックスは、頻度の高い単語の順にハフマン木を作り、各階層ごとにロジスティック回帰を使うことでソフトマックスを近似する手法である。
ソフトマックスを階層的に適用するわけではないので注意が必要だ。
ネガティブサンプリングは、ランダムに偽の入力を与え、偽の入力によって正解が出る確率を下げるように学習する手法である。
word2vec ができること・苦手なこと
単語をベクトル化し、意味の近い単語が近いベクトルになる。異なる言語でも同じ傾向があるようだ。
word2vec でベクトル化すると意味の近い単語が近いベクトルになるため、k-means などのクラスタリングを使えば表記揺れの吸収に応用できそうだ。
一方、word2vec は単語ごとにベクトル化することから多義語の扱いは苦手である。出現頻度の高い単語の意味が強く反映されてしまったり、どちらの類義語とも遠いベクトルになってしまったりする。
感想
機械学習で自然言語を扱おうとすると word2vec は必ず目にすることになるが、これまで「単語をベクトルに変換するツール」以上の理解はなかった。
「word2vecによる自然言語処理」は80ページ程度の書籍で解説もやさしく、word2vec が何をやっているか、どんな仕組みなのか雰囲気を掴むことができた。
今後実際に word2vec を利用するかは不明だが、Skip-gram での次元圧縮の話などは他でも応用が効きそうなので、読んでおいても良いかもしれない。