はじめに
クエリの最適化技術は、ユーザーの問いかけをより効果的に検索エンジンへ渡す方法を提供します。これには、クエリの分解、拡張、構造化などの技術が含まれます。
本記事では、RAGの応答精度を高めるための技術の選択について整理を目指します。
関連用語まとめ
用語 | 説明 |
---|---|
検索クエリ | ユーザーからの入力を検索エンジンが解釈するための文字列や命令 |
クエリ構造化 | ユーザーの入力から特定の検索・フィルタリング属性を推測する技術 |
クエリ分解 | 複数の質問を含む入力を、個別のクエリに分割する技術 |
クエリ拡張 | クエリの表現を変えることで、関連する結果の取得確率を高める技術 |
クエリルーティング | 複数のインデックスから、関連性の高いものにクエリを送る技術 |
ステップバックプロンプト | より抽象的な質問を生成して、検索の質を向上させる技術 |
クエリ分析 (Query analysis)
クエリ分析は、検索クエリの最適化に役立ちます。以下のようなケースに有効です
- データの特定のフィールドに対して検索やフィルタをサポートするリトリーバーを使用する場合
- ユーザー入力に複数の異なる質問が含まれている場合
- 関連情報を取得するために複数のクエリが必要な場合
- 検索品質が表現方法に敏感な場合
- 複数のリトリーバーを検索する可能性があり、ユーザー入力がそれらのいずれかを指している可能性がある場合
問題 | アプローチ | クエリ例 |
---|---|---|
特定フィールドへのフィルタリング | ユーザーの質問からキーワードやフレーズを抽出し、特定のフィールドに関連付ける。 | 「Javaに関する記事」→ field:programming_language "Java"
|
複数の質問の分解 | ユーザー入力を個別のクエリに分解し、それぞれに対して検索を行う。 | 「JavaとPythonの最新トレンドは?」→ query1:"Java 最新トレンド", query2:"Python 最新トレンド"
|
複数クエリの使用 | 異なるキーワードやフレーズを使った複数のクエリを生成し、それぞれに対して検索を行う。 | 「機械学習の基本」→ query1:"機械学習 入門", query2:"機械学習 基本"
|
表現の最適化 | 検索クエリの言い回しを最適化する(同義語の使用、関連性の高いキーワードへの置き換えなど)。 | 「自動運転車」→ query:"自動運転車 OR 自動車 運転支援システム"
|
リトリーバーの選択 | ユーザー入力からリトリーバーごとの専門分野に関連するキーワードを識別し、適切なリトリーバーを選択する。 | 「金融市場の最新動向」→ retriever:financial_data "最新動向"
|
実装アプローチ
問題解決のアプローチ | 実装方法 |
---|---|
特定フィールドへのフィルタリング | 1. ユーザーの質問を解析して主要なキーワードを識別する 2. 識別されたキーワードを基に、検索すべき特定のフィールドを決定 3. SQLやElasticsearchのクエリ言語を使用して、選択したフィールドに対するフィルタを適用する |
複数の質問の分解 | 1. 自然言語処理技術を用いて、入力された質問を複数の質問に分解 2. 分解された各質問に対して独立した検索を行う 3. 各検索から得られた結果を集約し、ユーザーに提示 |
複数クエリの使用 | 1. 入力されたクエリの同義語や関連語を生成します。 2. 生成された各クエリを用いて検索を行います。 3. 各検索結果を統合して最終的な結果セットを作成します。 |
表現の最適化 | 1. クエリに含まれる主要なキーワードに対して同義語や類似の表現を検索 2. 元のクエリをこれらの同義語や類似表現を含む複数のクエリに拡張 3. 拡張されたクエリを使用して検索を行う |
リトリーバーの選択 | 1. ユーザーの質問からキーワードを抽出し、それらがどのドメインに属するかを分析 2. 分析結果に基づき、最も適切なリトリーバーを選択 3. 選択されたリトリーバーを用いて、クエリを実行し結果を取得 |