前回、ChatGPTの言語モデルとしての衝撃的な完成度の高さについてお話をしました。機械翻訳やチャットボットのようなAIによる自然言語処理は、近年急激に進歩した印象を持たれるかもしれません。ある意味それは確かなのですが、だからと言って何か革命的な手法の発明によって、突然これらの成果がもたらされたかと言うとそうではありません。技術的な進歩というのは大抵そういうものだと思うのですが、いくつもの進歩の積み重ねが、あるときわかりやすい大きな成果となって結実しているのは自然言語処理も同じです。

そういうわけで、今日は私が研究者として自然言語処理の研究をしていた頃と、現在の自然言語処理モデルとの大きな違いのひとつを考察してみたいと思います。

それは「単語」です。

言うまでもなく文章は単語の組み合わせで出来ています。単語はいわば、物質でいう「原子」のようなものです。原子はさらに電子や陽子や中性子で構成されていますし、単語は文字で構成されていますが、それ自体で特徴のある最小構成要素に分解するならそれは、原子であり、単語であると思いませんか。

自然言語処理を行う際に、その単語をどう扱うかは大きなポイントとなります。人間にとって単語を覚えることは、どれだけ多くの単語を覚えるかという量の問題となることが多いかもしれませんが、大容量のコンピュータにとって量は問題ではありません。問題はそれぞれの単語をどう特徴づけるかなのです。

多くの単語をただ羅列して記憶したところで、なんの役にもたちません。「猫」「バス」「食べる」といった単語は、それぞれに対応する生物や人工物、動作が紐付いています。人間はそれを知っているからこそ、正しく単語を並べ、文法的にも意味的にも正しい文章を生成することができるのでしょう。

それぞれの単語とそれに対応する「概念」をコンピュータにどう覚えさせるかというのは難題です。人間の子どもは、単語とそれに対応する現実世界の物体や動作を、アタマの中で紐付けて学ぶように思えます。目と耳が不自由だったヘレン・ケラーは、水の触感から初めて「WATER」と水の紐付けを知ったと言われています。とはいえ、コンピュータに画像や音や触感を与えて言葉を覚えさせるというのは、一筋縄でいきそうにありません。

私の研究では、その文章を見た時のアタマの中にあったであろう意識構造を定式化し、文章との対を大量に与えることによって、単語の紐付けやグルーピングを獲得しようとしました。意識構造を定式化し、学習用にそれを大量に用意するという時点でもう筋が悪いのですが、当時は「人間は生まれながらにして脳の中でそうした意識構造を創り出すことができ、その時に聞いた文章との相互関係から言葉を学んで行くのだ。だからこうするしかないのだ」と思っていたのです。

ところが、現在主流の自然言語処理ではこのような考え方を一切用いていません。単語に関する重要なブレイクスルーは「分布仮説」と呼ばれるものです。この仮説は、単語はそれ自体には意味はなく、その単語の文脈によって意味が決まるというもの。要するに、周りにどんな単語が来るかということでその単語の意味は決まるというものです。この仮説に従えば、大量の自然言語の文さえあれば、各単語の「意味」を学べることになります。

人間の実際の言語獲得過程はさておき、このアプローチはコンピュータによる自然言語処理としては大きな成功を収めました。特に有名な手法としてはWord2Vecがあります。Word2Vecは分布仮説+ディープラーニング的な手法で、各単語の周囲の単語を予想する学習をさせることで、単語の意味表現を獲得していきます。意味表現は学習したネットワークのウェイトとして得られ、数百次元程度のベクトルで表現されます。(Embeddingsと呼ばれます)

学習で得られたベクトルの、それぞれの次元が何を意味しているのかはわかりません。(画像認識でネットワークがどこに注目して猫と犬を区別しているのかかわからないの似ています) ただとにかく、あらゆる単語がこの学習をすることでベクトル表現となるのです。さらに、使われ方や意味の近い単語は似たベクトルを持つことが確かめられました。これすごく重要。ベクトル同士なので内積とって値が大きいとその単語同士は近いということになります。

Word2Vec、Glove、Fasttext、 Elmo、BERT (Transformer)という形でこのEmbeddingsも進歩していきます。分布仮説をベースに意味表現(Embeddings)をディープラーニングで獲得していくシンプルな手法の劇的な効果は、研究者時代の私には思いもよらぬものなのでした。

直感的には、人間はやはりヘレン・ケラー的に、単語に対する対応物が言語外にあることをある程度必要としていると思うのですが、ChatGPTと話してるとその信念さえ揺らいでくるのでした笑