Zenn
📏

Pineconeで利用できる類似性メトリックについて

2025/03/12に公開

こんにちは、システムゼウスの鈴木です。
今回はベクトルデータベース Pineconeで選択できる、類似度メトリックについて紹介します。

類似性メトリック

ベクトル間の類似性(距離)は数学的なアルゴリズムを用いて計算することが可能です。その評価をするための方法を類似性メトリックといいます。
簡単のため、ここでは2次元のベクトル空間とそこにあるいくつかのベクトルを考えます。

2次元のベクトル空間とそこにあるいくつかのベクトル集合
2次元のベクトル空間上のベクトル, 引用元

ユークリッド距離

ユークリッド距離の説明画像
引用元

多次元空間における2点の直線距離を計算するものがユークリッド距離です。三平方の定理を多次元空間に適応させたものと捉えることもできます。
dd次元空間における2点a,ba, bのユークリッド距離は以下の式で計算することができます。ここで、ai,bia_i, b_iは比較する2つのベクトルのii番目の要素です。

i=1d(aibi)2 \sqrt{\sum_{i = 1}^{d} (a_i - b_i)^2}

"距離的に近いベクトルは意味的にも近い"という考え方の類似性メトリックで、数値が小さいほど類似度が高いとみなします。
ただし、ベクトルの大きさの違いが、実際の類似性よりも強く反映されてしまい、直感的な類似度と計算結果が乖離することがあります。例えば、同じ向きのベクトルでも大きさがあまりに異なる場合、逆向きでも距離的には近いベクトルの方が類似度が高く算出されることがあります。そのため、このメトリックを使用する場合には大きさの異なるベクトルの標準化などの事前処理が必要になります。
また、次元の数が大きくなるにつれベクトル間の距離の差が小さくなる「次元の呪い」の影響を大きく受けるという問題点もあります。

次元の呪い

機械学習における次元の呪いとは、ベクトルの次元を増やしていくと、ある特定の次元数までは性能が向上するものの、それ以上次元を増やすとかえって性能が低下する現象のことを指します。
数式で表すと以下のようになります。

limd[distmax(d)distmin(d)distmin(d)]0 \lim_{d \to \infty}\left[\dfrac{dist_{max}(d) - dist_{min}(d)}{dist_{min}(d)}\right] \to 0

ここで、

  • dd: ベクトル空間の次元数
  • distmax(d)dist_{max}(d): dd次元空間において、任意の基準点から最も遠い点までの距離
  • distmin(d)dist_{min}(d): dd次元空間において、任意の基準点から最も近い点までの距離

これは、dd次元空間に位置する任意のベクトルから見て、最も遠いベクトルdistmaxdist_{max}と最も近いベクトルdistmindist_{min}の距離の差を考えたとき、高次元空間においてはベクトル同士の距離が似通ってしまうため、次元数が増加するにつれて最遠と最近の距離の差が小さくなり、影響を与えなくなってしまうことを表しています。

高次元空間の挙動を3次元以下の空間で理解することは大変難しいのですが、例えるならば、平面上の原点の周辺に散らばっている点を考えたとき、次元数が増加するとベクトルは原点を中心とする円周の近辺に集まってしまうようなイメージです。こうなると、原点と各ベクトルの距離はほぼ等しくなってしまうため、判別はほとんどできません。[1]

ドット積類似度

ドット積類似度の説明画像
引用元

2つのベクトルa,b\vec{a},\vec{b}の内積として定義される類似性メトリックで、以下の式で算出されます。

ab=abcosα \vec{a}・\vec{b} = |\vec{a}| |\vec{b}| \cos\alpha

それぞれのベクトルの絶対値と、ベクトルのなす角α\alphaの余弦との積によって算出されます。このことから明らかですが、2つのベクトルがなす角の大きさと、ベクトルの大きさ両方に影響されるメトリックです。このメトリックは、数値が高いほど類似しているとみなします。
ドット積類似度によってトレーニングされた言語モデルは多いですが、このメトリックについてもベクトルの大きさの違いが与える影響については十分に考慮する必要があります。大きさの影響を取り払うためには、ベクトルのサイズを正規化する必要があります。
ベクトルサイズを正規化する一般的な方法として、L2正規化という方法があります。詳しくはこちらの記事をご覧ください。
なお、Pineconeにおいてハイブリッド検索を行う場合には、類似性メトリックとしてドット積類似度を選択する必要があります

コサイン類似度

コサイン類似度の説明画像
引用元

ドット積類似度からベクトルの大きさの違いによる影響を排除し、2つのベクトルの角度のみに基づいたメトリックで、以下の式で算出されます。

abab=cosα \dfrac{\vec{a}・\vec{b}}{|\vec{a}| |\vec{b}|} = \cos\alpha

算出される値の意味は次のようになります。

cosα1\cos\alpha \to 1:ベクトルは同じ方向を向いており、意味的には似ている
cosα1\cos\alpha \to -1:ベクトルは反対を向いており、意味的には反対
cosα0\cos\alpha \to 0:ベクトルは直交しており、意味的には無関係

0の値の計算を無視することができるため、ベクトルの値に0が多い疎ベクトルの計算に対しても有効に働くことや、計算結果が1から-1の範囲に収まることがメリットとして挙げられます。ただし、ベクトルの大きさを完全に無視するため、大きさが何かの意味を持つベクトルを扱う場合には重要な情報が失われてしまうことになります。


Pineconeでは、以上の3種類の類似性メトリックを選択することができます。ただし、最適な類似性メトリックを選択する際の基本的な考え方は、埋め込みモデルのトレーニングに利用されたメトリックと一致させることです。

また、巨大なデータセットのすべてのデータに対して類似度を計算することは現実的ではありません。そのため、類似度を計算するデータをある程度絞って計算することが一般的です。絞り込みのためのアルゴリズムとしてk近傍法、近似最近傍が主に利用されています。[2]

おわりに

Pineconeで選択可能な3つの類似度メトリックについて紹介しました。率直なところ、メトリックを意識して生成AIやRAGを利用するタイミングはほとんどないのですが、ベクトルについての理解の一助になれば幸いです。
また、ご意見・ご指摘等ございましたらコメントしていただけると幸いです。

脚注
  1. 次元の呪いについて深く知りたい方はこちらをご覧ください ↩︎

  2. k近傍法についてはこちら、近似最近傍についてはこちらこちらをご覧ください。 ↩︎

株式会社システムゼウス

Discussion

ログインするとコメントできます