Anthropic Contextual Retrieval: コンテキスト埋め込みとBM25によるRAG精度の向上
Contextual Retrievalは、検索プロセス中にドキュメントのコンテキストを保持することで、Retrieval-Augmented Generation(RAG)の精度を劇的に向上させます。
従来のRAGソリューションは、ドキュメントをチャンクに分割して埋め込みを作成する過程で重要なコンテキストが失われるため、関連情報を取得できないことがよくあります。Contextual Retrievalは、各チャンクを埋め込みまたはインデックス化する前に、チャンク固有の説明コンテキストを各チャンクに前置することでこの問題を解決します。
従来のRAGシステムの限界
Retrieval-Augmented Generation(RAG)は、ナレッジベースから関連情報を取得してユーザーのプロンプトに追加することで、AIモデルの知識を強化する標準的な方法です。しかし、従来のRAGシステムには、コンテキストの喪失と正確なマッチングの捕捉不能という2つの主な限界があります。
ドキュメントを効率的な検索のために小さなチャンクに分割すると、個々のチャンクには十分なコンテキストが欠如していることがよくあります。例えば、「同社の売上高は前期比3%増加した」というチャンクは、どの会社またはどの期間を指しているのかが不明であいまいです。
さらに、セマンティック埋め込みは広範な意味的関係の捕捉に優れていますが、重要な正確な一致を見逃す可能性があります。BM25(Best Matching 25)などの語彙マッチングを使用する技術は、「TS-999」のような正確なエラーコードなど、正確な単語やフレーズの一致を見つけるために必要です。
従来のRAGシステムは、TF-IDFエンコーディングとセマンティック埋め込みを作成し、BM25を正確な一致に使用し、その後ランク融合を使用して結果を組み合わせることで、これらの方法を組み合わせることができます。しかし、このアプローチは依然としてコンテキストの難題に悩まされています。
Contextual Retrieval: コンテキスト問題への解決策
Contextual Retrievalは、標準的なRAGに内在するコンテキスト損失に対処することで検索精度を向上させる前処理技術です。これは、Contextual EmbeddingsとContextual BM25という2つのサブ技術を通じて実現されます。
Contextual Embeddingsは、モデル(Claudeなど)にドキュメント全体に基づいて各チャンクの簡潔でチャンク固有の説明コンテキストを生成するように指示することで機能します。この結果得られるコンテキストテキスト(通常50〜100トークン)は、元のチャンクを埋め込みまたはインデックス化する前に前置されます。
この変換により、検索システムはチャンクの周囲のコンテキストを理解できるようになり、小さなチャンクでも取得時に意味を持つことが保証されます。
Contextual Retrievalのパフォーマンス向上
実験結果は、Contextual Retrievalがコードベース、フィクション、科学論文など、さまざまな知識領域で検索精度を大幅に向上させることを示しています。
- Contextual Embeddings 単独で、トップ20チャンクの検索失敗率を35%削減(5.7%から3.7%へ)。
- Contextual EmbeddingsとContextual BM25の組み合わせ により、トップ20チャンクの検索失敗率が49%削減(5.7%から2.9%へ)。
Contextual Retrievalは、Claudeのプロンプトキャッシング機能を使用すると、低コストで独自に展開できます。800トークンのチャンク、8kトークンのドキュメント、50トークンのコンテキスト指示、チャンクあたり100トークンのコンテキストを想定すると、コンテキスト化されたチャンクを生成するための一回限りのコストは、ドキュメント100万トークンあたり1.02ドルです。
リランキングによるパフォーマンスのさらなる向上
検索精度は、Contextual Retrievalをリランキングステップと組み合わせることでさらに最適化できます。リランキングは、最も関連性の高いチャンクのみが生成モデルに渡されることを保証するフィルタリング技術であり、コストとレイテンシを削減します。
このプロセスには以下が含まれます:
- 潜在的に関連する多数のチャンク(例:上位150件)の初期取得。
- これらのチャンクとユーザークエリをリランキングモデルに渡す。
- 関連性と重要性に基づいて各チャンクをスコアリング。
- 上位Kチャンク(例:上位20件)をコンテキストとして選択。
Reranked Contextual EmbeddingとContextual BM25を使用すると、上位20チャンクの取得失敗率は67%削減されます(5.7%から1.9%へ)。
実装に関する考慮事項
Contextual Retrievalを実装する開発者は、パフォーマンスを最大化するためにいくつかの要因を考慮する必要があります:
- チャンク境界: チャンクサイズ、チャンク境界、チャンクオーバーラップの選択は、検索パフォーマンスに大きく影響します。
- 埋め込みモデル: Contextual Retrievalはテストされたすべての埋め込みモデルでパフォーマンスを向上させますが、GeminiとVoyageの埋め込みが特に効果的であることがわかりました。
- カスタムコンテキスト化プロンプト: 汎用プロンプトが提供されていますが、特定のドメインやユースケースに合わせてプロンプトを調整すると(主要用語の用語集を含めるなど)、より良い結果が得られる可能性があります。
- チャンク数: チャンク数が多いほど関連情報が含まれる可能性が高まりますが、情報を追加しすぎるとモデルが混乱する可能性があります。テストでは、5、10、20チャンクの中で20チャンクを使用することが最もパフォーマンスが高いことが示されました。
まとめると、パフォーマンスを最大化するための最も効果的なアプローチは、コンテキスト埋め込み(VoyageまたはGemini)とコンテキストBM25を組み合わせ、その後に再ランキング手順を実行し、上位20チャンクをプロンプトに渡すことです。
SUMMARY: Anthropicは、Contextual EmbeddingsとContextual BM25を使用してRetrieval-Augmented Generation(RAG)システムの精度と信頼性を大幅に向上させる方法であるContextual Retrievalを発表しました。
TITLE: Anthropic Contextual Retrieval: コンテキスト埋め込みとBM25によるRAG精度の向上
Sources
- OriginalIntroducing Contextual Retrieval