Word2Vec


はじめに

ここ数ヶ月、日本語の類義語分類に使えないかと、Word2Vecについて色々と調べてきたので以下に纏めてみる。

Word Embeddings

まず大前提として、自然言語を機械学習処理で扱う為には、文書や単語を数値として扱う必要がある。

$W : words \to \mathbb{R}^n$.

通常、自然言語処理に出てくる単語を数値で表す場合、高次元のベクトルを使って表す。(200〜500次元程度、word2vecのデフォルトは100次元)
例えば、「花」という単語が[0, 0, 0, 1, 0, 0.8, ….]といったベクトルで表すことができるようになる。
このように単語からベクトルへ変換する方法は多数存在しており、単純に全出現単語を並べて各次元でその単語かどうかを判断する方法やニューラルネットワークを使うものなどがある。

Word Embeddingとは、このうちニューラルネットワークなどを用いて単語の素性値を機械学習によって学習させ、ベクトル化する方法であり、分散表現とも呼ばれている。
Word Embeddingを使うことで、自然言語処理の各種タスクを効率よく行うことができるようになる。
Word Embeddingを使った有名な話としては、
$W(King)-W(Queen) \simeq W(Man) - W(Woman)$.
といったように、数式で単語を表せてしまうというものがある。

Word2Vec

Word2Vecとは、いわゆるWord Embeddingを作成する為の2層ニューラルネットワークのことであり、単語の特徴を文章のコンテキストから学習させている。
Word2Vecの学習後のモデルを使うことで、各単語を数百次元程度のベクトルとして表せるようになり、ベクトルのコサイン類似度を計算することで、単語同士の類似度を表すことができる。

例えば、「王」という単語に似ている単語の一覧も学習済みのWord2Vecのモデルを使うことで簡単に出すことができる。

又、2つの単語の類似度の計算も非常に低コストで行うことができる。
例えば、我々が学習させたWord2Vecのモデルでの「買う」と「購入する」の類似度は、
0.905990661338
なんて、計算される。

この結果を見る限り、類義語の抽出ができるのではと考えられるのだが、実際にはWord2Vecのみで類義語かどうかを判断するのは難しい。
例えば、「買う」と「売る」のコサイン類似度は、
0.847663039921
と非常に高い数値となっており、反対の意味を表す単語も抽出されてしまう。

これは、Word2Vecのアルゴリズムに由来しており、以下の説明を見ていただくと理解できると思う。

Continuous Bag-of-Words Model(CBOW)

Word2VecにはSkip-gramとContinuous Bag of Words(CBOW)の2つのアルゴリズムがある。

CBOWモデルは、コンテクスト(前後の単語)を使って対象語を推測する方法であり、$w_{t}$を推測する為の入力は、$w_{t-2}$, $w_{t-1}$, $w_{t+1}$, $w_{t+2}$となる。
前後いくつの単語を使って対象語を推測するのかを「ウィンドウサイズ」と言う。
Googleの研究者であり、Word2Vecの考案者であるMikolovによるとCBOWは学習時間がSkip-gramよりも少なく、頻出する単語に対してはSkip-gramより若干精度が高いとのこと。

CBOW

Skip-gram

反対にSkip-gramは、ある語を使って、前後のコンテクストを推測する方法である。
入力は$w_{t}$であり、アウトプットが、$w_{t-2}$, $w_{t-1}$, $w_{t+1}$, $w_{t+2}$となる。
Skip-gramは学習データが少なくてもある程度の精度がでるとされている。

skip-gram

まとめ

上記アルゴリズムを見ていただければわかる通り、Word2Vecはあくまで文脈から単語の特徴を計算しているため、類似度が高いからといって単語の意味が近いとは限らない。
どちらかと言うと同じような文脈で登場する単語同士は類似度が高い傾向にあり、例えば「好き」、「嫌い」といったように同じ文脈で登場するような単語は反対の意味であったとしても類似度が高い傾向にある。
とは言え、Word2Vecを使って単語をベクトル化させることで、文書分類など他の自然言語処理へのインプットとさせることは有用であると考える。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です