機械学習/AI 自然言語処理 解析

コサイン類似度とは?ベクトルの内積から見る類似度

2023年11月18日

データ分析や機械学習の分野で広く用いられるコサイン類似度は、ベクトル間の類似性を測定する強力なツールである。

 

この記事では、コサイン類似度の基本原理から、高次元データでの振る舞い、そして次元の呪いに対処する方法までを詳細に解説する。

データサイエンティストや機械学習エンジニアにとって重要なこの問題を、わかりやすく、段階的に理解し、実践的な解決策を身につけるための一助となることを目指す。

【定義】コサイン類似度とは何か

コサイン類似度は、特に二つのベクトル間の角度を利用して、それらがどれだけ似ているかを測る指標である。

【定義】コサイン類似度

具体的に、\(n\)次元ベクトル \(\boldsymbol{x}\) と \(\boldsymbol{y}\) が与えられたとき、コサイン類似度は以下の式で定義される:

$$ \begin{aligned} & \boldsymbol{x}=\left(\begin{array}{c} x_1 \\ \vdots \\ x_n \end{array}\right), \boldsymbol{y}=\left(\begin{array}{c} y_1 \\ \vdots \\ y_n \end{array}\right) \in \mathbb{R}^n \text { に対し, } \\ & \cos (\boldsymbol{x}, \boldsymbol{y})=\frac{\langle\boldsymbol{x}, \boldsymbol{y}\rangle}{|\boldsymbol{x}||\boldsymbol{y}|} \\ &\qquad =\frac{\sum_{k=1}^n x_k y_k}{\sqrt{\sum_{k=1}^n x_k^2} \sqrt{\sum_{k=1}^n y_k^2}} \end{aligned} $$

ここで、\(\langle\boldsymbol{x}, \boldsymbol{y}\rangle\) はベクトル \(\boldsymbol{x}\) と \(\boldsymbol{y}\) の内積を表し、\(|\boldsymbol{x}|\) と \(|\boldsymbol{y}|\) はそれぞれのベクトルの大きさ(ノルム)を示す。内積はベクトルの各成分を掛け合わせて足し合わせたものであり、ベクトルの大きさはその成分の二乗和の平方根で求められる。

わかりやすく言うと、コサイン類似度はベクトルを正規化してから内積を取っている

コーシーシュワルツの不等式より以下が言える。

$$
-1 \leq \frac{\langle\boldsymbol{x}, \boldsymbol{y}\rangle}{\|\boldsymbol{x}\|\|\boldsymbol{y}\|} \leq 1
$$

コサイン類似度は、ベクトルの方向のみを考慮し大きさの影響を排除している点にある。コサイン類似度は、0から1の範囲の値を取り1に近いほど二つのベクトルは類似していると言える。逆に、0に近い場合は類似性が低いと解釈される。

このようにコサイン類似度は、ベクトル間の角度を基に類似性を測る強力な手段であり、機械学習や自然言語処理など、多くの分野で広く利用されている。

 

ベクトル間の関係性とコサイン類似度

1. 大きさ(ノルム)

ベクトルの「大きさ」は、そのベクトルがどれだけの量を持つかを示す。数学的には、ベクトルのノルム(norm)として表され、ベクトルの各成分の二乗和の平方根で計算される。例えば、ベクトル \(\boldsymbol{x} = (x_1, x_2, \ldots, x_n)\) のノルムは以下のように定義される:

2. 方向

ベクトルの「方向」は、そのベクトルが指し示す空間内の向きを表す。方向は、ベクトルの各成分の比率によって定義される。例えば、二次元ベクトル \((1, 2)\) は、x軸方向に1の単位、y軸方向に2の単位進む方向を表す。

3. 内積と角度

ベクトル間の角度は、内積(dot product)を用いて計算される。二つのベクトル \(\boldsymbol{x}\), \(\boldsymbol{y}\) の内積は、各成分の積の総和であり、以下のように表される:

$$
\langle\boldsymbol{x}, \boldsymbol{y}\rangle=x_1 y_1+x_2 y_2+\cdots+x_n y_n
$$

内積は、ベクトル間の相関を測るのに用いられる。特に、内積が大きいほど、ベクトルは同じ方向を向いていると言える。逆に、内積が0の場合、ベクトルは直交している(互いに独立している)と解釈される。

 

コサイン類似度とベクトルの角度

コサイン類似度とベクトルの角度について解説する。コサイン類似度は、二つのベクトル間の角度を基にして、それらがどれだけ似ているかを測る指標である。この類似度は、特にベクトルの「方向」に着目するため、ベクトルの大きさに依存せずに、方向性のみで類似性を判断することができる。

ベクトル間の角度

二つのベクトル \(\boldsymbol{x}\) と \(\boldsymbol{y}\) が形成する角度は、それらの内積とノルムを用いて計算できる。ベクトルの内積は、ベクトルの成分同士を掛け合わせて足し合わせたものであり、ベクトルのノルムはベクトルの大きさを示す。これらを用いて、ベクトル間の角度 \(\theta\) は次のように定義される:

ここで、\(\cos \theta\) は二つのベクトルが形成する角度のコサインであり、内積とノルムを用いて計算される。

