コサイン類似度とユークリッド距離との違いとは?ベクトル類似度指標の選び方を徹底解説
ベクトル検索や埋め込み活用を学び始めると、かなり早い段階で出会うのが「コサイン類似度とユークリッド距離は何が違うのか」という問いです。どちらもベクトル同士の近さを測る代表的な指標であり、検索、推薦、分類、まとまり分けなど幅広い場面で使われています。そのため、見た目には似た役割を持っているように感じられます。しかし実際には、両者が見ているものはかなり異なります。コサイン類似度はベクトルの向きの近さを見ており、ユークリッド距離は空間上での位置の差を見ています。この違いを曖昧なまま理解していると、埋め込み検索で不自然な検索結果が出たときに理由が分からなかったり、距離関数の選定を感覚で済ませてしまったりしやすくなります。
特に近年は、文章、画像、音声、行動履歴などを埋め込みベクトルに変換して比較する場面が増えており、どの類似度指標を選ぶかがそのまま検索品質や推薦品質に影響するようになっています。たとえば、文章の意味的な近さを見たいのか、数値特徴の絶対差を見たいのか、ベクトル長に意味を持たせたいのかによって、自然な指標は変わります。つまり、コサイン類似度とユークリッド距離との違いは、単なる数学の知識ではなく、ベクトル検索を正しく設計するための基礎でもあります。本記事では、まずベクトル類似度指標そのものの考え方を整理したうえで、コサイン類似度とユークリッド距離の数式的意味、正規化との関係、埋め込み検索での使い分け、実務での判断ポイントまでを順番に掘り下げていきます。
1. ベクトル類似度指標とは
ベクトル同士を比較するときに重要なのは、「近い」とは何を意味するのかを先に決めることです。数値として似ていることと、意味として似ていることは、必ずしも同じではありません。この章では、まずベクトル比較の土台になる考え方を整理し、そのうえでコサイン類似度とユークリッド距離がそれぞれどの位置にある指標なのかを明確にしていきます。
ベクトルの比較は一見すると単純なようでいて、実際にはかなり設計的な判断を含みます。なぜなら、同じベクトル空間でも、何を重要とみなすかによって「自然な近さ」の定義が変わるからです。そのため、最初にこの前提を押さえておくことで、後の数式や実務的な使い分けも理解しやすくなります。
1.1 距離と類似度の考え方
ベクトル比較では、「距離」と「類似度」という二つの言葉が頻繁に使われます。距離は一般に小さいほど近いことを意味し、類似度は一般に大きいほど似ていることを意味します。表面的には逆方向の尺度に見えますが、どちらも二つのベクトルの関係を数値化しているという点では共通しています。ただし、この二つは単なる言い換えではありません。何を基準に近さを測っているのかによって、同じベクトル同士でも距離では遠く、類似度では高く見えることがあります。つまり、距離と類似度は同じ問題を別の角度から見ているようでいて、実際には「何を重要視するか」が違えば結果も変わるものです。
実務で混乱が起きやすいのは、「どちらも近さを測るのだから、使い分けはそこまで重要ではない」と感じてしまう点です。しかし実際には、文章検索のように方向の近さが意味を持つ問題もあれば、数値特徴の絶対差そのものが重要な問題もあります。前者では類似度中心の見方が自然になりやすく、後者では距離中心の見方が自然になります。つまり、ベクトル比較では「どちらが一般に優れているか」を考えるより、「自分の問題にとって自然な近さはどちらか」を考えることのほうがはるかに重要です。
1.2 コサイン類似度とユークリッド距離の位置づけ
コサイン類似度とユークリッド距離は、ベクトル比較の中でも特に代表的な二つです。コサイン類似度は、二つのベクトルがどれだけ同じ方向を向いているかを測ります。一方、ユークリッド距離は、二つのベクトルが空間上でどれだけ離れているかを測ります。この違いは、数学的な見た目以上に本質的です。なぜなら、同じ方向を向いていても長さが違えば、コサイン類似度では高く評価されやすい一方、ユークリッド距離では離れているとみなされるからです。つまり、この二つは「何を似ているとみなすか」の哲学そのものが異なる指標だと言えます。
この位置づけを理解すると、なぜ文章埋め込み検索ではコサイン類似度がよく使われ、数値特徴量ベースの問題ではユークリッド距離が自然になることがあるのかが見えてきます。文章埋め込みでは、文書長や表現量そのものより、意味方向の近さのほうが重要になりやすいです。一方、センサー値や位置情報のような特徴量では、絶対値の差がそのまま意味を持つことがあります。つまり、コサイン類似度とユークリッド距離は、単なる定番二択ではなく、見る対象の性質と深く結びついた指標なのです。
2. コサイン類似度とは
コサイン類似度は、文章埋め込みや意味検索の文脈で特によく登場する指標です。しかし、名前だけ知っていても、なぜそれが使われるのか、何を見ているのかが曖昧なままだと、実務での判断に使いにくくなります。この章では、コサイン類似度が測っているものを数式と直感の両方から整理していきます。
重要なのは、コサイン類似度が「ベクトル長をあまり重視しない」ように作られていることです。この性質は、文章や埋め込みの比較では強みになりやすい一方、絶対量を見たい問題では弱みにもなります。つまり、コサイン類似度の本質を理解するには、長さを弱めて向きを見るという発想をしっかり押さえる必要があります。
2.1 数式の意味
コサイン類似度は、二つのベクトルの内積を、それぞれの長さの積で割ることで定義されます。式で表すと、二つのベクトルのなす角の余弦値を取っている形になります。数式自体は比較的短いですが、意味は非常に重要です。なぜなら、この式はベクトル長の影響を取り除き、「どちらの方向を向いているか」を中心に比較するよう設計されているからです。もし分母の長さがなければ、長いベクトルほど値が大きくなりやすく、方向の純粋な比較になりません。つまり、コサイン類似度の数式は、方向比較のために大きさを相対化している式だと理解すると分かりやすいです。
この考え方は、文章埋め込みとの相性がとてもよいです。たとえば、短い質問文と長い説明文でも、意味方向が近ければ類似度を高く評価したい場面は多くあります。文字数や情報量の差がそのまま意味の差ではないからです。そのため、コサイン類似度は、表面的な量より意味的な方向を拾いたい問題に向いています。つまり、この数式がしていることは、単なる計算ではなく、「意味方向を近さの中心に置く」という設計判断そのものです。
2.2 方向の近さを見るとはどういうことか
方向の近さを見るというのは、二つのベクトルがどちらを向いているか、つまりどの特徴の組み合わせを持っているかを比較することです。たとえば、(1,1)(1,1)(1,1) と (2,2)(2,2)(2,2) は大きさは違いますが、向きは同じです。そのため、コサイン類似度ではかなり高い値になります。逆に、(1,1)(1,1)(1,1) と (1,−1)(1,-1)(1,−1) のように方向が大きく異なるベクトルは、たとえ長さが近くても類似度は低くなります。つまり、コサイン類似度では「どれくらい大きいか」よりも、「どんな特徴方向を持っているか」のほうが重要になります。
この発想は、埋め込みベクトルを意味空間として見るとかなり自然です。文章埋め込みでは、各ベクトルは文書の意味的な位置を表しており、長さそのものよりも、どの話題や意味方向へ伸びているかのほうが関連性をよく表すことが多いからです。たとえば、「退職手続きの流れ」と「会社を辞めるときの申請方法」は、文の長さや表現方法が違っても、意味方向としてはかなり近い可能性があります。つまり、コサイン類似度は「似た意味方向なら近い」と考えたい場面で特に強い指標です。
2.3 コサイン類似度の強みと弱み
コサイン類似度の最大の強みは、ベクトル長の差に引っ張られにくいことです。これにより、長文と短文、情報量の違う文書同士でも、意味方向が近ければ自然に高い類似度を返しやすくなります。文章検索、意味検索、埋め込み検索では、この性質が非常に有効です。また、L2正規化したベクトルとの相性もよく、ベクトルデータベースや近似最近傍探索でも扱いやすいことが多いです。つまり、コサイン類似度は「意味方向中心で見たい」という場面で、理論的にも実装的にも自然な選択肢になりやすいのです。
一方で、ベクトル長に意味がある問題には向きません。たとえば、絶対量の差、強度、規模、スコアの大きさそのものが重要な場合には、長さの影響を弱めることがかえって問題になります。同じ方向を向いていても、大きさがまったく違うベクトルを「似ている」とみなしてしまうことがあるからです。つまり、コサイン類似度は非常に便利ですが、「大きさを見ないこと」が利点でもあり制約でもあります。この両面を理解したうえで使うことが大切です。
3. ユークリッド距離とは何か
ユークリッド距離は、二つのベクトルの間にある直線距離を測る方法です。学校で平面上の二点間距離を学んだときの考え方を、そのまま多次元空間へ拡張したものだと考えると分かりやすいです。そのため、コサイン類似度のように向きだけを見るのではなく、各成分の差をそのまま距離へ反映します。つまり、ユークリッド距離は「空間のどこにあるか」を中心に比較する指標です。
この性質は、数値特徴量や座標のように、絶対差そのものが意味を持つ場面では非常に自然です。しかし、埋め込み検索のように方向の近さのほうが重要な問題では、そのままだと長さやスケール差の影響を受けすぎることがあります。つまり、ユークリッド距離は基本に忠実で分かりやすい一方で、埋め込みのような意味空間では使い方に注意が必要な指標でもあります。
3.1 数式の意味
ユークリッド距離は、各次元の差を二乗して足し合わせ、その平方根を取ることで求められます。これは直感的に言えば、「二つの点が空間の中でどれだけ離れているか」をそのまま数値化しているということです。どこか一つの次元でも大きな差があれば距離は大きくなり、すべての次元で差が小さければ距離は小さくなります。つまり、ユークリッド距離の数式は、各成分の絶対差をまっすぐ距離へ反映する仕組みです。
この式の重要な点は、ベクトル長そのものも距離の中に含まれてくることです。つまり、向きが同じでも、原点からの距離が違えば、二つのベクトルは離れているとみなされます。これはコサイン類似度との決定的な違いです。コサイン類似度が長さを割って消すのに対し、ユークリッド距離は長さ差も位置差としてそのまま残します。つまり、ユークリッド距離は「方向より位置」を重視する式だと言えます。
3.2 長さと位置の差を見るとはどういうことか
ユークリッド距離では、同じ方向を向いていても、長さが違えば距離が生まれます。たとえば、(1,1)(1,1)(1,1) と (10,10)(10,10)(10,10) は方向としてはまったく同じですが、ユークリッド距離ではかなり離れていると判定されます。つまり、ユークリッド距離にとって重要なのは、意味方向の一致ではなく、空間内での位置差です。この見方は、物理座標、測定値、数量差のように「どれだけ違うか」がそのまま意味を持つ問題では非常に自然です。
一方、文章埋め込みでは、同じ方向の意味を持つが情報量だけ違う、表現量だけ違う、といったケースが多くあります。その場合、位置差をそのまま重く評価すると、意味的には近いのに離れていると判定してしまうことがあります。つまり、ユークリッド距離は位置差の比較としては素直ですが、その素直さが埋め込み空間では逆に不自然に働く場合もあります。ここが、使いどころを見極めるうえで重要な点です。
3.3 ユークリッド距離の強みと弱み
ユークリッド距離の強みは、絶対差をそのまま扱えることです。数値特徴量がそのまま比較対象になっている問題、物理量や座標を扱う問題、あるいは正規化せずに位置差そのものを見たい問題では、とても自然な指標です。また、数学的にも直感的にも理解しやすいため、特徴量設計が明確な場面では解釈しやすいという利点があります。つまり、ユークリッド距離は「差の大きさそのものが意味を持つ」場面では非常に強い指標です。
一方で、長さやスケールの影響を強く受けるため、意味方向中心の埋め込み検索にはそのままでは向きにくいことがあります。特に、長さが違うだけで意味は近いベクトルまで遠くしてしまう点は、文章検索のような場面では不利に働きやすいです。つまり、ユークリッド距離は素直で分かりやすいがゆえに、「方向より位置を見る」という性質がはっきり出ます。そのため、埋め込み検索に使うなら、正規化との関係まで含めて考える必要があります。
4. コサイン類似度とユークリッド距離との違い
ここまでの説明を踏まえると、コサイン類似度とユークリッド距離との違いは、単純な「別の計算方法」というより、「どの性質を近さとして採用するか」の違いだと言えます。コサイン類似度は向きを重視し、ユークリッド距離は位置差を重視します。この違いがあるため、同じベクトル集合に対しても、順位付けや解釈がかなり変わることがあります。つまり、この二つは互いに代替可能な完全な置き換えではなく、前提となる近さの考え方が異なる指標です。
実務では、この違いを感覚ではなく、明確な比較軸で理解しておくことが重要です。そうしないと、「検索結果が変わったがなぜか分からない」「正規化したら急に順位が変わった」といったときに原因を説明しにくくなります。この章では、特に差が出やすいポイントを順番に整理していきます。
4.1 何を近さとみなすかの違い
コサイン類似度が見ているのは、二つのベクトルがどれだけ同じ方向を向いているかです。そのため、長さが違っても方向が同じなら高く評価されやすくなります。一方、ユークリッド距離が見ているのは、二つのベクトルが空間上でどれだけ離れているかです。そのため、方向が同じでも長さが違えば距離は離れます。つまり、この二つの最も本質的な違いは、「向きの一致」を重視するか、「位置差の小ささ」を重視するかにあります。
この違いは、使う場面によって決定的になります。文章埋め込みでは、意味方向の近さが大切なのでコサイン類似度が自然なことが多いです。一方、数値特徴量の差や大きさが直接意味を持つ問題では、ユークリッド距離のほうが素直です。つまり、どちらを選ぶかは、数式の好みではなく、「今回の問題で何を近いと呼びたいか」を先に定義することで決まります。
4.2 ベクトル長の影響の違い
ベクトル長の影響は、この二つの差を理解するうえで非常に重要です。コサイン類似度は分母で長さを割るため、ベクトル長の違いをかなり弱めます。逆にユークリッド距離は、長さの差も位置差の一部としてそのまま扱います。そのため、同じ意味方向でも長さが違うベクトルに対して、コサイン類似度は似ているとみなしやすく、ユークリッド距離は遠いとみなしやすいのです。つまり、ベクトル長に意味を持たせたいかどうかが、この二つを選ぶ大きな判断基準になります。
この違いは、埋め込み検索のような高次元空間で特に効いてきます。文章ベクトルでは、長さが単に情報量や文長を反映しているだけで、意味そのものとは強く結びつかないことがあります。その場合、長さ差を強く見るユークリッド距離は不利になりやすいです。つまり、ベクトル長を雑音として扱いたいのか、信号として扱いたいのかを考えることが、指標選択では非常に重要です。
4.3 同じ方向でも結果が違う例
たとえば、(1,1)(1,1)(1,1) と (2,2)(2,2)(2,2) を考えると、両者はまったく同じ方向を向いています。そのため、コサイン類似度は非常に高くなります。しかし、ユークリッド距離では差分 (1,1)(1,1)(1,1) があるため、距離はゼロにはなりません。さらに (1,1)(1,1)(1,1) と (10,10)(10,10)(10,10) のように差が大きくなると、コサイン類似度は依然として高いままですが、ユークリッド距離はかなり大きくなります。つまり、「同方向=近い」と考えるか、「位置が違うなら遠い」と考えるかで、結果は大きく変わるのです。
この例は単純ですが、埋め込み検索の実務でも本質は同じです。文章の意味方向が近いが表現量が違うケースでは、コサイン類似度のほうが自然な順位を返しやすいです。逆に、絶対値の差そのものに意味があるケースでは、ユークリッド距離のほうが自然です。つまり、この違いは単なる教科書的な例ではなく、検索品質そのものに直結する判断基準です。
4.4 高次元空間での解釈の違い
高次元空間では、ベクトルの見た目を人間が直感で理解するのが難しくなります。そのため、指標が何を見ているかを数式レベルで理解していないと、結果の解釈を誤りやすくなります。特に埋め込み空間では数百次元以上になることが多く、ベクトル長の意味や各次元の差をそのまま感覚で捉えることはできません。つまり、高次元では「近い」「遠い」を直感で言うのではなく、指標の性質にもとづいて解釈する必要があります。
このとき、コサイン類似度は「意味方向を見る指標」、ユークリッド距離は「位置差を見る指標」と理解しておくと、かなり整理しやすくなります。どちらも高次元で使えますが、高次元での意味づけは同じではありません。つまり、次元が高くなるほど、コサイン類似度とユークリッド距離との違いは、感覚ではなく定義の違いとして理解することが重要になります。
4.4.1 比較表
| 比較項目 | コサイン類似度 | ユークリッド距離 |
|---|---|---|
| 何を重視するか | 向きの近さ | 位置差の小ささ |
| ベクトル長の影響 | 弱い | 強い |
| 同じ方向・異なる長さ | 似ているとみなしやすい | 遠いとみなしやすい |
| 埋め込み検索との相性 | 高いことが多い | 正規化や用途次第 |
| 数値特徴との相性 | 条件付き | 高いことが多い |
5. 正規化の影響
コサイン類似度とユークリッド距離との違いを語るとき、正規化を抜きにすることはできません。特にL2正規化は、各ベクトルの長さを1に揃えるため、ユークリッド距離が持っていた長さ依存性をかなり弱めます。その結果、正規化後のユークリッド距離は、かなりコサイン類似度に近い振る舞いを見せることがあります。つまり、正規化は前処理であると同時に、「どの指標がどんな意味を持つか」を変える重要な操作です。
埋め込み検索の実務では、ベクトルを正規化してから保存・検索することも多く、この場合はコサイン類似度とユークリッド距離の差が思ったほど大きくないことがあります。ただし、差が完全になくなるわけではなく、値の解釈や実装上の意味は依然として異なります。つまり、正規化後は両者が近づくが、同じになるわけではないという理解が必要です。
5.1 L2正規化とは何か
L2正規化とは、各ベクトルをその長さで割り、長さ1の単位ベクトルへ変換する処理です。これによって、比較対象のベクトルはすべて同じ大きさになり、長さの差が消えます。つまり、L2正規化の本質は「大きさの違いをなくして、向きの違いを主役にすること」にあります。この処理は、文章埋め込みや意味検索のように、長さ差より意味方向の差を見たい場面で非常に相性がよいです。
また、L2正規化は数式上も扱いやすい性質を持っています。長さが揃うことで、内積、コサイン類似度、ユークリッド距離の関係が整理しやすくなります。つまり、正規化は単にベクトルを小さくする処理ではなく、比較の軸を整えるための基盤操作だと言えます。ここを理解しておくと、距離関数の違いもかなり見通しよくなります。
5.2 正規化後に何が変わるのか
L2正規化後のベクトルでは、コサイン類似度とユークリッド距離の順位がかなり近づきます。単位ベクトル同士では、ユークリッド距離の二乗が 2(1−cosθ)2(1-\cos\theta)2(1−cosθ) で表せるため、コサイン類似度が高いほどユークリッド距離は小さくなりやすいからです。つまり、正規化後はユークリッド距離も実質的に方向差を見る指標に近づきます。このため、正規化済み埋め込み空間では、コサイン類似度とユークリッド距離が似た検索順位を返すことがあります。
ただし、これは「完全に同じものになる」という意味ではありません。コサイン類似度は類似度であり、値が大きいほど近いことを意味します。一方、ユークリッド距離は距離であり、値が小さいほど近いことを意味します。つまり、関係が強くなっても、値の解釈や実装上の扱いは異なります。この違いを無視すると、指標を取り替えても同じだと誤解しやすくなります。
5.3 どちらの差が縮まるのか
正規化によって差が縮まるのは、主にユークリッド距離側です。もともとユークリッド距離は長さ差と位置差を両方見ていましたが、長さを揃えることで、位置差の中身が実質的に向き差へ近づきます。一方、コサイン類似度は最初から向き中心の指標なので、正規化によって本質が変わるわけではありません。つまり、正規化はユークリッド距離をコサイン類似度寄りへ引き寄せる操作だと考えると分かりやすいです。
この理解は実務でも重要です。もし埋め込みモデルや検索基盤がL2正規化を前提としているなら、ユークリッド距離を使ってもかなりコサイン類似度に近い結果が得られることがあります。逆に、正規化していないなら、両者の差はかなり大きくなり得ます。つまり、距離関数の比較は、必ず正規化の有無とセットで考えるべきです。
5.4 正規化を入れるときの実務的注意点
正規化は便利ですが、無条件に入れればよいわけではありません。ベクトル長そのものに意味がある場合、L2正規化によって重要な信号を消してしまうことがあります。たとえば、埋め込みモデルが長さに信頼度や強度のような情報を持たせている場合、それを全部1へ揃えると情報が失われます。つまり、正規化は汎用的な改善策ではありますが、「何を残したいか」を考えずに適用すると逆効果になることもあります。
そのため、実務では正規化を前提にするのではなく、モデル前提と評価結果を見て判断する必要があります。特に、検索順位、推薦候補、まとまり分け結果などを比較しながら、「正規化したほうが自然な近さになるのか」を検証することが重要です。つまり、正規化は理論上の便利な手段であると同時に、評価を伴って使うべき設計要素です。
6. Embedding検索での使い分け
埋め込み検索では、コサイン類似度が定番として扱われることが多いです。これは、文章埋め込みが意味方向の近さを反映するように学習されていることが多く、文書長や表面的な量差よりも方向の一致のほうが自然な近さになるからです。しかし、だからといってユークリッド距離が常に不適切というわけではありません。正規化済み埋め込みであれば、ユークリッド距離もかなり近い順位を返すことがありますし、扱う特徴空間によってはユークリッド距離のほうが自然なこともあります。つまり、埋め込み検索での使い分けは、「文章なら必ずコサイン類似度」という暗記ではなく、モデルと問題設定の整合で考えるべきです。
また、実務ではコサイン類似度とユークリッド距離のほかに内積もよく使われます。特にベクトルデータベースや近似最近傍探索では、正規化済みベクトルに対して内積を使い、実質的にコサイン類似度に近い振る舞いを得ることも多いです。つまり、埋め込み検索では表面上の名称より、「この比較が何を見ているか」を理解しておくことが大切です。この理解があると、検索基盤の設定もかなり読みやすくなります。
6.1 テキストEmbeddingでコサイン類似度がよく使われる理由
文章埋め込みでは、文書の長さそのものより、意味方向の近さのほうが重要になることが多いです。短い質問と長い説明文でも、意味が近ければ関連文書として上位に出したい場面は多くあります。このとき、コサイン類似度は長さ差を相対化しながら方向の一致を見られるため、検索結果が自然になりやすいです。つまり、文章埋め込みでコサイン類似度がよく使われるのは、理論上の美しさだけでなく、欲しい検索結果と合いやすいからです。
さらに、文章埋め込みモデルの多くは、実質的に方向中心の意味空間を作りやすいように使われます。そのため、コサイン類似度はモデル側の前提ともかみ合いやすいです。もちろん、すべてのモデルが完全にそうだとは限りませんが、一般に文章の意味検索ではコサイン類似度がかなり自然な出発点になります。つまり、まずコサイン類似度で試すという実務判断には、きちんとした理由があります。
6.2 ユークリッド距離が向くケース
ユークリッド距離が向くのは、絶対差や位置差そのものに意味がある場合です。たとえば、数値特徴量ベースの近傍探索、物理座標、センサー値、あるいは正規化済みでない特徴空間では、ユークリッド距離のほうが自然なことがあります。また、L2正規化した埋め込みベクトルを使うなら、ユークリッド距離でもコサイン類似度に近い順位が得られることがあります。つまり、ユークリッド距離は文章検索では少数派に見えても、条件が合えば十分に合理的な選択肢です。
重要なのは、ユークリッド距離を「古い指標」や「単純すぎる指標」として片づけないことです。絶対差をそのまま扱う問題では、むしろ最も素直で解釈しやすい指標になることがあります。つまり、ユークリッド距離が向くかどうかは、問題の構造次第です。埋め込みという言葉だけで一律に避けるべきではありません。
6.3 クラスタリングや推薦での考え方
まとまり分けや推薦でも、コサイン類似度とユークリッド距離の違いは重要です。たとえば、意味方向が似ているものをまとめたいならコサイン類似度が自然ですし、値の絶対差が近いものをまとめたいならユークリッド距離が自然です。推薦でも、嗜好方向を重視するならコサイン類似度が向きやすく、数量差や距離差そのものが重要な特徴ならユークリッド距離が向きます。つまり、検索以外の問題でも、「何を近さとみなすか」という問いは同じように重要です。
また、クラスタリング手法によっては、前提とする距離関数が強く効くことがあります。そのため、コサイン類似度とユークリッド距離のどちらを使うかは、後段のアルゴリズムとも一緒に考える必要があります。つまり、指標は単独で決めるものではなく、下流の手法や評価指標とも結びつけて考えるべきです。
6.4 内積との違いも押さえる
内積は、向きと長さの両方の影響を受ける指標です。L2正規化していない場合、ベクトルが長いだけで値が大きくなりやすいため、意味方向だけを見たい用途では少し危うくなります。一方、L2正規化済みであれば、内積はコサイン類似度とほぼ同じ意味になります。そのため、ベクトルデータベースでは内積を使いながら、実質的にはコサイン類似度に近い検索をしていることも多いです。つまり、埋め込み検索の実務では、コサイン類似度、ユークリッド距離、内積の三つを関係ごと理解しておくことが重要です。
7. 数式で見る関係性
ここまで直感的な違いを中心に見てきましたが、コサイン類似度とユークリッド距離との違いは、数式上の関係として整理するとさらに分かりやすくなります。特に、L2正規化後のベクトルでは両者の関係がかなり明確になります。これを押さえておくと、「正規化したらなぜ似た順位になるのか」「なぜベクトルデータベースでは内積でもよいのか」といった疑問も理解しやすくなります。
実務では式そのものを毎回使うわけではありませんが、関係を知っておくことには大きな価値があります。というのも、検索基盤やライブラリによっては距離関数の表現が違って見えても、実際にはかなり近いことをしている場合があるからです。つまり、数式の関係を知ることは、実装や設定を誤解しないためにも役立ちます。
7.1 正規化前は別物として扱うべき理由
正規化していないベクトルに対しては、コサイン類似度とユークリッド距離はかなり別物として扱うべきです。コサイン類似度は長さを割って消している一方、ユークリッド距離は長さ差もそのまま評価しているからです。そのため、同じ方向でも大きさが違えば、コサイン類似度では高く、ユークリッド距離では大きな差になります。つまり、正規化前の両者は、互いに代替しやすい関係ではありません。
この違いを無視して「どちらもベクトル比較だからほぼ同じだろう」と考えると、埋め込み検索の品質を説明できなくなります。たとえば、モデルが方向中心の意味空間を作っているのに、長さ差を強く見るユークリッド距離を入れれば、上位候補がかなり変わることがあります。つまり、正規化前は距離関数の違いがそのまま順位差として表れやすく、慎重に扱う必要があります。
7.2 L2正規化後の関係式
L2正規化した二つの単位ベクトル x\mathbf{x}x と y\mathbf{y}y に対しては、ユークリッド距離の二乗は次のように書けます。
∥x−y∥2=2−2(x⋅y)\|\mathbf{x}-\mathbf{y}\|^2 = 2 - 2(\mathbf{x}\cdot\mathbf{y})∥x−y∥2=2−2(x⋅y)
単位ベクトルでは内積がそのままコサイン類似度になるので、これは次のようにも書けます。
∥x−y∥2=2(1−cosθ)\|\mathbf{x}-\mathbf{y}\|^2 = 2(1-\cos\theta)∥x−y∥2=2(1−cosθ)
この式が意味しているのは、L2正規化後のベクトルでは、コサイン類似度が高いほどユークリッド距離が小さくなるということです。つまり、正規化後は両者がかなり強く結びつきます。検索順位も似やすくなるため、「正規化後ならどちらを使っても近い結果になる」ことが多いのです。
7.3 なぜ順位が近づくのか
順位が近づく理由は、正規化によってベクトル長という変数が消えるからです。もともとユークリッド距離がコサイン類似度と違うのは、位置差に長さの違いも含まれていたからですが、長さを揃えることで、残る違いはほぼ向き差になります。つまり、ユークリッド距離も実質的に角度の違いを見ている状態に近づきます。このため、正規化済み埋め込みでは両者の検索順位がかなり近くなりやすいです。
ただし、値のスケールや解釈は依然として違います。コサイン類似度は大きいほど似ており、ユークリッド距離は小さいほど近いです。つまり、順位が似ることと、同じ指標であることは別問題です。この点を押さえておくと、実装時に混乱しにくくなります。
7.4 理論が実務で意味を持つ場面
この数式的関係が実務で意味を持つのは、ベクトルデータベースや近似最近傍探索を選ぶときです。たとえば、ある検索基盤がコサイン類似度を直接扱わず、内積やL2距離を前提にしていたとしても、L2正規化済みであればかなり近い意味で使えることがあります。つまり、理論上の関係を知っておくことで、「この基盤ではこの指標しか使えないから困る」と早合点せずに済みます。実務では、こうした関係知識が設計の柔軟性につながります。
8. Pythonで違いを確認する
コサイン類似度とユークリッド距離との違いは、理屈だけで理解するより、小さな例で実際に計算してみるとかなり明確になります。特に、同じ方向だが長さだけが違うベクトルと、方向そのものが異なるベクトルを比べると、それぞれの指標が何を重視しているかがよく分かります。つまり、簡単な確認コードを持っておくと、指標の違いを直感的に理解しやすくなります。
以下の例では、同方向・異長さのケースと、方向が大きく違うケースを比較しています。コード自体は短いですが、指標の性質をかなりはっきり示してくれます。実務でも、こうした小さな検証を先に行っておくと、距離関数の選定で迷いにくくなります。
ファイル名:similarity_compare.py
import numpy as np
def cosine_similarity(x: np.ndarray, y: np.ndarray) -> float:
x_norm = np.linalg.norm(x)
y_norm = np.linalg.norm(y)
if x_norm == 0 or y_norm == 0:
return 0.0
return float(np.dot(x, y) / (x_norm * y_norm))
def euclidean_distance(x: np.ndarray, y: np.ndarray) -> float:
return float(np.linalg.norm(x - y))
a = np.array([1.0, 1.0])
b = np.array([2.0, 2.0]) # a と同じ方向だが長さが違う
c = np.array([1.0, -1.0]) # a と方向が大きく異なる
for name, vec in {"b": b, "c": c}.items():
print(f"a vs {name}")
print(" cosine similarity =", cosine_similarity(a, vec))
print(" euclidean distance =", euclidean_distance(a, vec))
この例で a と b を比べると、コサイン類似度は非常に高くなります。なぜなら、両者は同じ方向を向いているからです。しかしユークリッド距離では、b のほうが大きいため、差がしっかり距離として現れます。つまり、コサイン類似度は「方向が同じならかなり似ている」と判断し、ユークリッド距離は「位置差があるなら離れている」と判断していることが分かります。
一方で a と c を比べると、方向がかなり異なるため、コサイン類似度は低くなります。ユークリッド距離も大きくなりますが、その理由は向きの違いが位置差として反映されているからです。つまり、この小さな例だけでも、コサイン類似度は方向中心、ユークリッド距離は位置差中心であることが非常によく理解できます。こうした確認を一度しておくと、抽象的な説明がかなり実感を持って理解できるようになります。
9. 実務での選び方
実務でコサイン類似度とユークリッド距離を選ぶときは、「どちらが一般に優れているか」を問うより、「どの問題で、何を近さと呼びたいのか」を明確にすることが重要です。文章埋め込みや意味検索では、まずコサイン類似度を基準に考えるのが自然です。一方で、数値特徴量の絶対差が意味を持つ問題では、ユークリッド距離のほうが素直です。つまり、選び方の出発点は、理論の暗記ではなく、問題設定そのものにあります。
そのうえで、モデル前提、正規化の有無、ベクトルデータベースの対応、近似索引の設定、評価セットでの実測結果を順番に見ていくのが現実的です。実務では、理屈上よさそうでも、自分たちのデータでは期待した順位にならないことがあります。つまり、最終的には小さくても評価用データを用意し、実際に比較して決めることが欠かせません。ここを丁寧にやることで、距離関数選びはかなり安定します。
9.1 まず何を近さとみなしたいかを決める
最初に考えるべきなのは、自分たちが「何を近い」と呼びたいのかです。意味方向の近さを見たいならコサイン類似度が自然ですし、数値としての差そのものを見たいならユークリッド距離が自然です。この整理をせずに、定番だからという理由だけで選んでしまうと、後から結果解釈が難しくなります。つまり、距離関数選びは実装上の設定ではなく、問題定義の一部だと考えるべきです。
たとえば、社内文書検索、FAQ検索、検索拡張生成の前段検索であれば、意味方向が近いことを重視したい場面が多いです。一方、座標系、数値測定値、行動量の差をそのまま見たい問題なら、絶対差を重視したいことが多いです。つまり、用途の言葉を数学へ翻訳するのが、指標選択の最初の仕事になります。
9.2 モデル前提と正規化の有無を見る
次に重要なのは、使っている埋め込みモデルがどのような前提でベクトル空間を作っているかです。文章埋め込みモデルの多くは方向中心で使われることが多く、その場合はコサイン類似度や正規化後の内積が自然です。逆に、ベクトル長に意味がありそうな設計なら、ユークリッド距離や未正規化の扱いも検討する必要があります。つまり、距離関数はモデルから独立して選ぶのではなく、モデルと一体で考える必要があります。
さらに、L2正規化を入れるかどうかでも事情は大きく変わります。正規化済みなら、ユークリッド距離とコサイン類似度の順位はかなり近づきます。つまり、「どの距離関数を使うか」だけでなく、「その前にベクトルをどう整形するか」も判断材料になります。実務では、この二つを別々に考えないことが重要です。
9.3 評価セットで比較する
最終的には、小さくてもよいので評価セットを作り、コサイン類似度、ユークリッド距離、必要なら内積も含めて比較するのが最も確実です。たとえば、代表的な問い合わせと正解文書の組を数十件用意し、それぞれの距離関数で上位候補を見比べるだけでも、かなり判断しやすくなります。つまり、距離関数選びは理論だけで完結せず、必ず実データで閉じる必要があります。
この評価では、再現率や適合率のような指標だけでなく、実際に返ってくる候補の中身を見ることも重要です。なぜなら、順位が少し違うだけでも、利用者体験や検索拡張生成の根拠品質に大きな差が出ることがあるからです。つまり、実務での距離関数選びは、数式、モデル、前処理、評価結果の四つをまとめて見る作業だと言えます。
9.4 迷ったときの実践的な考え方
もし文章埋め込み検索で迷ったなら、まずはL2正規化したうえでコサイン類似度、あるいはそれに近い内積を基準に試すのが現実的です。一方、数値差が意味を持つ特徴量問題なら、まずはユークリッド距離を軸に考えるのが自然です。つまり、完全な白紙から選ぶというより、問題の種類ごとに自然な出発点を持つことが実務では役立ちます。
そのうえで、検索基盤の都合や評価結果によって必要なら調整する、という流れがもっとも安定します。最初から理想解を決め打ちするより、自然な基準線を置き、評価しながら詰めていくほうが失敗しにくいです。つまり、距離関数選びは一回の決断というより、比較と確認を通じて整える設計作業だと考えると進めやすくなります。
9.4.1 判断の目安表
| 判断基準 | 向きやすい選択 |
|---|---|
| 意味方向を見たい | コサイン類似度 |
| 絶対差を見たい | ユークリッド距離 |
| 文章埋め込み検索 | コサイン類似度を起点に検討 |
| 数値特徴量中心 | ユークリッド距離を起点に検討 |
| L2正規化済み | 両者の順位は近づきやすい |
| 実務で最終確認 | 評価セットで比較する |
おわりに
コサイン類似度とユークリッド距離との違いは、単なる計算方法の違いではなく、「何を近さとみなすか」の違いにあります。コサイン類似度はベクトルの向きを重視し、ユークリッド距離は位置差そのものを重視します。そのため、意味方向を見たい文章埋め込み検索ではコサイン類似度が自然になりやすく、数値特徴量の絶対差を見たい問題ではユークリッド距離が自然になりやすいです。つまり、この二つは優劣で選ぶものではなく、問題設定に応じて使い分けるべき指標です。
また、正規化を入れると両者の差はかなり縮まります。特にL2正規化後は、ユークリッド距離もかなり方向差に近い挙動を示すため、検索順位が似やすくなります。ただし、値の意味や実装上の扱いは依然として異なりますし、ベクトル長に意味がある場合には正規化自体が不適切なこともあります。つまり、距離関数の違いは、正規化、埋め込みモデル、検索基盤まで含めて理解する必要があります。
最終的に大切なのは、「定番だから」「直感的だから」という理由で選ばないことです。何を似ているとみなしたいのか、ベクトル長に意味があるのか、モデルがどのような空間を作っているのかを整理し、小さくてもよいので実データで比較することが重要です。そうすることで、コサイン類似度とユークリッド距離は単なる数学の知識ではなく、ベクトル検索品質を支える実践的な設計判断として活きてきます。
EN
JP
KR