Skip to content
モデル・研究

分析:長大なコンテキストは検索を不要にしたのではなく、その役割を変えた

100万トークン規模のコンテキストウィンドウにより、「すべてをプロンプトに入れる」ことは技術的に可能になった。しかし、精度、遅延、コストのいずれを見ても得策ではない。いつ検索し、いつ情報を詰め込み、いつ両方を組み合わせるべきかを判断するための実用的な基準を示す。

DigitalNeuron Desk約1分

ひとことで言うと

大規模なコンテキストウィンドウによってRAGは不要になるのか?

不要にはならないが、役割は変わる。非常に大きなコンテキストウィンドウを埋め尽くすと、中ほどに埋もれた情報に対する精度が低下し、リクエストごとの遅延とコストが増大するうえ、回答がどの情報源に基づくのかも特定しにくくなる。大規模または頻繁に更新されるコーパス、出典の明示やアクセス制御が必要な用途、コストに厳しい大量処理では、引き続き検索を標準とするのが適切だ。長大なコンテキストは今や、文書全体を対象とする推論、タスク内でのエージェントの作業記憶、そして検索で対象を絞り込んだ後の第2段階に最も適している。

要点

  • コンテキスト容量とコンテキストの活用度は同じではない。モデルは長いウィンドウの冒頭と末尾からは安定して情報を取り出せるが、中ほどからの取得は信頼性が低下する。
  • コストとレイテンシーは、ウィンドウの上限ではなく、実際に送信する量に応じて増大する。20万トークンを4,000トークンに絞り込む検索処理は、リクエストのたびに十分な費用対効果を生む。
  • 検索が長大なコンテキストに取って代わられないのは、長大なコンテキストでは実現できない3つの特性、すなわち出典提示、情報の鮮度、ユーザー単位のアクセス制御があるためだ。
  • 現時点で最も有力なアーキテクチャは二者択一ではない。まず検索で対象を絞り込み、そのうえで絞り込んだ集合について十分なコンテキストをモデルに与える。
  • 適切な文書がそもそも取得されなかったために回答が誤っているのなら、モデルの評価は別のコンポーネントを測っていることになる。

コンテキストウィンドウが桁違いに拡大するたびに、決まって同じ主張が流布する。検索(リトリーバル)はウィンドウが小さかった時代の苦肉の策であり、今やウィンドウは巨大になったのだから、検索はもう不要だ、という主張である。文書をすべてプロンプトに放り込み、あとはモデルに任せればよいというわけだ。

この主張はあながち的外れではない。コードベース全体、一年分のメール、あるいは契約書の山を丸ごと一つのリクエストに収めることが、今や実際に可能になっている。それでも多くの本番システムが検索を使い続けているのは、単なる惰性ではない。「容量」と「利用」はまったく別物であることに加え、検索が持つ三つの特性がそもそもウィンドウのサイズとは無関係だからだ。

容量は利用ではない

100万トークンを受け付けるモデルは、確かに100万トークンを受け付ける。しかし、それを均等に使うかどうかはまったく別の実証的な問題であり、この現象が初めて特徴づけられて以来、答えは一貫している。長い入力の冒頭と末尾で想起精度が最も高く、中間部で最も低くなるのだ。

これが実務にもたらす帰結は、あまり心地よいものではない。文書がプロンプトのどこに位置するかは、その文書がどれほど関連性が高いかとは無関係に、モデルがそれを実際に使うかどうかを左右するのだ。50個の文書を無作為な順序で連結するシステムは、誰も監視していない品質変数を紛れ込ませていることになり、その変数は連結順序が変わるたびに揺れ動く。

よく持ち出される安心材料は「干し草の山の中の針」テストの結果である。巨大なウィンドウの中に特徴的な一文を仕込み、それが確実に見つかるというものだ。だが、このテストは見た目よりもずっと易しい。特異な文字列を一つ見つけ出すのは、語彙的なマッチングの作業にすぎない。実際の問いは、複数のパッセージを横断して情報を集約したり、二つの箇所が食い違っていることに気づいたり、答えがそもそも存在しないと判断したりすることを要求する。そうしたより厳しい形式で構築されたベンチマークは、一貫して、実効的な作業コンテキストが公称容量をはるかに下回ることを示している。

誰もやりたがらない算数

コストとレイテンシは、送信を許可されている量ではなく、実際に送信する量に比例して増える。

20万トークン規模のナレッジベースを相手に、1日1万件の質問をさばくサポートアシスタントを考えてみよう。毎回のリクエストにナレッジベース全体を詰め込めば、1日あたり20億入力トークンになる。現行のフロンティアモデルのどの価格帯であっても、これは無視できない予算項目として目に留まるだろう。一方、質問ごとに関連する4000トークンだけを検索して渡せば、1日あたり4000万トークンで済む。つまり50倍の差が、すべてのリクエストに対して、永続的に生じ続けるということだ。

レイテンシも同じ曲線を描く。最初のトークンが出るまでの時間は入力の長さに応じて伸び、回答が900ミリ秒で表示され始めるサポートウィジェットと、8秒かかるそれとでは、回答の質にかかわらず、まったく別の製品になってしまう。

