ベクトル埋め込みで語る意味の類似度:コサイン類似度の数学的原理と実践的解釈
自然言語処理(NLP)における意味検索やドキュメント比較の基本的な指標として広く使われる「コサイン類似度」の数学的根拠と実践的意義を解説する。多くの入門コースでは、なぜユークリッド距離ではなくコサイン類似度を使うのかが説明されず、データサイエンティストの間で理解が曖昧になりがちである。本稿では、コサイン類似度の背後にある数学的直感を明確にし、Pythonを用いた実例を通じてその意味を実感できるようにする。 コサイン類似度は、高校数学で学ぶコサイン関数に基づく。この関数は、0から2πまでの範囲で周期的な波形を示し、角度xが0(0度)のとき最大値1、π(180度)のとき最小値-1、π/2(90度)や3π/2(270度)のとき0となる。この性質により、2つのベクトルのなす角のコサイン値は、方向の一致度を自然に表現する。つまり、同じ方向を向くベクトル同士の類似度は1に近づき、反対方向なら-1、直交していれば0となる。これは、意味の重なり(例:「movie」と「film」)と意味の反対(例:「good」と「bad」)を、ベクトル空間上で明確に捉えるのに適している。 数学的には、2つのベクトルUとVのコサイン類似度は、内積をそれぞれのベクトルの大きさの積で割った値として定義される。この式は「余弦定理」から導かれる。一方、ユークリッド距離はベクトル間の直線距離を測るが、ベクトルの大きさに敏感であり、同じ意味のテキストでも長さの違いで距離が大きく変わる可能性がある。そのため、NLPでは方向性(意味の傾き)に注目するコサイン類似度がより適している。 実際の例として、意味の重なりのみを捉えるモデル(all-MiniLM-L6-v2)と、意味の正反対も表現できるモデル(distilbert-base-uncased-finetuned-sst-2-english)を比較した。その結果、「movie」と「film」はどちらのモデルでも類似度が高く(約0.84~0.96)、意味の類似性が明確に反映された。一方、「good」と「bad」の類似度は、後者のモデルでは-0.34と負の値となり、意味の反対性が正しく捉えられている。また、「spoon」と「car」は類似度が低く、意味的に無関係であることが確認された。 結論として、コサイン類似度はベクトルの方向性にのみ依存し、大きさに影響されないため、意味の類似性をより信頼性高く評価できる。ただし、その解釈は使用する埋め込みモデルの性質(特に意味の極性を含むかどうか)に大きく依存する。したがって、NLPタスクでは、モデルの選定と類似度の意味を正確に理解することが不可欠である。