コサイン類似度の意味

 

コサイン類似度は、上記の式によって定義される。これは、ベクトル間の角度のコサインに等しい。したがって、コサイン類似度はベクトル間の角度が小さい(つまり方向が似ている)ほど大きくなり、角度が大きい(方向が異なる)ほど小さくなる。

  • 角度が0度(同じ方向)の場合、コサイン類似度は1
  • 角度が90度(直交)の場合、コサイン類似度は0
  • 角度が180度(反対方向)の場合、コサイン類似度は-1

コサイン類似度の重要性

コサイン類似度は、ベクトルの方向のみに着目することで、大きさに依存しない類似度測定を可能にする。これにより、例えばテキストデータの分析において、文書の長さに影響されずに内容の類似度を評価することができる。また、他の多くの分野でも、方向性のみに基づく分析が求められる場面で有効に機能する。

このように、コサイン類似度はベクトルの角度を活用して、二つのベクトル間の類似性を定量的に評価する強力な手段であり、様々な分野での応用が可能である。ベクトルの方向が示す意味を理解し、それを基にした分析は、多くの洞察を提供することができる。

 

コサイン類似度の実用例

テキストデータにおける応用

コサイン類似度は、特にテキストデータの分析において広く用いられている。テキストデータでは、文書や文章をベクトルとして表現し、その類似度を測定するためにコサイン類似度が活用される。

テキストのベクトル化

テキストデータをベクトルとして扱うためには、まずテキストを数値データに変換する必要がある。これは一般に「ベクトル化」と呼ばれ、テキスト内の各単語を特定の数値の配列に変換するプロセスである。一般的な手法には、TF-IDF(Term Frequency-Inverse Document Frequency)やWord2Vecなどがある。

文書の類似度測定

ベクトル化されたテキストデータを使用して、コサイン類似度により文書間の類似度を測定する。例えば、二つの文書が似たトピックや内容について記述している場合、それらのベクトル表現は類似していると考えられる。コサイン類似度は、これらのベクトル間の角度を計算することで、文書間の類似度を定量的に評価する。

応用例

  • 検索エンジン: ユーザーのクエリと文書データベースとの間でコサイン類似度を計算し、最も関連性の高い文書を識別する。
  • 文書分類: 既知のカテゴリに属する文書と新しい文書との間の類似度を比較し、新しい文書を適切なカテゴリに分類する。
  • レコメンデーションシステム: ユーザーが以前に読んだ文書や好評価したコンテンツと類似した内容の文書を推薦する。

他の分野での利用例

コサイン類似度はテキストデータの分析に限らず、他の多くの分野でも有効に活用されている。その応用範囲は広く、様々な種類のデータにおける類似度の測定やパターン認識、推薦システムなどに利用されている。

1. 機械学習における特徴量の比較

機械学習では、異なるデータポイント間の特徴量(feature)の類似度を測定するためにコサイン類似度が使われることがある。例えば、画像や音声データの特徴量ベクトル間の類似度を測定することで、似ているデータをグループ化したり、特定のパターンを識別することが可能になる。

2. ユーザープロファイルの比較による推薦システム

オンラインショッピングサイトや動画ストリーミングサービスでは、ユーザーの好みや興味を表すプロファイル間の類似度をコサイン類似度で計算し、個々のユーザーに合わせた商品やコンテンツを推薦する。ユーザーの過去の購買履歴や視聴履歴をベクトル化して、他のユーザーのプロファイルと比較することで、関連性の高いアイテムを提案できる。

3. ジェノムデータの解析

生物学や遺伝学の分野では、ジェノムデータやタンパク質の配列をベクトル化し、コサイン類似度を用いて異なる種や個体間の遺伝的な類似性を分析する。これにより、種の進化的関係や遺伝的特性の共通点を発見することが可能になる。

4. ソーシャルネットワーク分析

ソーシャルネットワークにおけるユーザーの関係性やコミュニティの特定にコサイン類似度が利用されることがある。ユーザーの活動や関心のベクトル化を行い、コサイン類似度を計算することで、類似した興味を持つユーザーをグルーピングし、ターゲットとするコミュニティを特定することができる。

 

コサイン類似度と他の類似度指標との比較

ユークリッド距離との違い

コサイン類似度とユークリッド距離は、両者ともデータの類似度や距離を測定するために使われるが、その計算方法と意味するところに大きな違いがある。これらの違いを理解することは、適切な分析手法を選択する上で重要である。

コサイン類似度

改めて確認するとコサイン類似度は、二つのベクトル間の角度に基づいて類似度を計算する指標である。具体的には、ベクトルの内積と各ベクトルのノルム(大きさ)を用いて、以下の式で求められる:

この指標は、ベクトルの大きさに影響されず、方向性のみに注目するため、文書の長さや画像のサイズなど、量の違いを無視して内容の類似度を比較する際に適している。

ユークリッド距離

ユークリッド距離(Euclidean distance)は、二つの点(またはベクトル)間の「直線距離」を測る方法である。n次元空間における二つの点 \(\boldsymbol{x}\) と \(\boldsymbol{y}\) の間のユークリッド距離は、以下の式で計算される:

