類似度計算手法(セマンティックキャッシュ)(ルイジドケイサンシュホウ(セマンティックキャッシュ))
セマンティックキャッシュの類似度計算は、クエリをEmbeddingベクトルに変換し、コサイン類似度やユークリッド距離で意味的近さを数値化する手法である。
概要
類似度計算は新しいクエリが既存キャッシュとどの程度意味的に近いかを数値評価するプロセス。(1) クエリをEmbeddingモデルで固定長ベクトルに変換し、(2) キャッシュ内ベクトルとの距離を計算して閾値判定する。Embeddingモデルの選択、距離指標の種類、閾値設定が精度とパフォーマンスを決定する3大要素。
Embeddingモデルの選択
| モデル名 | 次元数 | MTEB平均 | レイテンシ | コスト |
|---|---|---|---|---|
| OpenAI text-embedding-3-large | 3072 | 64.6 | 50〜100ms | $0.13/1M tokens |
| OpenAI text-embedding-3-small | 1536 | 62.3 | 30〜60ms | $0.02/1M tokens |
| Cohere embed-v3 | 1024 | 64.5 | 40〜80ms | $0.10/1M tokens |
| BGE-large-en-v1.5 | 1024 | 63.5 | 5〜10ms(ローカル) | 無料 |
| all-MiniLM-L6-v2 | 384 | 56.3 | 2〜5ms(ローカル) | 無料 |
キャッシュルックアップのオーバーヘッドを最小化するためローカル推論の軽量モデルが好まれる。
距離指標の種類
| 距離指標 | 値の範囲 | 特性 | 推奨ユースケース |
|---|---|---|---|
| コサイン類似度 | -1〜1 | 方向のみ比較 | テキスト類似性(最も一般的) |
| ユークリッド距離 | 0〜∞ | 絶対的距離 | 数値データ、低次元 |
| 内積 | -∞〜∞ | 方向+大きさ | 正規化済みベクトル |
| マンハッタン距離 | 0〜∞ | 各次元差の絶対値合計 | 高次元スパース |
テキストベースではコサイン類似度が標準。多くのベクトルDBが標準サポートし、値が-1〜1に正規化されるため閾値設定が直感的。
閾値設定
推奨閾値(コサイン類似度): 0.95以上=非常に厳密、0.90〜0.95=推奨範囲、0.85〜0.90=緩め、0.85未満=非推奨。F1スコア最大の閾値を本番クエリログの分析で決定し、A/Bテストで継続最適化する。
ベクトル検索の高速化
| アルゴリズム | 検索速度(100万件) | 精度 | 代表実装 |
|---|---|---|---|
| HNSW | 1〜5ms | 95〜99% | Qdrant、pgvector |
| IVF-PQ | 2〜10ms | 85〜95% | FAISS、Milvus |
| ScaNN | 1〜3ms | 95〜99% | Google ScaNN |
10万件以下はHNSWが最適。100万件超はIVF-PQのメモリ効率が重要。
よくある質問(FAQ)
Q1: クラウドとローカルどちらが良い?
10ms以下を目指すならローカル推論。精度最重要ならクラウドモデル。ハイブリッド(ローカルで検索→ミス時クラウドで再検証)の2段構成も有効。
Q2: 多言語対応は?
多言語Embeddingモデル(Cohere embed-v3、multilingual-e5-large等)で異なる言語間の類似度計算が可能。閾値を0.02〜0.05程度下げる調整が必要な場合がある。
Q3: 類似度計算のコストは?
LLM推論の100〜1000分の1。text-embedding-3-smallは$0.02/1M tokensでGPT-4oの125分の1。ローカルならCPUで5〜10ms。
まとめ
類似度計算はEmbeddingモデル選択・距離指標決定・閾値チューニングの3要素で構成。コサイン類似度が標準、閾値0.90〜0.95が推奨。ANN高速化にはHNSW/IVF-PQを活用し、レイテンシ要件でローカル/クラウドを使い分ける。