プロンプトキャッシュはこの計算を複雑にするが、それは正確に記しておく価値がある。というのも、これは「詰め込み派」にとって最も強力な論拠だからだ。大きなプレフィックスが多数のリクエストにわたって同一であれば、キャッシュによってそのコストを大幅に、レイテンシも大きく削減できる。コーパスが本当に共有され、かつ安定している場合──固定の製品マニュアルや固定の法令集のような場合──であれば、この計算は変わってくるし、実際にはまだ十分に活用されていない手法でもある。しかしキャッシュは、大量のコンテンツがユーザーごと、リクエストごとに異なる場合には何の効果ももたらさない。そしてこれこそが、ユーザーごとに見せる文書が異なることそのものが要件であることの多い、大半のエンタープライズ導入の実態なのだ。

検索にあってコンテキストにない三つの特性

ウィンドウが大きくなっても揺るがない論点はここにある。

出典の明示性。 検索によって取り出されたパッセージには、モデルがそれを目にする前から、文書ID、URL、ページ、改訂版といった固有の識別情報が備わっている。モデルがそれを引用すれば、その引用は機械的に検証可能だ。一方、ウィンドウに放り込まれただけのテキストにはそうした識別情報がなく、未分化の塊から引用させようとすれば、検証が難しく、捏造もしやすい参照が生まれる。誤った回答であっても出典まで遡れる必要があるアプリケーション──法務、医療、金融、コンプライアンス──では、この一点だけで設計方針が決まってしまう。

鮮度。 コーパスは変化する。検索インデックスは新しい行を書き込むだけで更新できるが、詰め込み型のプロンプトはペイロード全体を再構築し、送り直すことで更新するしかない。ナレッジベースが1時間ごとに変わるような環境では、前者はバックグラウンドジョブで済むが、後者はリクエストのたびに課される税金のようなものになる。

アクセス制御。 これこそが、多くのエンタープライズアーキテクチャの選択を静かに決定づけている要因である。ユーザーごとに閲覧を許される文書は異なる。検索システムでは、権限はクエリの時点で──テキストがモデルに到達するより前に──適用されるフィルターであり、ごく普通の、監査可能な認可境界として機能する。一方、詰め込み型のシステムでは、権限の判断をペイロードの組み立て時に行わなければならず、そこでひとつでも誤りがあれば、あるユーザーの機密文書が別のユーザーのプロンプトの中に紛れ込むことになる。いったんウィンドウに入ってしまえば、下流のどんな制御をもってしても、それを「見なかったこと」にはできない。

ロングコンテキストが本当に優れている領域

その裏返しの誤りは、検索が常に勝ると結論づけてしまうことだ。大きなウィンドウは、特定の、しかも増えつつあるタスク群において、明確に優れている。

成果物全体を対象とする推論。 契約書全体を要約する、コードベース全体を横断してバグを追跡する、長大な二つの文書を条項ごとに突き合わせる、といったタスクである。こうしたタスクが依拠する構造は、チャンク分割によって積極的に破壊されてしまう。問いが「全体の形」に関するものであるなら、検索が返してくるのは、本来は無傷のまま必要だった論旨の断片にすぎない。

エージェントの作業記憶。 あるタスクの40ステップ目に差し掛かったエージェントは、それまでの経緯──ツールの出力、途中の推論、読み込んだファイル──を自ら抱えている。これはセッション内で積み上がったコンテキストであり、どんな検索インデックスにもそれは存在しない。ウィンドウが大きくなれば、それだけ、エージェントが以前の判断を圧縮せずに作業を続けられる時間が直接的に延びる。

低頻度・高リスクの読み取り。 タスクが1日に数十回程度しか実行されず、しかも1回あたりのコストよりも正確さの方がはるかに重要である場合、すべてをプロンプトに放り込むというシンプルさには、その対価を払うだけの価値がある。あらゆるシステムがインデックスを必要とするわけではない。

実際に機能するアーキテクチャ

これを二者択一として語るのは誤った二分法である。現時点で最も有力なパターンは、両者を順に組み合わせて使うものだ。

広く検索し、たっぷり読ませる。 検索を使って大きなコーパスを候補集合まで絞り込む──ただし、旧来のシステムなら500トークンのチャンクを3つ渡していたところを、丸ごとの文書を20件渡す。検索には検索が得意な仕事、すなわちアクセス制御を効かせつつ出典を保ったまま選別を行うという仕事をさせる。ロングコンテキストにはロングコンテキストが得意な仕事、すなわち人為的な断片化なしに素材全体を推論させるという仕事をさせるのだ。

これは、多くの旧来のRAGコードに埋め込まれた前提──ウィンドウが希少だからチャンクは小さくすべきだ、という前提──を反転させる発想である。もはやウィンドウは希少ではない。チャンク分割は、ウィンドウの予算ではなく検索品質のために行うべきだ。マッチングの精度が上がる粒度で検索を行い、ヒットした箇所はプロンプトに渡す前に、それぞれ完全なセクションないし文書全体まで展開する。