ユークリッド距離は、物理的な距離を反映するため、サイズや大きさの違いが重要な役割を果たす分析に適している。

両者の主な違い

  1. 方向性 vs. 大きさ
    • コサイン類似度はベクトルの方向性に焦点を当てる。
    • ユークリッド距離はベクトルの大きさとその間の絶対的な距離を重視する。
  2. 応用分野
    • コサイン類似度は、テキスト分析や類似度に基づく推薦システムなど、方向性が重要な場面で用いられる。
    • ユークリッド距離は、物理的な距離が重要な場面(例:地理的データ、画像処理)で用いられる。
  3. 量の違いへの感度
    • コサイン類似度は量(大きさ、長さ)の違いに対して不敏感。
    • ユークリッド距離は量の違いに敏感であり、大きさの違いが結果に影響する。

これらの違いを踏まえると、分析の目的やデータの性質に応じて、コサイン類似度とユークリッド距離のいずれかを選択することが重要である。

コサイン類似度って距離??

厳密に言えばコサイン類似度は距離の定義を満たしていない。しかし、長さ1のベクトル\(x,y\)については、余弦定理より\( \|x-y\|=\sqrt{2-2 \cos \theta}=\sqrt{2} \sqrt{1-\cos \theta} \)となる。

ここでコサイン類似度を使って、距離を次のように定義すると

$$
d_{\cos }=1-\cos (x, y)
$$

コサイン類似度はほとんど距離の二乗のようなものだとしていい場合がある。

 

次元の呪い

次元の呪い」というのは、高次元空間におけるデータを扱う際に生じる問題点を指す。具体的には、今回のコサイン類似度の場合データの次元数が増えるにつれて、異なるデータポイント間の内積がゼロに近づく、すなわちベクトルが直交する確率が高まるという現象である。

次元の増加と内積の影響

コサイン類似度は、二つのベクトル間の内積とそれぞれのノルムを用いて計算される。このとき、空間の次元数が増えると、ベクトル間で内積がゼロになる、つまりベクトルが互いに直交する確率が高くなる傾向がある。

直交する確率の増加

高次元空間では、ベクトルの成分が多くなるため、それぞれの成分が独立していると仮定すると、これらの成分が互いに打ち消し合い、結果として内積がゼロに近づく確率が高くなる。言い換えると、高次元空間では、ランダムに選んだベクトルが直交する可能性が増大する。

 

試行回数 = 70000×(次元), 階級数(binの数)=50, 次元=3,4,5,10,50,100について、
各成分が区間[-1,1]を一様分布するような2つのベクトルの組を無作為に作り、cos類似度と直交描度を求める試行を繰り返し、
cos類似度や直交描度の分布を実測してみると

このようになる。見て分かるように、次元が上がるにつれて0近辺に集中するようになっていく。

コサイン類似度における影響

コサイン類似度はベクトル間の角度に基づいているため、内積がゼロに近づくと、これはベクトル間の角度が90度に近づくことを意味する。結果として、高次元空間では、異なるデータポイント間のコサイン類似度が低くなりがちで、データポイント間の区別が困難になることがある。

対策

この問題に対処するためには、次元削減技術(例:主成分分析(PCA)、t-SNE、オートエンコーダーなど)を用いて、データの次元数を減らすことが一般的である。次元を削減することで、データポイント間の有意な関係性を保持しつつ、次元の呪いの影響を減らすことができる。

このように、「コサイン類似度の次元の呪い」は、特に高次元データを扱う際に注意すべき重要なポイントである、適切な対処法を用いることが重要である。

 

内積だけ考えることも類似度を測ることになる

内積とコサイン類似度は、定義から分かるように両者ともベクトル間の類似度を測定する手段であるが、その特性と用途には重要な違いが存在する。ここでは、内積のみを用いる場合とコサイン類似度を計算する場合の違いについて、利点や適用可能なシナリオを詳細に検討する。

内積に基づく類似度測定

内積はベクトルの各成分の積の和であり、二つのベクトル間の相関を測定するのに使われる。内積の大きさは、ベクトルの大きさとその成分同士の関連性に依存する。これは、ベクトルのスケールや量が重要な情報を含む場合に特に有効である。

利点

  • ベクトルの大きさを重視する分析に適している。
  • 計算が単純で、直感的な理解が容易。

利用シナリオ

  • 物理的な量や実数値データの分析。
  • 量的な大小関係が重要な場合(例:商品の売上高、温度など)。
  • TransformerのAttention機構

コサイン類似度に基づく類似度測定

コサイン類似度は、ベクトルの方向性に焦点を当てる。この指標は、ベクトルの大きさ(スケール)に影響されず、方向のみに基づいて類似度を評価する。

利点

  • ベクトルの大きさに依存しないため、方向性のみで類似度を比較できる。
  • 文書の長さや画像のサイズなど、量の違いを無視して内容の類似度を評価する際に適している。

利用シナリオ

  • テキストデータや画像データのように、量よりもパターンや方向性が重要な場合。
  • 類似度に基づく推薦システムや分類タスク。

参考

-機械学習/AI, 自然言語処理, 解析