類似度の種類(cosine, dot product, Euclidean)

1. Pinecone における類似度指標の選択肢

Pinecone ではインデックス作成時に metric 引数で以下 3 種の類似度指標を指定できます。

指標 指定値 数学的定義 値域 主な用途
Cosine Similarity "cosine" cos(q,x)=qxqx\text{cos}( \mathbf{q}, \mathbf{x}) = \dfrac{\mathbf{q}\cdot\mathbf{x}}{\|\mathbf{q}\|\|\mathbf{x}\|} [1,1][-1,1] 文書検索、文章埋め込み、意味的類似性
Dot Product (Inner Product) "dotproduct" qx=iqixi\mathbf{q}\cdot\mathbf{x} = \sum_{i} q_i x_i (,)(-\infty,\infty) レコメンド(協調フィルタリング)、ランキング学習
Euclidean (L2) Distance "euclidean" d(q,x)=qx2d(\mathbf{q}, \mathbf{x}) = \|\mathbf{q}-\mathbf{x}\|_2 [0,)[0,\infty) 画像ベクトル、数値特徴量クラスタリング

注意: Pinecone の検索 API は「小さいほど近い」距離ではなく「大きいほど近い」スコア形式で結果を返します。

  • cosinedotproduct はそのまま「大きい値=高類似」。

  • euclidean を使うと内部で d-d がスコア化されるため、ユーザ側は 昇順降順を意識せず同一インターフェースで扱えます。


2. それぞれの指標の特徴とベストプラクティス

観点 Cosine Dot Product Euclidean
スケーリング要件 事前に L2 正規化しても・しなくても良い(正規化すると内積=コサインが成り立つ) 正規化しないのが一般的。大きさ情報も評価に含めたい場合に有効 正規化 不要。大きさが距離に直結
値域の固定 あり(-1〜1)。外れ値に強い なし。大スケール値で勾配消失・爆発のリスク なし(0〜∞)
意味 角度に基づく「方向」の近さ 「方向」と「大きさ」を同時反映 実座標空間での直線距離
推奨ユースケース 意味ベクトル(NLP)、多言語埋め込み 行列分解ベース推薦、Click-through rate 予測 視覚特徴、クラスタ解析、異常検知
インデックスサイズへの影響 ベクトル次元そのまま 同左 同左
ハイパーパラメータ調整 上位 k や filter 条件のみ 同左 sqrt を取るかどうか(L2 と L2²)※Pinecone は L2

3. Pinecone での設定例

python
import pinecone pinecone.init(api_key="YOUR_API_KEY", environment="gcp-starter") # 例: cosine 指標で 768 次元のインデックスを作成 pinecone.create_index( name="semantic-search-cosine", dimension=768, metric="cosine" ) # 例: dot product 指標で推薦用ベクトルを格納 pinecone.create_index( name="recsys-dot", dimension=128, metric="dotproduct" ) # 例: Euclidean 距離で画像特徴量を検索 pinecone.create_index( name="vision-euclidean", dimension=512, metric="euclidean" )

4. クエリ前処理とスコア解釈

指標 クエリ前処理の推奨 検索結果の score 解釈
Cosine 可能であれば L2 正規化(学習時正規化している場合は不要) 1 に近いほど高類似
Dot Product 正規化しない(大きさも重要)。ただし値が非常に大きいと ANN 構造体の分割に影響するため量子化・温度スケーリングを検討 値が大きいほど高類似
Euclidean 特になし。スケールが揃わない数値特徴量は事前に標準化 scored-d。0 距離なら score = 0 ではなく 0 に近い負値

5. 指標選択のガイドライン

  1. 意味理解を重視するテキスト検索

    • 埋め込みモデルが L2 正規化済み ⇒ cosine

    • 正規化していないが文脈ベクトル同士の比較 ⇒ dotproduct でも良いがコサインが一般的

  2. 推薦システム

    • 行列分解・協調フィルタリングのユーザ・アイテムベクトル ⇒ dotproduct

    • 目的関数(BPR、WARP 等)が内積前提

  3. 画像・数値特徴量

    • 空間距離に意味がある ⇒ euclidean

    • 画像検索・クラスタリング・距離ベース異常検知

  4. パフォーマンス

    • Pinecone の HNSW / PQ 実装は 3 指標すべて ANN で最適化済み。

    • 高次元 (>1536) で dotproduct の値が発散する場合は事前に正規化や縮小を検討。


6. まとめ

  • Pinecone は コサイン類似度内積ユークリッド距離をサポートし、metric で選択します。

  • 用途ごとに「方向だけ見たいか」「大きさも評価したいか」「距離そのものが欲しいか」を判断軸に選びます。

  • インデックス作成後の指標変更は不可のため、初期設計時に要検討

  • クエリ側はインデックス vector と同一の前処理(正規化・縮尺)を行い、score の符号・レンジを正しく解釈することが重要です。

ChatGPT4o 生成日:2025/06/20