加えて、以前よりも重要性を増している二つの小さな実践がある。意図的に順序を組むことだ。位置による効果を踏まえれば、スコアの高いパッセージは組み立てたコンテキストの中央ではなく端に配置すべきである。そしてすべてのパッセージに出典IDのラベルを付すことだ。プロンプト中でそうしておけば、引用はモデルの善意に頼るものではなく、機械的なものであり続けられる。

正しいコンポーネントを評価する

ここで無駄な労力の大半を防いでくれる、ひとつの診断習慣がある。回答が誤っていた場合、まず必要な文書がそもそもコンテキストに含まれていたかどうかを確認することだ。

含まれていなかったのであれば、失敗したのは検索の段階であり、モデルをどう変えても解決しない。含まれていたにもかかわらずモデルが誤ったのであれば、それは生成の問題であり、ここで初めてウィンドウサイズや順序、プロンプト構造といった論点が関係してくる。エンドツーエンドの品質だけを計測しているシステムでは、この二つを区別できない。そうしたシステムを運用するチームは、壊れたインデックスを直すために、何カ月もかけてモデルを取り替え続ける羽目になりがちだ。

要約すればこうなる。ロングコンテキストは、検索を必須にしていた制約を取り払った。しかし検索を必要とする他のあらゆる理由は、そのまま手つかずで残された。 大半の本番システムは今後も両方を使い続けるだろう。興味深い設計上の課題は、もはや検索するかどうかではなく、検索した後で、どれだけの量をモデルに渡すかへと移っている。

よくある質問

「lost in the middle(中間部の情報喪失)」とは何か?
長い入力の冒頭や末尾に置かれた情報は、中ほどに置かれた情報よりもモデルが確実に想起しやすいという、実際に観察されている傾向を指す。つまり、関連性とは無関係に、プロンプト内での文書の位置が、モデルがその文書を利用するかどうかに影響する。
長いウィンドウを信頼するには、干し草の中の針を探すテストだけで十分か?
十分ではない。意図的に挿入された特徴的な一文を見つける作業は、同じウィンドウ内に散在する多数の文章を集約、比較、推論する作業よりはるかに容易だ。実際の質問で求められるのは後者である。
文書全体を詰め込むのが適切なのはどのような場合か?
コーパスが小規模で安定している場合、質問に答えるうえで文書全体が本当に必要な場合、そしてリクエスト単位のコストが問題にならないほど処理量が少ない場合だ。契約書のレビュー、単一コードベースの分析、一度限りの精読などが該当する。
プロンプトキャッシュを使えば、コスト面の問題はなくなるか?
多くのリクエストで再利用される固定的なプレフィックスについては、コストを大幅に削減できる。これは実効性があるにもかかわらず、十分に活用されていない最適化だ。しかし、大容量のコンテンツがユーザーやリクエストごとに異なる場合には役立たず、精度や出典明示の問題も解決しない。
検索を使わずに引用元を示すにはどうすればよいか?
その場合、出典提示の信頼性は大きく低下する。ウィンドウ内にあるラベルの付いていない大量のテキストから出典を示すようモデルに求めても、機械的な検証が難しい参照情報しか得られない。検索では、モデルが文章を見る前に各文章に識別情報が付与されるため、出典を検証できる。

出典

  1. Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks — arXiv
  2. Lost in the Middle: How Language Models Use Long Contexts — arXiv
  3. RULER: What's the Real Context Size of Your Long-Context Language Models? — arXiv
  4. MTEB: Massive Text Embedding Benchmark — arXiv
タグRAGlong contextretrievalembeddingsarchitecturecost

あわせて読みたい

ファインチューニング、検索、それともプロンプト改善か:選び方

まず失敗の原因を診断する。モデルが何かを知らないのであれば、それは知識の不足であり、検索によって解決できる。モデルは知っているのに、構成や口調、形式が不適切なら、それは振る舞いの問題であり、まずプロンプトで、それでも足りなければファインチューニングで対処する。その両方を試しても専門的な技能を発揮できない場合、残る選択肢がファインチューニングだ。プロンプトは最も安価で元に戻しやすく、事実を扱うなら検索が標準的な選択肢となる。ファインチューニングは3つの中で最も高価で、最も元に戻しにくい。

約7分

RAG(検索拡張生成)とは何か、いつ必要か

検索拡張生成とは、質問に関連する箇所を自社の文書から探し出し、それをモデルのプロンプトに入れて、その内容にもとづいて答えさせる方式である。モデルの重みは変わらない。知識はリクエスト時にコンテキストとして届く。

約4分

コンテキストウィンドウとは何か、そしてなぜ枯渇してしまうのか?

コンテキストウィンドウは、モデルが一度のリクエストで考慮できるテキストの最大量(トークン数で測定)です。システム指示、これまでの会話、貼り付けたドキュメント、生成中の回答を含みます。合計が制限を超えると、何かを削除したり要約したりしなければなりません。

約5分