Anthropicが文脈検索を発表:RAGの検索失敗率を最大67%削減
AnthropicはRAGの精度を大幅に改善するContextual Retrievalを発表した。文書チャンクに文脈情報を自動付与することで情報の欠落を防ぎ、BM25やリランキングと併用して検索失敗率を最大67%削減する。プロンプトキャッシュにより100万トークンあたり1.02ドルで処理可能だ。

RAG(検索拡張生成)を構築したことがある人なら、チャンク分割によって文脈が消滅する問題に一度は頭を抱えたことがあるはずです。決算資料を数百トークンの断片に刻んだ結果、「売上高が前期比で3%増加した」という文だけがヒットし、どの企業のどの四半期の話なのかモデルが判断できなくなる現象です。
Anthropicは9月19日、この課題を解決する「Contextual Retrieval(文脈的検索)」と呼ばれる手法を公開しました。仕組みは非常に明快で、各テキストチャンクをベクトル化したりインデックスに登録したりする前に、ドキュメント全体を踏まえた50〜100トークンの補足をチャンクの先頭に付与します。
小さなモデルで各断片に自己紹介を添える
従来のRAGでは、文書を細切れにすることで効率的な検索を実現していましたが、個々のチャンクは前後の文脈を失っていました。Anthropicは軽量なClaude 3 Haikuを使い、元の文書全体を参照しながら、そのチャンクが何を指しているのかを説明する短いテキストを自動生成させます。
主語の抜けた売上データの前には、「ACME社の2023年第2四半期決算資料より」といった説明が付け加えられます。この補足を含んだ状態で、ベクトル埋め込み(Contextual Embeddings)と語彙検索のBM25(Contextual BM25)の両方のインデックスを作成します。
あえて古典的なBM25を併用している点も実用的です。ベクトル検索は意味の類似性を捉えるのが得意な反面、「TS-999」のような特定のエラーコードや型番の完全一致を見逃しがちです。BM25がピンポイントの文字列を拾い、ベクトル検索が文脈のニュアンスを補完します。
コードベースや論文、小説などを用いた同社の検証によると、文脈付きベクトル埋め込みだけで上位20件の検索失敗率が35%減少しました。さらに文脈付きBM25を組み合わせると失敗率は49%減少し、リランキングまで適用すると67%の削減を達成したとしています。
プロンプトキャッシュで前処理コストを抑制
何千、何万というチャンクすべてにLLMで説明文を付与するのは、通常なら膨大なAPIコストがかかります。Anthropicがこのアプローチを実用化できた背景には、最近リリースされたプロンプトキャッシュ機能の存在があります。
チャンクごとに親ドキュメント全体を何度も課金して送信する代わりに、文書を一度キャッシュに読み込ませて再利用します。8000トークンの文書を800トークンのチャンクに分割する場合、100万文書トークンあたり約1.02ドルのワンタイム費用で前処理が完了します。
なお、ナレッジベース全体が20万トークン(約500ページ相当)未満であれば、そもそもRAGを組む必要すらなく、プロンプトキャッシュを使って文書全体をコンテキストに含めるだけで十分だとAnthropicは補足しています。これだけでレイテンシは2倍以上高速化し、コストは最大90%削減されます。
なぜ重要か
社内文書検索や顧客対応ボットを開発している現場にとって、この手法はすぐに試す価値がある現実的な改善策です。RAGの精度が伸び悩む最大の原因である「切り出しによる主語消失」を、100万トークンあたりわずか1ドル強の初期費用で半減できる費用対効果の高さは圧倒的です。
業界全体で見ても、過度に複雑化したRAGアーキテクチャに対する見事な回答といえます。ここ1年ほど、失われた文脈を補うためにGraphRAGや再帰的分割、自律型検索エージェントなど重厚な仕組みが流行していましたが、Anthropicは前処理段階で安価な小型モデルを使い、古典的なBM25と掛け合わせるだけで大きな成果を出しました。
私たちは、この手法が非常に現実的でスマートな着眼点に基づいていると考えます。一方で、リアルタイムにデータが追加・更新される動的なナレッジベースにおいては、更新のたびに文脈付与の処理を走らせる必要があり、キャッシュ管理や運用の複雑さがどの程度跳ね上がるかについては慎重に見極める必要があります。
情報源 (1)
- anthropic.com(新しいタブで開きます)原文anthropic.com