なぜハイブリッド検索が必要なのか?

RAG検索プロセスの主な手法はベクトル検索で、これは意味的関連性に基づいたマッチング方法です。技術的には、外部のナレッジベースから文書を意味のある段落や文に分割し、それをコンピュータが理解できる形式に変換(埋め込み)します。そして、ユーザーの質問も同様の変換を行います。

コンピュータは、ユーザーの質問と文の微細な意味的関連性を見つけ出すことができます。例えば、「猫がネズミを追いかける」と「子猫がネズミを捕まえる」という文は、高い関連性を持っています。一方で、「猫がネズミを追いかける」と「私はハムを食べるのが好き」という文の関連性は低いです。関連性が最も高いテキストコンテンツを見つけた後、RAGシステムはそれをユーザーの質問のコンテキストとして大規模なモデルに渡し、モデルが質問に答えるのを助けます。

ベクトル検索には、複雑な意味を持つテキスト検索を可能にするだけでなく、他にも多くの利点があります:

  • 類似した意味の理解(例:ネズミ/ネズミトラップ/チーズ、Google/Bing/検索エンジン)
  • 複数言語の理解(例:クロス言語理解、中国語を入力して英語にマッチング)
  • マルチモーダル理解(テキスト、画像、音声、動画などの類似マッチングをサポート)
  • 耐容性(スペルミスや曖昧な記述の処理)

ただし、ベクトル検索が有効でないシナリオもいくつか存在します。例えば:

  • 人物や物体の名前を検索する場合(例:イーロン・マスク、iPhone 15)
  • 略語やフレーズを検索する場合(例:RAG、RLHF)
  • IDを検索する場合(例:gpt-3.5-turbo、titan-xlarge-v1.01)

これらの欠点は、従来のキーワード検索の強みでもあります。従来のキーワード検索は以下の点で得意です:

  • 正確なマッチング(例:製品名、名前、製品番号)
  • 短い文字列のマッチング(少数の文字でベクトル検索を行うと効果が悪く、多くのユーザーは数語しか入力しないことが多い)
  • 低頻度語のマッチング(低頻度語はしばしば重要な意味を持ち、「コーヒーを飲みに行きたいですか?」という文の中では、「飲む」や「コーヒー」が「あなた」や「思う」よりも重要です)

ほとんどのテキスト検索シナリオでは、最も関連性の高い結果を表示することが重要です。ベクトル検索とキーワード検索はそれぞれ異なる利点があり、ハイブリッド検索はこれら二つの検索技術の強みを融合させ、同時にそれぞれの弱点を補完するものです。

ハイブリッド検索では、データベースに事前にベクトルインデックスとキーワードインデックスを構築し、ユーザーが質問を入力する際に、それぞれの検索エンジンを使用して最も関連性の高いテキストを検索します。

“ハイブリッド検索”には明確な定義がなく、本稿ではベクトル検索とキーワード検索の組み合わせを例に挙げていますが、他の検索アルゴリズムの組み合わせに対しても“ハイブリッド検索”と呼ぶことができます。例えば、エンティティ関係の検索に使用される知識グラフ技術とベクトル検索技術を組み合わせることができます。

異なる検索システムは、テキスト(段落、文、単語)間の異なる微妙な関係を見つけるのにそれぞれ得意です。これには正確な関係、意味的関係、主題的関係、構造的関係、エンティティ関係、時間関係、イベント関係などが含まれます。どの検索モードもすべてのシナリオに適用できるわけではありません。ハイブリッド検索は複数の検索システムを組み合わせることで、様々な検索技術の相互補完を実現しています。

ベクトル検索

定義:クエリ埋め込みを生成し、それに最も類似したテキストセグメントを検索します。

TopK: ユーザーの質問と最も類似度の高いテキストセグメントを選択するために使用されます。システムはモデルのコンテキストウィンドウサイズに基づいて動的にセグメント数を調整します。システムのデフォルト値は3です。

スコア閾値: テキストセグメントの選択に使われる類似度の閾値を設定します。設定されたスコアを超えるテキストセグメントのみをリコールします。システムのデフォルト設定は閉じており、リコールされたテキストセグメントの類似度値をフィルタリングしません。設定をオンにすると、デフォルト値は0.5です。

Rerankモデル: Rerankモデルを構成した後、検索設定で「Rerankモデル」をオンにすると、システムは意味検索後にリコールされた文書結果を再度意味的に並べ替え、結果を最適化します。Rerankモデルの設定により、TopKおよび他の検索設定が影響を受けます。

フルテキスト検索

定義:文書内のすべての単語をインデックス化し、ユーザーが任意の単語を検索できるようにし、その単語を含むテキストの断片を返します。

TopK: ユーザーの質問に最も関連性の高いテキストの断片を選ぶために使用されます。システムはモデルの文脈ウィンドウサイズに基づいて、選ばれる断片の数を動的に調整します。デフォルトの設定は3です。

Rerankモデル: 「モデルプロバイダー」ページでRerankモデルのAPIキーを設定した後、検索設定で「再ランキングモデル」をオンにすると、フルテキスト検索によって取得した文書結果を再度意味的に並べ替え、結果を最適化します。再ランキングモデルを設定した場合、TopKとスコアの閾値設定は再ランキングのステップでのみ有効です。

ハイブリッド検索

フルテキスト検索とベクトル検索を同時に実行し、再ランキングステップを適用して、2つの検索結果の中からユーザーの質問に最も適した結果を選びます。RerankモデルのAPI設定が必要です。

TopK: ユーザーの質問に最も関連性の高いテキストの断片を選ぶために使用されます。システムはモデルの文脈ウィンドウサイズに基づいて、選ばれる断片の数を動的に調整します。デフォルトの設定は3です。

Rerankモデル: 「モデルプロバイダー」ページでRerankモデルのAPIキーを設定した後、検索設定で「再ランキングモデル」をオンにすると、ハイブリッド検索によって取得した文書結果を再度意味的に並べ替え、結果を最適化します。再ランキングモデルを設定した場合、TopKとスコアの閾値設定は再ランキングのステップでのみ有効です。

データセット作成時の検索モード設定

「データセット→データセットの作成」ページに移動し、検索設定で異なる検索モードを選択します:

データセット設定での検索モードの変更

「データセット→データセットを選択→設定」ページに移動し、作成済みのデータセットの検索モードを変更できます。

// TODO

プロンプト配置での検索モードの変更

「プロンプト配置→コンテキスト→データセットを選択→設定」ページに移動し、アプリケーション作成時に異なる検索モードを変更できます。