数学/統計学/機械学習におけるコサイン類似度(Cosine Similarity)とは、2つのベクトルが「どのくらい似ているか」という類似性を表す尺度で、具体的には(ベクトル空間における)2つのベクトルがなす角のコサイン値のことである。この値は、2つのベクトルの内積(=向きと大きさを持つベクトル同士の掛け算)を、2つのベクトルの大きさ(=L2ノルム)で割ることで計算される。
この計算によって値が-1〜1の範囲に正規化されるので、コサイン類似度が、
という意味になる(図1)。
この2つのベクトルのコサイン類似度、すなわち「この2つのベクトルがなす角θのコサイン値」(cosθ、cos(a,b))を求める数式は、(高校で学ぶ)「2つのベクトル同士の内積の公式」から導き出せる。以下の1行目がその公式である。なお、|<ベクトル>|という数学記号は、「ベクトルの大きさ」を表す。
2行目にある||<ベクトル>||という数学記号は、ベクトル空間における「長さ/距離」を表現する概念であるノルム(norm)を意味する。この公式におけるノルムは厳密には、ユークリッド距離であるL2ノルムを意味する。
ちなみに、ベクトルのaやbについて、1行目では高校数学風に→で書いたが、2行目では大学数学風に太字で記載した。いずれも同じベクトルを意味する。
上記の公式をcos(a,b)=に変形すると、次のようになる。これがコサイン類似度の数式となる。
ベクトルaやベクトルbは、例えば前掲の図1にある(1,3)のように2次元平面上のベクトルだけでなく、(図では表現できないが)例えば(1,2,3,4,5)のように5次元空間上のベクトルなど、
とn次元(=多次元)空間上のベクトルに拡張することが可能である。
コサイン類似度は、主に2つの文章の類似性を評価するためによく使われている。文書同士のコサイン類似度は、文章を構成する単語群を数値群によるベクトルに置き換えることなどで計算できるようになる。
例えばTwitterでツイートをベクトルに置き換えることで、あるユーザーと他のユーザ−とのコサイン類似度を計算できるだろう。その数値を基に、あるユーザーのタイムライン上に、類似しているユーザーのツイートを優先的に表示し、似ていないユーザーのツイートをあまり表示しないようにすること(いわゆるレコメンデーションの一種)も実現できるだろう。
コサイン類似度は、上記の例のようにレコメンデーションに応用したり、画像/動画でのポーズ推定に応用したりなど、さまざまな場面で活用できる可能性がある。ニューラルネットワークの損失関数や評価関数として使われることもある。
主要ライブラリでコサイン類似度は、次のクラス/関数で定義されている。
Copyright© Digital Advantage Corp. All Rights Reserved.