?素晴らしい検索拡張生成 (RAG)
このリポジトリには、厳選された Awesome List と、Generative AI の検索拡張生成 (RAG) アプリケーションに関する一般情報が含まれています。
取得拡張生成 (RAG) は、外部ソースから追加のコンテキストを取得して大規模言語モデル (LLM) の生成プロセスを強化する生成 AI の手法です。このアプローチにより、LLM は事前トレーニング データだけでは不足している可能性がある最新の特定の情報や機密情報を組み込むことができます。
コンテンツ
- RAG に関する一般情報
- アプローチ
- ? RAG を促進するフレームワーク
- テクニック
- メトリクス
- ?データベース
RAG に関する一般情報
従来の RAG アプローチでは、基本的なフレームワークを使用して、LLM プロンプトのコンテキストを強化するドキュメントを取得します。たとえば、住宅を改修するための資材について問い合わせる場合、LLM は改修に関する一般的な知識を持っているかもしれませんが、特定の住宅に関する具体的な詳細は持っていません。 RAG アーキテクチャを実装すると、ブループリントなどの関連ドキュメントを迅速に検索して取得し、よりカスタマイズされた応答を提供できるようになります。これにより、LLM は改修ニーズに特定の情報を確実に組み込むことができ、応答の精度が向上します。
一般的な RAG 実装は、次の主要な手順に従います。
- ナレッジ ベースを分割する:ドキュメント コーパスを、より小さく管理しやすいチャンクに分割します。
- 埋め込みの作成:埋め込みモデルを適用して、これらのテキスト チャンクをベクトル埋め込みに変換し、意味論的な意味をキャプチャします。
- ベクトル データベースに保存:エンベディングをベクトル データベースに保存し、意味的な類似性に基づいて高速に検索できるようにします。
- ユーザー クエリの処理:テキスト チャンクに適用されたものと同じモデルを使用して、ユーザーのクエリを埋め込みに変換します。
- 関連データの取得:意味的な類似性に基づいて、クエリの埋め込みによく一致する埋め込みをベクトル データベースで検索します。
- プロンプトを強化する:最も関連性の高いテキスト チャンクを LLM のプロンプトに組み込み、応答を生成するための貴重なコンテキストを提供します。
- 応答の生成: LLM は拡張プロンプトを利用して、ユーザーのクエリに合わせた正確な応答を提供します。
アプローチ
RAG 実装の複雑さは、単純なドキュメント検索から、反復フィードバック ループとドメイン固有の拡張機能を統合する高度な技術までさまざまです。アプローチには次のものが含まれます。
- Corrective RAG (CRAG): LLM 応答に統合する前に、取得した情報を修正または改良する方法。
- Retrieval-Augmented Fine-Tuning (RAFT): 強化された検索および生成タスクに特化して LLM を微調整する手法。
- Self Reflective RAG: モデルのパフォーマンスのフィードバックに基づいて取得戦略を動的に調整するモデル。
- RAG Fusion: コンテキスト統合を改善するために複数の取得方法を組み合わせた技術。
- 時間拡張検索 (TAR): 検索プロセスにおいて時間に敏感なデータを考慮します。
- Plan-then-RAG (PlanRAG): 複雑なタスクに対して RAG を実行する前の計画段階を含む戦略。
- GraphRAG: コンテキストの統合と推論を強化するためのナレッジ グラフを使用した構造化アプローチ。
- FLARE - 応答品質を向上させるためにアクティブな検索拡張生成を組み込んだアプローチ。
- コンテキスト検索 - 検索前にドキュメントのチャンクに関連するコンテキストを追加することで検索を改善し、大規模なナレッジ ベースから取得される情報の関連性を高めます。
? RAG を促進するフレームワーク
- Haystack - カスタマイズ可能で本番環境に対応した LLM アプリケーションを構築するための LLM オーケストレーション フレームワーク。
- LangChain - LLM を操作するための多目的フレームワーク。
- Semantic Kernel - Generative AI アプリケーションを開発するための Microsoft の SDK。
- LlamaIndex - カスタム データ ソースを LLM に接続するためのフレームワーク。
- Cognita - モジュール式で本番環境に対応したアプリケーションを構築するためのオープンソース RAG フレームワーク。
- Verba - すぐに使える RAG 用のオープンソース アプリケーション。
- Mastra - AI アプリケーションを構築するための Typescript フレームワーク。
テクニック
データクリーニング
- データ クリーニング手法: 入力データを調整し、モデルのパフォーマンスを向上させるための前処理ステップ。
プロンプト
- 戦略
- タグ付けとラベル付け: 取得したデータにセマンティック タグまたはラベルを追加して、関連性を高めます。
- 理由とアクション (ReAct) (ReAct): 取得されたコンテキストに基づいて LLM 応答をガイドするための推論機能の統合。
- 思考連鎖 (CoT): 答えを提供する前に、モデルが問題を段階的に検討することを奨励します。
- Chain of Verification (CoVe): 推論の各ステップの精度を検証するようモデルに促します。
- 自己一貫性: 複数の推論パスを生成し、最も一貫した答えを選択します。
- ゼロショット プロンプト: サンプルを使用せずにモデルをガイドするプロンプトを設計します。
- 少数ショット プロンプト: プロンプトでいくつかの例を提供し、必要な応答形式を示します。
- キャッシング
- プロンプト キャッシュ: 事前に計算されたアテンション状態を保存および再利用することで、LLM を最適化します。
チャンク化
- 固定サイズのチャンク化
- 効率的に処理するために、テキストを一定のサイズのセグメントに分割します。
- サイズと重なりに基づいてテキストをチャンクに分割します。
- 例: 文字ごとに分割 (LangChain)。
- 例: SentenceSplitter (LlamaIndex)。
- 再帰的なチャンク化
- 複雑な文書構造に対する再帰アルゴリズムを使用した階層的セグメンテーション。
- 例: 文字ごとに再帰的に分割 (LangChain)。
- ドキュメントベースのチャンク化
- メタデータに基づいてドキュメントをセグメント化するか、ターゲットを絞った分析のためのキューをフォーマットします。
- 例: MarkdownHeaderTextSplitter (LangChain)。
- 例: OpenCLIP などのモデルを使用して画像とテキストの埋め込みを処理します。
- セマンティックチャンキング
- 任意の境界ではなく意味上の関連性に基づいて意味のあるセクションを抽出します。
- エージェントのチャンク化
- LLM がセグメンテーションをガイドする対話型チャンク方式。
埋め込み
- 埋め込みモデルの選択
- MTEB Leaderboard : モデルの埋め込みを評価するための Hugging Face のベンチマークを調査します。
- カスタム埋め込み: 特定のドメインまたはタスクに合わせて調整された埋め込みを開発して、モデルのパフォーマンスを向上させます。カスタム埋め込みにより、ドメイン固有の用語やニュアンスを捉えることができます。手法には、独自のデータセットで事前トレーニングされたモデルを微調整したり、TensorFlow や PyTorch などのフレームワークを使用して埋め込みを最初からトレーニングしたりすることが含まれます。
検索
- 検索方法
- ベクトル ストア フラット インデックス
- シンプルで効率的な検索形式。
- コンテンツはベクトル化され、フラット コンテンツ ベクトルとして保存されます。
- 階層型インデックスの取得
- データをさまざまなレベルに階層的に絞り込みます。
- 階層順に検索を実行します。
- 仮定の質問
- データベース チャンクとクエリ間の類似性を高めるために使用されます (HyDE と同じ)。
- LLM は、テキスト チャンクごとに特定の質問を生成するために使用されます。
- これらの質問をベクトル埋め込みに変換します。
- 検索中に、クエリを質問ベクトルのこのインデックスと照合します。
- 仮説的なドキュメントの埋め込み (HyDE)
- データベース チャンクとクエリ間の類似性を高めるために使用されます (仮説の質問と同じ)。
- LLM は、クエリに基づいて仮説的な応答を生成するために使用されます。
- この応答をベクトル埋め込みに変換します。
- クエリ ベクトルと仮想応答ベクトルを比較します。
- 小規模から大規模までの検索
- 検索には小さいチャンクを使用し、コンテキストには大きいチャンクを使用することで、検索が向上します。
- より小さな子チャンクはより大きな親チャンクを参照します
- 再ランキング: 最初に取得したドキュメントを並べ替え、クエリに意味的に最も関連性の高いドキュメントを優先することで、RAG パイプラインの検索結果を強化します。
メトリクス
検索指標
これらのメトリクスは、埋め込み間の類似性を測定するために使用されます。これは、RAG システムが外部ドキュメントまたはデータ ソースをどのように効果的に取得して統合するかを評価するために重要です。適切な類似性メトリックを選択することで、RAG システムのパフォーマンスと精度を最適化できます。あるいは、特定のドメインまたはニッチに合わせたカスタム指標を開発して、ドメイン固有のニュアンスを捉え、関連性を向上させることもできます。
コサイン類似度
- 多次元空間内の 2 つのベクトル間の角度の余弦を測定します。
- ベクトルの方向が意味情報を表すテキスト埋め込みを比較する場合に非常に効果的です。
- RAG システムで、クエリの埋め込みとドキュメントの埋め込みの間の意味的な類似性を測定するために一般的に使用されます。
内積
- 2 つの数値シーケンスの対応するエントリの積の合計を計算します。
- ベクトルを正規化した場合のコサイン類似度に相当します。
- シンプルで効率的で、大規模な計算のハードウェア アクセラレーションと併用されることがよくあります。
ユークリッド距離
- ユークリッド空間内の 2 点間の直線距離を計算します。
- 埋め込みで使用できますが、「次元の呪い」により高次元空間では有効性が失われる可能性があります。
- 次元削減後の K 平均法などのクラスタリング アルゴリズムでよく使用されます。
ジャカードの類似性
- 2 つの有限セット間の類似性を、交差部分のサイズをセットの和集合のサイズで割った値として測定します。
- バッグオブワード モデルや N グラム比較など、トークンのセットを比較する場合に便利です。
- LLM によって生成される連続的な埋め込みにはあまり適用できません。
注:コサイン類似度とドット積は、一般に、高次元埋め込み間の類似性を測定するための最も効果的なメトリックとみなされます。
応答評価指標
これらのメトリクスは、RAG システムから生成された回答の品質と関連性を評価し、その回答がどれほど正確で、文脈的に適切で、信頼できるかを評価します。これらの評価指標を適用することで、システムのパフォーマンスを洞察し、改善の余地がある領域を特定できます。
- 自動ベンチマーク
- 裁判官としての人間
- 審査員としてのモデルたち
ツール
これらのツールは、ユーザー フィードバックの追跡からクエリ インタラクションのログ記録、複数の評価メトリクスの長期比較まで、RAG システムのパフォーマンスの評価に役立ちます。
- LangFuse : LLM メトリクス、可観測性、およびプロンプト管理を追跡するためのオープンソース ツール。
- Ragas : RAG パイプラインの評価を支援するフレームワーク。
- LangSmith : 運用グレードの LLM アプリケーションを構築するためのプラットフォームで、アプリケーションを厳密に監視して評価できます。
- Hugging Face Evaluate : BLEU や ROUGE などのメトリクスを計算してテキストの品質を評価するツール。
- 重みとバイアス: 実験を追跡し、メトリクスを記録し、パフォーマンスを視覚化します。
?データベース
以下のリストは、検索拡張生成 (RAG) アプリケーションに適したいくつかのデータベース システムを示しています。これらは幅広い RAG ユースケースをカバーしており、応答や推奨事項を生成するためのベクターの効率的な保存と取得を支援します。
ベンチマーク
分散データ処理および提供エンジン:
- Apache Cassandra: 分散型 NoSQL データベース管理システム。
- MongoDB Atlas: ベクトル検索が統合された、グローバルに分散されたマルチモデル データベース サービス。
- Vespa: リアルタイム アプリケーション用に設計されたオープンソースのビッグ データ処理および提供エンジン。
ベクトル機能を備えた検索エンジン:
- Elasticsearch: 従来の検索機能に加えてベクトル検索機能を提供します。
- OpenSearch: Elasticsearch から分岐した分散検索および分析エンジン。
ベクトルデータベース:
- Chroma DB: AI ネイティブのオープンソース埋め込みデータベース。
- Milvus: AI を活用したアプリケーション用のオープンソースのベクトル データベース。
- Pinecone: 機械学習ワークフロー用に最適化されたサーバーレス ベクトル データベース。
- Oracle AI Vector Search: ベクトル埋め込みに基づくセマンティック問合せのために、Oracle Database内にベクトル検索機能を統合します。
リレーショナル データベース拡張機能:
- Pgvector: PostgreSQL のベクトル類似性検索のためのオープンソース拡張機能。
その他のデータベース システム:
- Azure Cosmos DB: 統合されたベクトル検索を備えた、グローバルに分散されたマルチモデル データベース サービス。
- Couchbase: 分散型 NoSQL クラウド データベース。
- Lantern: プライバシーを意識した個人用検索エンジン。
- LlamaIndex: 迅速な実験のために、簡単なメモリ内ベクトル ストアを採用しています。
- Neo4j: グラフ データベース管理システム。
- Qdrant: 類似性検索用に設計されたオープンソースのベクトル データベース。
- Redis スタック: データベース、キャッシュ、メッセージ ブローカーとして使用されるメモリ内のデータ構造ストア。
- SurrealDB: 時系列データ用に最適化されたスケーラブルなマルチモデル データベース。
- Weaviate: オープンソースのクラウドネイティブなベクター検索エンジン。
ベクトル検索ライブラリとツール:
- FAISS: 効率的な類似性検索と高密度ベクトルのクラスタリングのためのライブラリ。大規模なデータセットを処理するように設計され、最近傍の高速検索用に最適化されています。