人工知能やクラウド技術などの進化を追い続けている小林雅一氏の新著、『生成AI―「ChatGPT」を支える技術はどのようにビジネスを変え、人間の創造性を揺るがすのか?』が発売された。同書では、ChatGPTの本質的なすごさや、それを支える大規模言語モデル(LLM)のしくみ、OpenAI・マイクロソフト・メタ・Googleといったビッグテックの思惑などがナラティブに綴られており、一般向けの解説書としては決定版とも言える情報量だ。
その一部の紹介する本連載の第4回は、生成AI以前のAIがどのように「言葉」を理解していたのかを解説する。
昔のチャットボットの裏にあった「再帰型ニューラルネット(RNN)」
私達人間の言葉をコンピュータのような機械が理解して操るための「自然言語処理」の分野では従来、主に「再帰型ニューラルネット(Recurrent Neural Network:RNN)」と呼ばれる方式が使われてきた。
RNNは「時系列データ」と呼ばれる時間的な順序を持つデータの処理に適している。そうしたデータの代表が、私達の話し言葉や文章のような自然言語である。
なぜなら「私はリンゴが好きです」などの話し言葉は、「私」「は」「リンゴ」「が」「好き」「です」といういくつかの単語(品詞)へと分解され、それらが時間軸に沿って順番に発音されていくからだ。また、このような文章を私達が読むときも、やはり時間軸に沿ってそれらの単語が順番に読まれていく。これが時系列データである。
2014年頃から研究者の間で普及し始めたRNNは、それ以前のニューラルネットとは異なり、出力した結果を自身にフィードバックできる構造を有している。この点を指して、「再帰型」つまり「自分の出した結果が再び自分に帰ってくる形」のニューラルネットと呼ばれているのだ(『生成AI』ではその仕組みをより詳細に解説している)。
このようなRNN方式の言語モデルをベースとする「チャットボット(お喋りAI)」、つまり「対話型のAI」は2010年代だけでも多数開発された。
たとえば2014年にマイクロソフトの中国本部で開発された「小冰(XiaoIce)」などが、その代表であろう。これはその翌年に日本語版が開発され、「りんな」という商品名でスマホ・アプリ等としてリリースされた。
筆者も当時、このチャットボットを試しに使ってみたが、こちらの質問に対して時折ボケた答えが返ってきて、それが妙に可愛らしかった、という記憶が残っている。が、総じて「りんな」はこちらの質問をほとんど理解しておらず、結果的に頓珍漢な答えが返ってくるケースが多くて、まともな会話が成立することはごく稀だった。正直「まだ使い物にならない」という印象が強かった。
これは筆者だけの個人的な感想にとどまらない。一般に当時のチャットボットに対するユーザーの評価は厳しかった。
それらのチャットボットはいつまでたっても答えを返してこないなど、文章を生成するのに長い時間がかかってしまう。それでも短くて単純な質疑応答には何とか対応できるが、長い対話や若干込み入った複雑な質問などには歯が立たない。たとえ何らかの答えが返ってきても、意味不明であったりすることが多い。また対話に一貫性が欠け、文脈に沿った発言ができない。
これらの問題等から、当時のチャットボットはごく一部のファン層には受け入れられたが、広く一般ユーザーに普及するまでには至らなかった。
自然言語処理がAIの「最大の壁」だった
このチャットボットに限らず、一般に自然言語処理はAIにとって「最大の壁」と見られてきた。確かにディープラーニングのような多層ニューラルネットは画像・音声などのパターン認識では人間をしのぐレベルに達したが、これらは言わばAIがモノを見たり、聞いたりする能力であって、犬や猫、猿など人間以外の動物でもできることだ。
しかし、その先にある「言葉を理解して操る自然言語処理」は人間固有の高度な能力であり、それだけにAIにとってもハードルが高かったと見ることができるだろう。「記号処理型のAI」など古典的な方式は言うに及ばず、RNNなど比較的最近のAIでも、さまざまな技術的課題が行く手に立ち塞がって、研究者が期待するほどの成果はなかなか出すことができなかった。
RNNは逐次的に情報を処理するため、文章が長くなると処理に時間がかかると同時に、それまでに入力された単語などの情報を保持(記憶)するのが難しくなる。これは特に長い文書において、その正確な理解や予測をおこなうことを困難にしてしまう。
またRNNは複雑な文脈を理解する能力が乏しかった。もちろん、ある程度まで理解することはできたが、お世辞にも十分とは言えなかった。私達が日頃、何気なく使っている言葉は実は非常に複雑で多様性に富んでいる。同じ言葉が異なる文脈に応じて異なる意味を持つことは珍しくない。
RNN方式の言語モデルは言葉をエンコーディングする過程で個々の単語をベクトル表現に変換するが、このベクトルを表す数値が一旦算出されると、しばらくはその値に固定されてしまうので、多様な言葉の使い方による複雑な文脈の変化を十分に捉えることができない。
たとえば「女はピッチャーに残っているビールを自分のジョッキに注ぎ始め、それが満たされるまで注ぎ続けた」という文章における「それ」は、明らかに「ジョッキ」を指している。
この文章の直後に「男はピッチャーに残っているビールを自分のジョッキに注ぎ始め、それが空になるまで注ぎ続けた」という文章が続いた場合、今度の「それ」は「ピッチャー」を指している。
確かに紛らわしくはあるが、私達人間であれば、この程度の文脈の変化には楽々と対応して、各々「それ」が指している物が何であるかを正しく把握することができる。しかし、基本的に固定されたベクトル値など言語表現に限界を抱えているRNNでは、そうしたトリッキーな文脈の変化に対応することができない。
そもそもRNNは単語と単語の相互的な依存関係を把握するのが苦手なので、いずれのケースにせよ「それ」が「ピッチャー」と「ジョッキ」のどちらを指しているか正確に判定できるかどうかも怪しい。ある種の確率的な揺らぎに応じて、正しく判定できる場合もあれば誤ってしまう場合もあるのだ。
また文章を逐次的(直列的)に処理するため、大量の文書データなどを扱う際に非常に長い時間を要してしまい、ときには答えが出ないといった問題も抱えていた。
これらの問題から、RNNなど従来の言語モデルはAI研究者から見て「かなりよい線までは行ったが、最後の壁を突破して十分な実用化に到達するまでには至らない」という状況がかなり長期間にわたって続いてきた。