Anthropic Contextual Retrieval technique boosts RAG accuracy
TL;DR
Anthropicは、埋め込み(embeddings)とBM25インデックスを作成する前に、各ドキュメントチャンクに簡潔でチャンク固有のコンテキストを付加する手法であるContextual Retrievalを導入しました。これにより、コンテキスト付き埋め込み(contextual embeddings)のみでtop-20チャンクの検索失敗を**49%削減し、reranking(再ランキング)と組み合わせることで67%**削減することに成功しました。この手法は、Claudeおよび公開されているcookbookを通じて今日から利用可能です。大規模な知識ベースに対して、費用対効果の高い方法でRAG(Retrieval-Augmented Generation)を改善する手段を提供します。
Why traditional RAG loses context
従来のRAGは、コーパスを小さなチャンクに分割し、各チャンクを埋め込み、ベクトルデータベースで意味的な類似性を検索します。このアプローチでは、ドキュメントの周囲のコンテキストが破棄されることが多く、重要な識別子を欠いた曖昧なチャンク(例:会社名のない収益成長に関する一文)が生じます。コンテキストの喪失は、システムが不適切な、あるいは不完全な情報を取得してしまう原因となり、後続のモデルのパフォーマンスを低下させます。
Core idea: Contextual Retrieval
Contextual Retrievalは、埋め込みおよびBM25インデックスの構築前に、各チャンクに説明的なメタデータを付加することで、コンテキストの喪失問題を解決します。追加されるメタデータ(「contextualized chunk」)は、チャンクの出所(ドキュメントのタイトル、セクション、日付、またはその他の重要な詳細)を記述しますが、短く保たれます(≈50-100 tokens)。
Example transformation
original_chunk = "The company's revenue grew by 3% over the previous quarter."
contextualized_chunk = "This chunk is from an SEC filing on ACME Corp's performance in Q2 2023; the previous quarter's revenue was $314 million. The company's revenue grew by 3% over the previous quarter."
このcontextualized chunkは、その後、埋め込み(Contextual Embeddings)およびBM25(Contextual BM25)でインデックス化されます。
Implementation pipeline
- Chunk the corpus – ドキュメントを数百tokenの断片に分割します。
- Generate contextual metadata – Claude 3 Haikuを使用し、ドキュメント全体と対象のチャンクを受け取り、簡潔なコンテキスト文字列を返すプロンプトを使用します。
- Prepend context – 生成されたメタデータを元のチャンクに付加します。
- Create embeddings – contextualized chunkを埋め込みモデル(例:Gemini Text-004, Voyage)に供給します。
- Build BM25 index – 同一のcontextualized textをTF-IDFベースのBM25でインデックス化します。
- Runtime retrieval – ベクトルストアとBM25をクエリし、結果を統合、重複を排除し、上位Kチャンク(通常は20)を生成モデルに渡します。
- Optional reranking – 初期のtop-N(≈150)チャンクに対してreranker(例:Cohere)を実行し、最終的なプロンプティングのためのtop-Kを保持します。
Anthropicのブログ画像には、ステップ2-5の視覚的な概要が提供されています。
Quantitative impact
Anthropicは、Contextual Retrievalを複数のドメイン(コード、フィクション、ArXiv、科学論文)および埋め込みプロバイダーを対象に評価しました。主要な指標は1 – recall@20(top-20における関連チャンクの取りこぼし率)です。結果は以下の通りです:
| Configuration | Failure rate (1 – recall@20) | Relative improvement |
|---|---|---|
| Baseline embeddings only | 5.7 % | – |
| + Contextual Embeddings | 3.7 % | 35 % reduction |
| + Contextual Embeddings + Contextual BM25 | 2.9 % | 49 % reduction |
| + Reranking (Cohere) on top-150 → top-20 | 1.9 % | 67 % reduction |
すべてのテストされた埋め込みモデルが恩恵を受け、GeminiとVoyageが最も強力な絶対的な利得を得ました。
Cost-effective deployment with Claude prompt caching
Claudeのprompt cachingを使用すると、開発者はドキュメント全体を一度キャッシュにロードし、各チャンクのコンテキスト化ステップで再利用できます。800-tokenのチャンク、8k-tokenのドキュメント、50-tokenのコンテキスト生成プロンプト、およびチャンクあたり約100-tokenのコンテキストを想定した場合、一回あたりのコストはドキュメントの100万tokenあたり$1.02です。これにより、大規模なコンテキスト化は手頃な価格で行えます。
Practical considerations
- Chunk boundaries – 論理的な単位を維持できるサイズ、オーバーラップ、およびブレークポイントを選択してください。チャンクが小さすぎるとコンテキストが薄まり、大きすぎるとレイテンシが上昇します。
- Embedding model selection – Contextual Retrievalはすべてのモデルを向上させますが、Gemini Text-004とVoyageの埋め込みは、Anthropicのテストにおいて最も優れた絶対的なパフォーマンスを示しました。
- Custom prompts – Claudeのプロンプトを調整(例:ドメイン固有の用語集を追加する)ことで、コンテキストの関連性をさらに高めることができます。
- Number of retrieved chunks – 実験では、20チャンクが関連性とモデルの過負荷のバランスが取れた良好なバランスであることが示されました。開発者は、自身のユースケースに合わせてこのこの数値を数値化して検証してください。
- Reranking trade-offs – rerankerの追加は精度を向上させますが、レイテンシとコストが増なります。並列スコアリングによりレイテンシを軽減できますが、最適なrerank対象のtop-Nは、予算とレスポンスタイムの要件件要件によります。
When a simple longer prompt suffices
知識ベースが**< 200k tokens**(≈ 500ページ)の場合、Anthropicは、Claudeのprompt-cachingを活用してレイテンシを低く抑え、コストを削減(> 2× speedup, 最大90%のコスト削減)するために、コーパス全体をプロンプトに直接埋め込むことを推奨しています。Contextual Retrievalは、コーパスがこのサイズを超えた場合に使用するのが価値があります。
How to get started
Anthropicは、チャンキング、コンテキストメタデータの生成、から、埋め込み、BM25インデックス、およびオプションのrerankingまで、ワークフロー全体を自動化するステップバイステップのcookbookを提供しています。cookbookは以下から入手可能です:
https://platform.claude.com/cookbook/capabilities-contextual-embeddings-guide
Takeaway
評価されたすべての手法(embeddings + BM25, Contextual Retrieval, and reranking)は、相加的に積み重なります。フルスタック(Contextual Embeddings, Contextual BM25, Contextual Retrieval, reranking, and top-20 chunk selection)を導入することで、検索失敗の
Acknowledgements
Daniel Fordによる研究および執筆、Orowa Sikder, Gautam Mittal, and Kenneth Lienによる重要なフィードるバック, Samuel Flaminiによる実装サポート, Lauren Polanskyによるプロジェクト・コーディネーション, Alex Albert, Susan Payne, Stuart Ritchie, and Brad Abramsによる編集・構成。
Sources
関連
- Dispatch
- Dispatch
- Dispatch
- Dispatch
- Dispatch