窓の外は、無い
文章を書く人工知能のことを、大規模言語モデルという。英語で large language model、その頭文字をとって LLM とも書く。オープンAIの GPT、グーグルの Gemini、アンソロピックの Claude が、それにあたる。以下ではモデルと呼ぶ。
一回の呼び出しで、モデルが見ているのは、そのとき渡された文字列だけである。それより外側は、モデルにとって存在しない。
この見える範囲のことを、コンテキストウィンドウという。長いので、窓と呼ぶことにする。
窓は、解き方の形である
窓は、あとから付けられた制限ではない。
この仕組みの出自は機械翻訳で、当時いちばんの難所は、長い文を訳すと壊れることだった。それを解いたのが注意機構という考え方で、やり方は、出力の語を一つ作るたびに入力の文の全体を見に行く、というものである。全体を見に行く、という解き方を選んだ時点で、見に行ける範囲というものが生まれる。それが窓である。
だから、窓は仕様の都合ではなくて、モデルがものを読む仕組みそのものの形をしている。
いま、どれくらいの大きさか
数えている単位は語ではなく、トークンという細かい単位である。日本語だと一文字が一トークン前後になることが多い。
二〇二六年の時点で、よく使われているものを並べるとこうなる。Claude の上位のものと GPT の上位のものが、どちらも百万トークン。Claude でも軽いものは二十万トークンで、五倍の開きがある。Gemini の上位は二百万トークン。重みが公開されているものには、一千万というのもある。
百万トークンというのは、日本語なら文庫本で十冊ぶんくらいの分量になる。かなり入る、という感じがすると思う。
ただし、同じ会社の中でも五倍違う。速くて安い方を選んだ時点で、入る量が五分の一になっている。手元の道具がどれを呼んでいるかで、できることが変わる。
窓は、伸ばすほど高い
注意機構は、渡された語の全部の組み合わせを見る。一語ずつ、他のどの語と関係が深いかを測るからだ。
そうすると、長さが二倍になったとき、組み合わせは四倍になる。十倍なら百倍である。窓は、伸ばした分だけ高くなるのではなく、二乗で高くなる。
このことは、二〇一七年の原論文にそのまま表で載っている。注意機構の計算量は語数の二乗に比例し、それ以前の再帰的な仕組みは語数に比例する、と並べてある。当時の著者たちは、これを速さの利点として書いていた。訳す文はせいぜい数十語で、そのくらいの長さなら二乗でも安いからである。
窓が数十万語まで伸びたのは、そのあとの話だ。同じ表が、いまはそのまま値段の説明になっている。
実際には工夫がある。一語出すたびに全部を計算し直すのは無駄なので、途中の計算結果を取っておいて使い回す。これで一語あたりの計算はだいぶ軽くなる。
ただし、取っておく分だけ場所を食う。しかも、窓が長いほど比例して増える。窓を大きくしたモデルでは、この取り置きだけで積んでいるメモリを使い切ってしまうことがある。
窓が大きいことは、そのまま良いことではない。何かを犠牲にして買っている。
溢れたとき、何を捨てるか
窓には上限がある。会話を続けていけば、いつか超える。
そこで、超えた分をどうするかという判断が必要になる。ここが、いちばん効く場所だと思っている。
いちばん簡単なのは、古いものから捨てることだ。最近のものだけを残す。作るのは楽だし、たいていの雑談では困らない。
だが、これはよく壊れる。長い作業では、大事な前提はたいてい最初に置かれるからである。何を作るのか、何をやらないと決めたのか、誰の判断なのか。そういうものが最初にあって、後ろは細かい作業が続く。古いものから捨てると、真っ先に前提が落ちる。
そのあとモデルは、前提の無い状態で、それらしい文字列を出し続ける。確からしさは見た目に出ないので、外からは気づけない。
窓に入っていないものは、無い
要るのは、この一行だと思う。
参照してほしい資料は、窓に入れなければ参照されない。守ってほしい約束は、窓に入っていなければ守られない。前に言ったはずのことも、窓から落ちていれば、言っていないのと同じである。
モデルが忘れた、というのはたいてい正確ではない。窓に入れなかった、が起きていることである。
そして、何を入れて何を落とすかを決めているのは、モデルではない。