株式会社オルツ 最高技術責任者 西川 仁(にしかわ・ひとし)
慶應義塾大学大学院政策・メディア研究科修士課程修了。奈良先端科学技術大学院大学博士後期課程修了(優秀奨学生として短期修了)。IE Business School (with Beta Gamma Sigma Honor) 修了。博士(工学)、MBA。日本電信電話株式会社にて自然言語処理の基礎研究から商用開発、実用化まで一貫して従事。東京工業大学情報理工学院にて助教として人工知能の研究開発、教育、コンサルティング等を実施。データコンサルティングベンチャーにて執行役員として新規事業開発、開発組織マネジメント、データ基盤構築、投資家コミュニケーションに従事。その後現職。学会活動においてはNLP若手の会委員長、言語処理学会代議員、情報処理学会自然言語処理研究会幹事などを歴任。言語処理学会最優秀論文賞、言語処理学会年次大会優秀発表賞、情報処理学会特選論文など受賞多数。言語処理学会、人工知能学会会員。情報処理学会シニア会員。 Association for Computational Linguistics 会員。
そもそも「自然なテキスト」とはどういうことか?
今回は生成型AI、特にテキストを生成するAIの歴史について解説していきます。そのためにはまず、言語モデルと呼ばれるものについて言及する必要があります。言語モデルとは、端的に言えばより自然なテキストに対して高い確率を与えるアルゴリズムです。まずこのテキストの自然さ、というものについて考えてみましょう。
「今日はまだ私は昼食を……」というテキストがあったときに、次にどのようなテキストが想像されるでしょうか。「……」に入るべきテキストはおそらく「食べていません」となると思います。これは、もし、「私」が既に昼食を取っていたのであれば「まだ」という単語を使うことが不自然であるためで、「今日はまだ私は昼食を食べました」というテキストを日本語母語話者の方であれば奇妙なものであると感じられると思います。この場合であれば、「今日はまだ私は昼食を食べていません」とする方が自然です。
もし仮に手元に大量のテキストがあるとしますと、「まだ」のあとに「いません」といった単語(文法に関する厳密に議論は除外しここでは便宜的にこれらが単語であるとしておきます)が出てきやすいといった傾向を計算機に学習させることは可能そうであり、実際に計算機はそれを学習しています。
より具体的には、「今日はまだ私は昼食を食べていません」というテキストが生起する(やや硬い表現になりますが出現する、発生する、というものとお考えください)確率は「今日はまだ私は昼食を食べました」というテキストが生起する確率より高く評価されます。計算機がより自然なテキストに高い確率を与えることができるのは、大量のテキストから、人間が記述したテキストの傾向を学習し、自然なテキスト、すなわち大量のテキストの中に含まれている文字や単語の使い方の傾向に合致したテキストはどのようなものか、ということを学習できるからです。
大規模言語モデルはテキストの自然な「続き」を出力する
さて、そもそもなぜ言語モデルが必要なのでしょうか。ChatGPTなどは大規模言語モデルと呼ばれますが、上の説明からは、要はとにかく自然なテキストを生成してくれるプログラムである、ということになりますので、その必要性は自明ではあります。ただ、やや歴史的背景を一部説明させていただいた方が、より理解が深まるものかと思います。
身近な例では言語モデルはまず機械翻訳のために必要でした。以下の英語の文を考えてみます。
「I could not eat lunch.」
この文を、英日辞書などを使い文頭から1単語ずつ訳していきますと、以下のような日本語の文ができあがります。
「私 できた ない 食べる 昼食 。」
必ずしも意味が通らなくはないですが、明らかに不自然な文です。日本語の活用(「できる」の否定形が「できない」といったものです)は一旦考えずに自然な順序にこれを並べ直しますと以下のようになると思います。
「私 昼食 食べる できた ない」
さらに単語の位置や活用を考えて補足しますと以下のようになるかと思います。
「私は昼食を食べられなかった。」
この場合言語モデルが必要な理由はまさに、「英日辞書の結果として得られた単語列を、自然な順序に単語を並べかえ、加えて単語の位置や活用にそって自然なものにすること」です。まずこのような能力を言語モデルは持っている、と考えてください。
先ほどの例に戻りますと、優秀な言語モデルは「今日はまだ私は昼食を……」の続きとして「食べていません」というテキストを出力することができます。この能力を極端に強化したものがChatGPTに代表される大規模言語モデルです。「今日はまだ私は昼食を……」といった無味乾燥としたテキストではなく(本稿の著者は昼食を取る時間がないときがあり著者にとってこれは由々しき事態ではありますが)、その代わりに「『こんにちは!』と返してください。」と入力しますと、大規模言語モデルは「こんにちは!」と出力してくれます。「『今日は私はまだ私は昼食を食べて』の続きを書いてください。」と入力しますと、概ね、「いません。そのためお腹が空いています」といった出力が返ってきます。
ここまでの点を要約しますと、大規模言語モデルは入力されたテキストの自然な「続き」となるテキストを出力している、と理解できます。例えば、「(なんらかの長い文章)上の文章を要約してください。」と入力しますと大規模言語モデルは上記のなんらかの長い文章の要約を出力してくれます。これは大規模言語モデルにとって、入力に対する自然な出力とは、入力された長い文章を要約した結果であるからです。
大規模言語モデルを動かすには適切な命令と補足情報が必要
第1回でご説明したように、この入力はプロンプトと呼ばれます。ChatGPT等をお使いになったことがある方はご理解いただけると思いますが、ChatGPT等はこのプロンプトの内容に非常に敏感です。ここでいう敏感の意味では、プロンプトの内容によって著しく出力が異なる、ということを意味します。
例えば、「何か記事を書いてください。」という入力を与えたとします。この場合、大規模言語モデルはまず、何かを「書かなければならない」ということを理解します(ここでの理解は人間的な意味での理解とは異なることに留意してください)。次に、書かなければならないものは「記事」であることが指定されています。このような場合、大規模言語モデルは何らかの記事らしきものを出力しますが、その記事の内容はナンセンスなものであったり、よくわからないものであったりします。これは、この入力における「記事」がどのようなものであるべきか指定されていないためです。所望の出力を得るためには、例えば、「神奈川県鎌倉市で2019年7月10日に開催された第71回花火大会は大変混雑したものの好評を博したという趣旨の新聞記事を書いてください。」といったような、具体的な指示を与える必要があります。
この入力を分解しますと、「書いてください」というある種の命令と、命令の内容を補足する何らかの追加情報の2つにわけることができます。これは要約や翻訳を大規模言語モデルに行わせる際も同様であり、「(なんらかの長い文章)上の文章を要約してください」という要約を行わせる場合においては、「要約してください」という命令と、要約の対象となる「(なんらかの長い文章)」という追加情報に分解することができます。翻訳の場合においても、例えば、「以下の文章を日本語から英語に翻訳してください。(日本語の文章)」という形で、「日本語から英語に翻訳してください」という命令と、翻訳の対象となる「(日本語の文章)」に分解することができます。
このように、大規模言語モデルは適切な命令と、それを補足する追加情報を適切に与えなければ動作しません。大規模言語モデルを擬人化することにはやや危険を伴いますが、どなたかに対して「何かしゃべってください」とお願いしたとしても、多くの方は困惑すると思われます。一方で、「今日のお昼の感想について話してください」ということであれば、一定の感想をお話しいただけるでしょう。