ChatGPTの返事って、なんで一気に出ずに少しずつ流れてくるの?

ChatGPTの返事って、なんで一気に出ずに少しずつ流れてくるの?
目次

一気に出ないの、気になりませんか?

ChatGPTに何か聞くと、答えがドンと一枚で表示されるのではなく、左から少しずつ、まるで誰かがその場でタイピングしているみたいに流れて出てくることないですか?

急いでいるときは「もう全部できてるなら一気に見せてよ」と思うし、逆にあの流れる感じに妙な生々しさを感じることもあります。あれ、いったい何をしているんでしょう。

「通信が遅いだけ」では説明できない

答えが少しずつ届くのは通信のせい、と考えるのが自然なわけですが、それだけでは説明がつきません。もし答えがサーバー側で丸ごと完成しているなら、あとはまとめて送るだけなので、あんなに一定のペースで一語ずつ流す理由は弱くなります。

もちろん、サービスによっては、文全体を生成してからUIだけが「流して」見せることもありえます。なので、画面の表示だけから内部実装を断定することはできません。

それでも、ChatGPTのような言語モデルの基本形を理解するうえでは、あの「流れて出てくる」様子はよい手がかりになります。AIは答えを一気に持っているというより、書きながら次を決めているからです。

少しずつなのは、一語ずつ選んでいるから

種明かしをすると、AIは文章を「最初から最後まで用意してから出す」のではなく、今ある文章の続きとして、次の小さな単位(トークン)を選ぶという作業を、ひたすら繰り返しています。ここでいうトークンは、必ずしも日本語の「一語」と同じではありません。単語の一部、記号、句読点のような単位になることもあります。

「今日はいい」まで書いたら、その続きにふさわしい候補の重みを計算する。「天気」を選んだら、今度は「今日はいい天気」を踏まえてまた次の候補を見る。この「一つ足しては、それも含めて次を選ぶ」を高速で回している。だから答えは、書かれた順にひとつずつ増えていきます。

そして選び方がまた面白い。次のトークンは「これに決まっている」と常に一つへ固定されるわけではなく、候補ごとに「らしさ」の重みがつきます。その重みをもとにサンプリングすることもあれば、設定によっては、いちばん重い候補をより決定的に選ぶこともあります。

同じ質問で毎回答えが変わる理由も、これで説明できる

この「候補から抽選する」という見方を持つと、別のあるあるも同じ絵で説明できます。同じ質問を投げても毎回少し違う答えが返ってくる、あれです。

毎回まったく同じ文章にならない主な理由のひとつは、AIがその都度、確率の重みに沿って選び直していることです。重みの大きい候補が選ばれやすいのは変わりませんが、二番手・三番手が顔を出す余地も残っている。さらに、会話履歴、システム側の設定、モデル更新の影響も重なります。だから昨日と今日で言い回しが変わる。「少しずつ流れる」と「毎回変わる」は、かなり近い場所にある現象なんです。

同じ質問でも返事のトーンが揺れる話も、この「抽選」の目盛りを動かすと見え方が変わります。

式で見ると、どう「次の一語」を選んでいるのか

では、その「らしさ」を式に書き直してみると、どう読めるでしょうか。次の式は、実際の巨大なネットワークが内部でしている計算をそのまま写したものではありません。概念的に1行へ縮めたイメージ図です。

$$ p(w \mid w_1, w_2, \ldots, w_{t-1}) $$

記号をそのまま日常語にほどきます。

  • $w$ は「次に置こうとしているトークン」の候補です。
  • 縦棒 $\mid$ は「〜という条件のもとで」という意味。棒の右側が前提です。
  • $w_1, \ldots, w_{t-1}$ は「ここまでに並んだトークン列」。つまり文脈です。
  • 左辺 $p(\cdots)$ は「その文脈のとき、次が $w$ になる確からしさ」を表します。

まとめると、この式は「これまでの文脈を前提にしたとき、次のトークンが $w$ である確率」を言っているだけです。AIは候補についてこの $p$ に相当する重みを出し、その大小を使って次を決めます。サンプリングする設定なら、その重みに沿って抽選する。決定的な設定なら、最も重い候補を選ぶ方向に近づきます。

極端な場合を入れてみると、腑に落ちます。もしある候補の $p$ がほぼ1なら、そこはほぼ一択で、ためらいなくその候補が出ます。逆に候補が横並びで $p$ が拮抗していれば、設定しだいで揺れやすくなる。答えのどこが安定していてどこがブレるかは、この確率のとがり方にかなり左右されます。

ここでの「抽選」は、玩具のサイコロほど単純な乱数だけを意味しません。候補の重み、温度のような設定、会話の前提が組み合わさって、最終的な次の一手が決まります。

「今日はいい__」の次のトークン候補。候補ごとに確率の重みがつき、設定に応じて選ばれる(値は説明用のイメージ)
「今日はいい__」の次のトークン候補。候補ごとに確率の重みがつき、設定に応じて選ばれる(値は説明用のイメージ)

次に「流れる」のを見たら

今度ChatGPTの返事が少しずつ流れてくるのを見たら、それは「次の一語をいま選んでいる」瞬間を、リアルタイムで眺めているということになります。

だとすると、こう考えられます。書き出しの数語をこちらから指定すると、AIが次を選ぶときの前提が変わり、続きの確率の重みもそちらへ傾く。とはいえ、それは完全な操縦ではありません。出だしで流れを少し寄せることはできても、最後まで意図どおりに固定できるわけではないからです。

そう考えると、プロンプトの最初の一言は、答えを書き込むペンではなく、確率の重みをそっと傾ける舵のようなものだったわけです。次に返事が少しずつ流れてくるのを見たら、その一手が自分の置いた前提のうえで選ばれていく様子を、ちょっと覗いてみたくなりませんか?

あわせて読みたい関連記事。

よかったらシェアしてね!
  • URLをコピーしました!
目次