- AIモデルが特定のコンテキストで有用であるためには、背景知識にアクセスする必要がある
- 開発者は一般的に Retrieval-Augmented Generation(RAG)を使ってAIモデルの知識を強化する
- 従来のRAGソリューションでは、情報をエンコードする際にコンテキストが取り除かれるため、関連情報を検索できないことが多い
- Contextual Retrievalは、RAGの検索段階を大幅に改善する方法であり、Contextual EmbeddingsとContextual BM25という2つの下位技術を使用する
- この方法は検索失敗率を49%低減でき、再ランキングと組み合わせると67%まで低減できる
- 開発者はClaudeとともに独自のContextual Retrievalソリューションを簡単にデプロイできる
長いプロンプト使用に関する参考事項
- ナレッジベースが200,000トークン未満であれば、ナレッジベース全体をモデルに渡すプロンプトに含めることができる
- 最近Claudeでプロンプトキャッシングがリリースされ、このアプローチははるかに高速かつ費用対効果の高いものになった
- Knowledge Baseが大きくなると、よりスケーラブルなソリューションが必要になり、その際にContextual Retrievalが必要となる
RAGの基本: 大規模ナレッジベースへの拡張
- コンテキストウィンドウに収まらない、より大きなナレッジベースに対する一般的なソリューションはRAGである
- RAGはナレッジベースをより小さなチャンクに分解し、それをベクトル埋め込みに変換したうえで、意味的類似性によって検索できるベクトルデータベースに保存する
- 埋め込みモデルは意味的関係を捉えることに優れる一方で、重要な完全一致を見逃すことがある
- BM25は正確な単語または語句の一致を見つけるために語彙マッチングを用いるランキング関数であり、一意の識別子や技術用語を含むクエリに特に効果的である
- RAGソリューションは、埋め込みとBM25技術を組み合わせるために次の手順を使用し、最も適用可能なチャンクをより正確に検索できる:
- ナレッジベース(文書の「コーパス」)を、通常は数百トークン以下のより小さなテキストチャンクに分解する
- これらのチャンクに対するTF-IDFエンコーディングと意味的埋め込みを生成する
- BM25を使用して完全一致に基づく上位チャンクを見つける
- 埋め込みを使用して意味的類似性に基づく上位チャンクを見つける
- ランク融合技術を使用して (3) と (4) の結果を結合し、重複を除去する
- 上位K個のチャンクをプロンプトに追加して応答を生成する
Contextual Retrievalの導入
- 従来のRAGでは文書をより小さなチャンクに分割するため、個々のチャンクが十分な文脈を欠くことがある
- Contextual Retrievalは、各チャンクの前にチャンクごとの説明用コンテキストを追加することでこの問題を解決する
- Claudeは、文書全体の文脈を使ってチャンクを説明する簡潔なチャンク別コンテキストを提供するよう指示するプロンプトにより、Contextual Retrievalの実装を支援する
- Contextual Retrievalは、プロンプトキャッシングのおかげでClaudeとともに低コストで利用できる
性能改善
- Contextual Embeddingsは、上位20チャンクの検索失敗率を35%低減する(5.7% → 3.7%)
- Contextual EmbeddingsとContextual BM25を組み合わせると、失敗率が49%低減する(5.7% → 2.9%)
実装時の考慮事項
- 文書をどのようにチャンクへ分割するかを検討する
- Contextual Retrievalはすべての埋め込みモデルで性能を向上させるが、一部のモデルはより大きな恩恵を受ける可能性がある
- 一般的なプロンプトでも十分機能するが、特定のドメインやユースケースに合わせたプロンプトのほうがより良い結果を得られることがある
- コンテキストウィンドウにより多くのチャンクを追加すると、関連情報を含む可能性が高まる
- 常に評価を実行し、文脈化されたチャンクを渡してコンテキストとチャンクを区別することが、応答生成の改善につながる可能性がある
再ランキング(Reranking)による性能のさらなる向上
- 再ランキングは、最も関連性の高いチャンクだけがモデルに渡されるようにするための一般的に使われるフィルタリング技術である
- 初期検索を実行して、関連性が高い可能性のある上位チャンクを取得する
- 上位N個のチャンクとユーザークエリを再ランキングモデルに渡す
- 再ランキングモデルを使って、プロンプトとの関連性と重要性に基づいて各チャンクにスコアを付け、その後上位K個のチャンクを選択する
- 上位K個のチャンクをコンテキストとしてモデルに渡し、最終結果を生成する
- 再ランキングされたContextual EmbeddingとContextual BM25は、上位20チャンクの検索失敗率を67%低減する(5.7% → 1.9%)
- コストとレイテンシに関する考慮事項
- 再ランキングは、特に大量のチャンクを再ランキングする場合、レイテンシとコストに影響を与える可能性がある
- より高い性能のために多くのチャンクを再ランキングすることと、低いレイテンシとコストのために少ない数に抑えることの間にはトレードオフがある
結論
- 上で説明したすべての技術のさまざまな組み合わせ(埋め込みモデル、BM25の使用、コンテキスト検索の使用、再ランキングの使用、検索された上位K件の総数)を比較する多数のテストを、さまざまなデータセットタイプにわたって実施した
- その結果は次のとおり:
- 埋め込み+BM25は埋め込み単体より優れている
- テストした埋め込みの中ではVoyageとGeminiが最も良い
- 上位20チャンクをモデルに渡すほうが、上位10個や5個だけを渡すよりも効果的である
- チャンクにコンテキストを追加すると、検索精度が大幅に向上する
- 再ランキングありのほうが、再ランキングなしより優れている
- これらすべての利点は累積する: 性能向上を最大化するには、コンテキストBM25と再ランキング段階を経たコンテキスト埋め込み(VoyageまたはGeminiのもの)を組み合わせ、20個のチャンクをプロンプトに追加できる
- Knowledge Baseを扱うすべての開発者に対し、提供されたクックブックを使ってこのアプローチを試し、新たな性能レベルを達成することを推奨する
まだコメントはありません。