ドメイン特化型ベクトル検索:モデル選定から二重検証まで
汎用的な埋め込みモデルは、専門的なテキストに対して精度が落ちることがよくあります。
最近取り組んだ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%に向上しました。
まとめ データに専門用語が含まれている場合は、単一のベクトル検索だけに頼らないでください。数学的な類似性からビジネス上の関連性へと移行するには、辞書、ドメイン・ヒント、そして二重検証レイヤーが必要です。
Optional learning community: https://t.me/GyaanSetuAi