ある開発者のRAGプロトタイプは、コサイン類似度が0.50を下回るクエリには一切回答しないようになっていた。埋め込みモデルを入れ替えるまでは、完璧に動作していた。しかし、モデルを入れ替えた途端、ガードは沈黙したまま誤った回答を流してしまうようになった。この事例は、ハードコードされた類似度しきい値がモデル間で崩壊し得ることを証明しており、安全性チェックに埋め込み類似度を依存しているあらゆるシステムにとってのリスクを示唆している。
なぜしきい値が重要だったのか
Retrieval-augmented generation (RAG) パイプラインでは、多くの場合「類似度ガード」が使用される。クエリと最も近いドキュメントとのコサイン類似度が設定値未満であれば、システムは回答を中止する。このガードは、検索されたコンテキストが不十分な場合にモデルがハルシネーション(幻覚)を起こすのを防ぐ役割を果たす。元の設定では、0.50というしきい値によってシステムは誠実さを保っていた。回答不能なクエリはラインを下回り、回答可能なクエリはラインを上回っていたのだ。
埋め込みバックエンドを変更した際、同じ0.50というカットオフ値では、これら2つのグループを分離できなくなった。パイプラインは、クラッシュや明示的なエラーを出すことなく、自信満々だが不正確なレスポンスを返し始めた。この失敗は標準的なランキング指標では検知できず、人間がその乖離に気づいたときに初めて露呈した。
幾何学的構造は普遍的ではない
すべての埋め込みモデルは、独自の幾何学的構造を持つ高次元空間に言語をマッピングする。したがって、コサイン類似度の値はモデルごとに異なる意味を持つ。0.50というスコアは、あるモデルにとっては明確な境界線上に位置するが、別のモデルにとっては重なり合う領域の深くに位置することもある。
- Voyage-3 – 0.50のラインは、低スコアの回答不能なクエリと高スコアの回答可能なクエリの間に位置する。ガードは意図通りに機能する。
- BGE-Small – 多くの回答不能なクエリが0.50を超えるスコアを出すため、ガードが作動しない。カットオフを0.70に引き上げることで、安全マージンが回復する。
- Hashing-64 – 回答可能なクエリと回答不能なクエリのスコアが密接に混ざり合っているため、単一のしきい値で分離することができない。このモデルは類似度ガードをサポートするには弱すぎる。
これらのケースは、より広範な真実を示している。すなわち、しきい値は特定の「モデルとデータのペア」に属するものであり、普遍的なルールではないということだ。
定数を使用する隠れたコスト
類似度しきい値は、多くのダウンストリームタスクで使用される:
- semantic caching(セマンティックキャッシュ)
- duplicate detection(重複検知)
- document relevance checks(ドキュメントの関連性チェック)
- entity matching(エンティティ照合)
定数を使用するということは、すべての埋め込みモデルが同じスコア分布を共有していると仮定することであり、これは危険な仮定である。この仮定が崩れると、システムは沈黙したまま「もっともらしい誤回答(false-confident output)」を生成し、ユーザーの信頼を損ない、後続の意思決定にデタラメなデータを提供することになる。
モデルごとのガードのキャリブレーション
解決策は単純だ。ハードコードされた定数を決してリリースしないこと。しきい値を、新しい埋め込みモデルが登場するたびに調整が必要なハイパーパラメータとして扱うべきである。
- 回答可能なクエリと回答不能なクエリの両方を含む、適切なラベル付き検証セットを用意する。
- 対象のモデルを使用して、各クエリとドキュメントのペアのコサイン類似度を計算する。
- 2つの分布をプロットするか、あるいは「誤った自信率(false-confident rate)」、つまり候補となるしきい値を超える回答不能なクエリの割合を算出する。
- 誤った自信率が許容可能なリスクレベルを下回る、最小の類似度値を選択する。
目的は「過剰な自信」を防ぐことであるため、mean reciprocal rank (MRR) のような従来のランキング指標では不十分である。誤った自信率は、ガードの失敗モードを直接測定できる。
反論:「一部のモデルはそのまま使える」
例に挙げたVoyage-3のように、特定の扱いやすいモデルが、たまたま0.50のガードと一致することは事実である。しかし、それは将来の安定性を保証するものではない。モデルのアップデート、ファインチューニング、あるいは基礎となるコーパスの変化によって類似度分布が変わり、再びガードが壊れる可能性がある。たまたま一致したという一点に頼ることは、油断を招く。
次に注目すべき点
-
-
-
まとめ
類似度しきい値は普遍的な安全スイッチではない。それは、埋め込みバックエンドや扱うデータを変更するたびにキャリブレーションが必要な、モデル固有のガードである。この事実を無視すると、RAGシステムは「静かなハルシネーション」に陥り、ガード本来の目的を損なってしまう。唯一の信頼できる道は、モデルごとの体系的なキャリブレーションと、誤った自信率の継続的なモニタリングである。
