ドメイン特化型ベクトル検索:モデル選定から二重検証まで

汎用的な埋め込みモデルは、専門的なテキストに対して精度が落ちることがよくあります。

最近取り組んだESGプロジェクトにおいて、OpenAIのada-002モデルを使用したところ、2つの大きな問題が発生しました。

  • 関連コンテンツの18%が全く見つからなかった。
  • 結果の12%が誤っていた。例えば、「Scope 1 emissions(スコープ1排出量)」を検索した際に、「Scope 3 emissions(スコープ3排出量)」が返されるといったケースです。

問題は類似度のしきい値(similarity threshold)ではなく、「意味のドリフト(semantic drift)」でした。汎用モデルは、ESG、法務、医療といった専門領域における微細な違いを理解できません。

これを解決するための3層構造のソリューションを以下に示します。

1. モデル選定 4つのモデルをテストしました。BGE-M3をセルフホストする方が安上がりだと思われがちですが、実際にはGPUサーバーのコストと開発時間の関係で、6倍ものコストがかかりました。

私たちは text-embedding-3-large を選択しました。理由は以下の通りです。

  • リコール率(再現率)が91%に達したため。
  • 長文に対しても安定しているため。
  • 最もROI(投資対効果)が高いため。

2. 意味のドリフトの軽減 最良のモデルであっても、「low-carbon(低炭素)」と「zero-carbon(ゼロ炭素)」を混同することがあります。そこで、私は3段階の拡張戦略を実装しました。

  • ドメイン辞書:500以上の用語に対し、定義と「〜とは異なる」というルールをまとめたマップ。
  • プロンプト・ヒント:エンコーディング中に辞書のコンテキストをモデルに注入する。
  • 検索後のリランキング(再順位付け):類義語のスコアを上げ、無関係な用語のスコアを下げる。

これにより、偽陽性率(false positive rate)を12%から3%に低減できました。

3. 二重検証 ベクトル類似度は数学的な距離を測定するものであり、ビジネス上の関連性を測定するものではありません。精度を担保するために、二重チェックシステムを導入しました。

  • レイヤー1:キーワードの完全一致(hard match)。結果に必須のコア用語が含まれている必要がある。
  • レイヤー2:LLMによる意味的なクロスバリデーション。LLMが、そのチャンクが実際にクエリに回答しているかを確認する。
  • レイヤー3:手動のスポットチェック。システムの劣化を防ぐための月次レビュー。

これにより、精度は70%から94%に向上しました。

まとめ データに専門用語が含まれている場合は、単一のベクトル検索だけに頼らないでください。数学的な類似性からビジネス上の関連性へと移行するには、辞書、ドメイン・ヒント、そして二重検証レイヤーが必要です。

Source: https://dev.to/jamesli/part-3-vector-retrieval-in-domain-specific-terminology-scenarios-from-model-selection-to-dual-3485

Optional learning community: https://t.me/GyaanSetuAi