自然言語処理では、単語の実数ベクトル空間への埋め込みが重要な役割を担っています。大規模コーパスのもとで、全単語ベクトルはすでに計算されていて(ツールWord2Vec等を用いて)、何種類かが公開されています。これによれば、単語ベクトルから、例えば、以下のような意味関係が成り立つことが分かっています。多くの書籍やweb解説にも掲載されています。
King - Queen ≒ man - womam
(KingとQueenの差ベクトルは、manとwomanの差ベクトルと類似)
さて、そのような大規模コーパスではなく、以下のような単純な10例文だけの世界を考えます。(助詞などは取りあえず考えないので薄字にしてあります。)この世界では、12単語しか出現しません。このような範囲で、単語をベクトル空間へ埋め込んでも、上記と同様に、単語の意味関係は掴めるでしょうか?
ここでは、注目単語に対して、window size = 2の範囲に共起した単語を認識するよう、ニューラルネットワークを学習させます。例えば、注目単語「確率論」を入力とした場合、「難しい」と「数学」を教師信号として学習させます。これを、全文全単語について行います。学習終了後のニューラルネットワークにおいて、入力から中間層(隠れ層)のノードへの辺の重みが、その単語のベクトル要素となります。このようにして、全単語について、2次元(中間層のノード数が2の場合)のベクトルを得ます。その結果を下図に示します。
12単語に対する2次元ベクトル
この結果を見ると、「算数、百マス、児童、早朝」および、「確率論、学生、数学、徹夜」など関連性の高い単語がそれぞれ一つのベクトル上(白線矢印)にのっていることがわかります。
実は、この結果は一つの解に過ぎません。恐らく、無数に解(すなわち、単語ベクトルの組み)は存在するはずです。ここではそのうちの、[解1]と[解2]を示しました。[解2]は、[解1]を原点を中心に30度ほど回転させたものになっているようです。ここで、「数学」と「算数」の差ベクトルと、「難しい」と「楽しい」の差ベクトルに着目します。この2つの差ベクトルは平行に近いです。したがって、下記が成り立ちます。
数学 - 算数 ≒ 難しい – 楽しい
算数 ≒ 数学 – 難しい + 楽しい
こんな小さな実験コーパスでも、単語の意味関係が掴めたと思います。
上記は2次元ベクトルでしたが、3次元ベクトルを生成(中間層のノード数を3に設定)した結果が下図です。次元を上げれば、見えてくる情報量も増える傾向にある?かも知れません。ここでも2種類の解を示しますが、いずれも、上記の意味関係が保たれていることが分かります。
0 件のコメント:
コメントを投稿