前回は、ことばをコンピュータで扱うために数値化することについて、Word2vec に注目しながら解説しました。Word2vec は、単語の意味をうまく表現するベクトルを作成し、加減算までも可能にするものでした。
今回は、ことばの数値化について、引き続き見ていきたいと思います。
・One-hot で単語を表現する
Word2vec は大きなブレイクスルーをもたらした技術ですが、もちろん、「Word2vec が登場するまでは、コンピュータで自然言語を扱うことは一切できなかった」などということはありません。
それ以前から一般的に行われていることとして、文字や単語などの「トークン」を、番号(インデックス)に置き換え、さらにベクトル化する方法があります。たとえば、「いぬ」は1、「ねこ」は2、「こねこ」は3、「こたつ」は4、「みかん」は5、「りんご」は6といった具合に変換します。下図のように、インデックスが3の「こねこ」は、3番目の数値が1で、他がすべて0のベクトルで表現できます。このようなベクトルを、「one-hot ベクトル」と呼びます。
この方法は直感的で分かりやすいものですが、よく知られる課題があります。まず、単語の関係性を表現することができません。この例では、「いぬ」と「ねこ」も、「ねこ」と「こねこ」も、そして「ねこ」と「こたつ」も、距離は√2です。「ねこ」と「こねこ」は、ほかの組合せよりも密接に関係していてほしいのですが、そのような関係性は表現できていません。どの組み合わせでも、2つの単語の間の距離は同じになってしまうのです。
また、扱いたい単語(語彙数)が増えると、それと比例して、必要なベクトルの次元数が増えてしまうという問題もあります。「いぬ」「ねこ」の2単語のみを扱うのであれば、2次元のベクトルで事足りますが、もしも一万個の単語を扱うなら、10000次元のベクトルが必要になります。辞書に載っているすべての単語をこの方式で表そうとすると、一つ一つの単語を長大なベクトルで表すこととなり(しかも、ほとんどの値は0です)、効率的とは言えません。
今日では、このような one-hot ベクトルをそのまま処理することはあまり行われませんが、いったん単語を数値化するための処理としてはしばしば用いられます。文字情報を、いったんone-hotベクトルにしてから、Word2vec のような表現方法に置き換えるのです。このような処理は「埋め込み(Embed)」と呼ばれます。深層学習(ディープラーニング)を用いた自然言語処理では、ニューラルネットワークを学習する一環で「埋め込み」を学習することもありますし、Word2vec などの単語ベクトルを「事前学習済み」のものとして利用することもあります。
また、語彙数の問題に対しては、「サブワード」と呼ばれる手法が広く用いられています。これは、「先に語彙の数を決めておいた上で、データセット中の出現頻度を参考にトークンの切り分け方を決める」手法です。あらかじめ定めた語彙数の範疇で処理を行えるので効率が良く、また、語彙に含まれない未知のことばにも柔軟に対応できることが知られています。サブワードについては、処理したい文(文章)をトークンに切り分ける「トークナイズ」についてお話しするタイミングで、もう少し詳しくご説明したいと思います。昨今の大規模言語モデル(Large Language Model, LLM)は、扱える「トークン数」が決まっていたり、トークン数に応じた料金設定がなされていたりしますが、「トークン」について知ることで、その背景をより詳しく想像することができるようになるはずです。
・ユークリッド空間以外の単語ベクトル
さて、先ほどの例で、「いぬ」と「ねこ」も、「ねこ」と「こねこ」も、そして「ねこ」と「こたつ」も、距離は√2だと書きました。ここで言う距離は、数学的には「ユークリッド距離」と呼ばれ、中学・高校の数学で扱う、いわば「普通」の距離のことです。
古代エジプトの数学者であるユークリッド(エウクレイデス)が、世界屈指のベストセラーのひとつと言われているその著書『原論』で体系化した幾何学は、長い間、数学における基盤として扱われました。たとえば「三角形の内角の和は180度」など、直感的に納得のできる「公理」を前提に、様々な定理が提唱され、証明されてきました。
しかし、このような「直感的に納得のできる」公理では、しっかりと説明することのできない物事があることが知られるようになりました。相対性理論やブラックホールについての説明で、「物体の質量によって、空間が歪む」といった話を耳にされたことがある方もいらっしゃるかもしれません。そうした「歪んだ空間」は、ユークリッドの幾何学ではうまく説明することができないことが知られています。そうした、直感的ではない空間を扱うことのできる、「非ユークリッド幾何学」といったものがあり、そこでは異なる「距離」が定義されます。
さて、前置きが長くなりましたが、「自然言語を扱う上では、ユークリッド幾何学の距離ではなく、別の距離を定義したほうが良いのではないか?」という研究があります。代表的なのは「ポアンカレ・エンベッディング」と呼ばれる取り組みで、ユークリッド距離を用いた単語ベクトルに比べて、効率性の面で大きな違いがあることが示されました [1]。それまでの単語ベクトルでは200次元を使っていたのと同等以上に良い表現が、ポアンカレ・エンベッディングでは5次元で得られたのです。
なぜ、このようなことができたのでしょうか? これは、自然言語の持つ語彙の階層性や分布に由来しています。
たとえば、「ゴールデンレトリーバー」や「柴犬」は、「いぬ」を細分化した概念です。一方で、「哺乳類」は「いぬ」よりも幅広いものを意味しており、「動物」はさらに大きな概念です。このように、単語はすべてが同一のレイヤーに存在しているものではなく、階層構造を持っているのです。
ユークリッド空間よりも、ポアンカレ空間での表現のほうが、こうした階層性を表現しやすい、ということが指摘されています。
今回は、前回に引き続き、ことばを数値化するということについて見てきました。お伝えしたかったのは、自然言語処理の難しさの一つが、「そもそも、ことばをどのようにコンピュータで扱うか」にあるということです。これは同時に、自然言語処理の研究の奥深さであり、面白さでもあります。
次回からは、今日の LLM のネットワーク構造の基礎ともなっている Transformer について、お話ししたいと思います。
References
[1] Maximilian Nickel and Douwe Kiela. "Poincaré embeddings for learning hierarchical representations." In Proceedings of NIPS, 2017.