ハイブリッド検索

セマンティック検索(ベクトル検索)とキーワード検索(BM25など)を組み合わせる手法。両者の弱点を補完し、検索精度を向上させる。

なぜハイブリッドか

ベクトル検索の弱点

キーワード検索の弱点

仕組み

  1. 並列検索:
    • ベクトル検索でTop-20を取得
    • キーワード検索(BM25)でTop-20を取得
  2. スコア統合:
    • 各検索結果にスコアを付与
    • 重み付けして統合(例: ベクトル70%、キーワード30%)
  3. 重複排除: 同じ文書が両方に含まれる場合はマージ
  4. 最終ランキング: 統合スコアでTop-Kに絞る

スコア統合手法

1. Reciprocal Rank Fusion (RRF)

スコア = 1 / (順位 + k)

2. 重み付け線形結合

最終スコア = α × ベクトルスコア + β × キーワードスコア

具体例

クエリ: 「JWT トークンの有効期限 設定方法」

ベクトル検索結果:

  1. 「認証システムの概要」(意味は近いが的外れ)
  2. 「トークン発行の仕組み」(関連するが浅い)
  3. 「JWT有効期限設定のコード例」(正解)

キーワード検索結果:

  1. 「JWT有効期限設定のコード例」("JWT" "有効期限" が含まれる)
  2. 「設定ファイルのサンプル」("設定" が含まれる)
  3. 「トークンの種類」("トークン" が含まれる)

ハイブリッド結果:

  1. 「JWT有効期限設定のコード例」(両方で高スコア → 1位)
  2. 「トークン発行の仕組み」(ベクトルで高い)
  3. 「認証システムの概要」(ベクトルで高い)

使い分け

検索対象 推奨手法
固有名詞、ID、コード番号 キーワード検索を高めに設定(例: 50%以上)
自然言語の質問 ベクトル検索を高めに設定(例: 70%以上)
混在(製品名を含む質問など) バランス型(例: 60% ベクトル、40% キーワード)

実装例

Elasticsearch + Dense Vector

カスタム実装

ベストプラクティス

  1. ドメインに応じて重みを調整: 技術文書ならキーワード高め、FAQならベクトル高め
  2. 評価データで最適化: A/Bテストで最適な重みを見つける
  3. クエリに応じて動的調整: 固有名詞が含まれる場合はキーワード重視
  4. リランキングと併用: ハイブリッド検索後に再ランク付けでさらに精度向上

コストとレイテンシ

関連