Traffine I/O

日本語

2023-02-04

ベクトル類似度

ベクトル類似度とは

ベクトル類似度とは、2つ以上のベクトル間の類似度や近さを定量化するための尺度です。特にデータサイエンスや機械学習などの多くの応用分野では、ベクトル同士の方向性や大きさを比較することが重要であり、それが類似性として捉えられます。

ベクトル類似度の尺度

ベクトル間の類似性を定量化するために一般的に使用される尺度を紹介します。これらの尺度は、多次元空間におけるデータの比較や対比、自然言語処理(NLP)、推薦システム、画像認識などのさまざまな分野で重要な役割を果たしています。

ユークリッド距離

ユークリッド距離は、ベクトル類似度の中でももっとも直感的な尺度の1つです。ユークリッド空間において、2点間の直線距離を計算します。

2次元空間において、点P(x_1, y_1)Q(x_2, y_2)のユークリッド距離は、ピタゴラスの定理を用いて以下のように計算されます。

D_{euclidean} = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2}

n次元空間において、ベクトルabのユークリッド距離は以下のように一般化されます。

D_{euclidean}(\mathbf{a}, \mathbf{b}) = \sqrt{\sum_{i=1}^{n} (a_i - b_i)^2}

コサイン類似度

ユークリッド距離とは異なり、コサイン類似度はゼロでない2つのベクトル間のなす角のコサインを測定します。ベクトルの大きさが重要ではなく、方向性により関心がある場合に特に有用です。

コサイン類似度は、2つのベクトルの内積を各ベクトルの大きさの積で割ることで計算されます。

\text{cosine\_similarity}(\mathbf{a}, \mathbf{b}) = \frac{\mathbf{a} \cdot \mathbf{b}}{||\mathbf{a}|| \times ||\mathbf{b}||} = \frac{\sum_{i=1}^{n} a_i \cdot b_i}{\sqrt{\sum_{i=1}^{n} a_i^2} \times \sqrt{\sum_{i=1}^{n} b_i^2}}

ドット積類似度

ドット積類似度は、2つのベクトル間のドット積を計算する尺度です。コサイン類似度と密接な関係がありますが、コサイン類似度はベクトル間の角度を測定するために結果を正規化しますが、ドット積類似度は上限がなく、大きさと方向の両方を考慮します。

ベクトル ab のドット積は以下のように計算されます。

\text{dot\_product}(\mathbf{a}, \mathbf{b}) = \sum_{i=1}^{n} a_i \cdot b_i

ドット積類似度は正、負、またはゼロの値を取ります。正の値はベクトルが一般的に似た方向を指していることを示し、負の値は逆の方向を指していることを示し、ゼロの値はベクトルが直交していることを示します。

NLPなどの高次元空間での文脈では、ドット積はベクトル間で共通の特徴をどれだけ持っているかを測る尺度として捉えることができます。値が高いほど共通の特徴が多いことを示します。

Jaccard類似度

Jaccard類似度は、集合間の類似性を比較するために使用される尺度です。ベクトルが集合を表す場合(例:バイナリベクトル)、Jaccard類似度は非常に有用です。

Jaccard類似度は、集合の積のサイズを集合の和のサイズで割ることで定義されます。

J(\mathbf{A}, \mathbf{B}) = \frac{|\mathbf{A} \cap \mathbf{B}|}{|\mathbf{A} \cup \mathbf{B}|}

バイナリベクトルabの場合、Jaccard類似度は以下のように表されます。

J(\mathbf{a}, \mathbf{b}) = \frac{\sum_{i=1}^{n} \min(a_i, b_i)}{\sum_{i=1}^{n} \max(a_i, b_i)}

参考

https://www.pinecone.io/learn/vector-similarity/
https://www.learndatasci.com/glossary/jaccard-similarity/

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!