Pineconeで利用できる類似性メトリックについて
こんにちは、システムゼウスの鈴木です。
今回はベクトルデータベース Pineconeで選択できる、類似度メトリックについて紹介します。
類似性メトリック
ベクトル間の類似性(距離)は数学的なアルゴリズムを用いて計算することが可能です。その評価をするための方法を類似性メトリックといいます。
簡単のため、ここでは2次元のベクトル空間とそこにあるいくつかのベクトルを考えます。
2次元のベクトル空間上のベクトル, 引用元
ユークリッド距離
多次元空間における2点の直線距離を計算するものがユークリッド距離です。三平方の定理を多次元空間に適応させたものと捉えることもできます。
"距離的に近いベクトルは意味的にも近い"という考え方の類似性メトリックで、数値が小さいほど類似度が高いとみなします。
ただし、ベクトルの大きさの違いが、実際の類似性よりも強く反映されてしまい、直感的な類似度と計算結果が乖離することがあります。例えば、同じ向きのベクトルでも大きさがあまりに異なる場合、逆向きでも距離的には近いベクトルの方が類似度が高く算出されることがあります。そのため、このメトリックを使用する場合には大きさの異なるベクトルの標準化などの事前処理が必要になります。
また、次元の数が大きくなるにつれベクトル間の距離の差が小さくなる「次元の呪い」の影響を大きく受けるという問題点もあります。
次元の呪い
機械学習における次元の呪いとは、ベクトルの次元を増やしていくと、ある特定の次元数までは性能が向上するものの、それ以上次元を増やすとかえって性能が低下する現象のことを指します。
数式で表すと以下のようになります。
ここで、
-
: ベクトル空間の次元数 -
: 次元空間において、任意の基準点から最も遠い点までの距離 -
: 次元空間において、任意の基準点から最も近い点までの距離
これは、
高次元空間の挙動を3次元以下の空間で理解することは大変難しいのですが、例えるならば、平面上の原点の周辺に散らばっている点を考えたとき、次元数が増加するとベクトルは原点を中心とする円周の近辺に集まってしまうようなイメージです。こうなると、原点と各ベクトルの距離はほぼ等しくなってしまうため、判別はほとんどできません。[1]
ドット積類似度
2つのベクトル
それぞれのベクトルの絶対値と、ベクトルのなす角
ドット積類似度によってトレーニングされた言語モデルは多いですが、このメトリックについてもベクトルの大きさの違いが与える影響については十分に考慮する必要があります。大きさの影響を取り払うためには、ベクトルのサイズを正規化する必要があります。
ベクトルサイズを正規化する一般的な方法として、L2正規化という方法があります。詳しくはこちらの記事をご覧ください。
なお、Pineconeにおいてハイブリッド検索を行う場合には、類似性メトリックとしてドット積類似度を選択する必要があります。
コサイン類似度
ドット積類似度からベクトルの大きさの違いによる影響を排除し、2つのベクトルの角度のみに基づいたメトリックで、以下の式で算出されます。
算出される値の意味は次のようになります。
0の値の計算を無視することができるため、ベクトルの値に0が多い疎ベクトルの計算に対しても有効に働くことや、計算結果が1から-1の範囲に収まることがメリットとして挙げられます。ただし、ベクトルの大きさを完全に無視するため、大きさが何かの意味を持つベクトルを扱う場合には重要な情報が失われてしまうことになります。
Pineconeでは、以上の3種類の類似性メトリックを選択することができます。ただし、最適な類似性メトリックを選択する際の基本的な考え方は、埋め込みモデルのトレーニングに利用されたメトリックと一致させることです。
また、巨大なデータセットのすべてのデータに対して類似度を計算することは現実的ではありません。そのため、類似度を計算するデータをある程度絞って計算することが一般的です。絞り込みのためのアルゴリズムとしてk近傍法、近似最近傍が主に利用されています。[2]
おわりに
Pineconeで選択可能な3つの類似度メトリックについて紹介しました。率直なところ、メトリックを意識して生成AIやRAGを利用するタイミングはほとんどないのですが、ベクトルについての理解の一助になれば幸いです。
また、ご意見・ご指摘等ございましたらコメントしていただけると幸いです。
Discussion