免费余弦相似度计算器

向量维度

向量 A

向量 B

结果

输入向量分量
计算余弦相似度

余弦相似度是一种通过计算向量之间的夹角的余弦值来度量两个向量相似程度的指标。它广泛应用于机器学习、自然语言处理和信息检索中,因为它关注方向而非大小。这个余弦相似度计算器可以让您快速评估任意一对向量的相似度、夹角和余弦距离。

如何使用这个余弦相似度工具

  1. 选择您要比较的向量维度(长度)。
  2. 将向量 a 和向量 b 的分量输入到相应的字段中。计算器会自动强制等长;如果您的向量长度不同,只需在较短向量上补零。
  3. 结果——余弦相似度 SCS_C、夹角 θ\theta(度数或弧度)和余弦距离 DCD_C——会即时显示。
  4. 详细的计算日志会显示每一步,从点积到最后除法,让您能手动核对计算。

什么是余弦相似度?

余弦相似度通过评估两个非零向量之间的夹角的余弦来衡量它们之间的相似度。数学上,对于向量 a⃗\vec{a} 和 b⃗\vec{b}:

SC(a⃗,b⃗)=cos⁡(θ)=a⃗⋅b⃗∥a⃗∥∥b⃗∥S_C(\vec{a},\vec{b}) = \cos(\theta) = \frac{\vec{a} \cdot \vec{b}}{\|\vec{a}\| \|\vec{b}\|}

结果始终位于区间 [−1,1][-1, 1]:

  • SC=1S_C = 1 表示向量完全同向(θ=0∘\theta = 0^\circ)。
  • SC=0S_C = 0 表示向量正交(θ=90∘\theta = 90^\circ)。
  • SC=−1S_C = -1 表示向量完全相反(θ=180∘\theta = 180^\circ)。

由于不考虑大小,即使两个向量的长度相差巨大,它们的相似度也可以为 1。这一特性使余弦相似度特别适用于比较文档或图像,因为这些场景中特征的尺度可能变化而变化而相对重要性保持不变。

推导余弦相似度公式

上述公式可以直接从点积推出。对于具有 nn 个分量的向量 a⃗\vec{a} 和 b⃗\vec{b}:

a⃗⋅b⃗=∑i=1naibi\vec{a} \cdot \vec{b} = \sum_{i=1}^{n} a_i b_i ∥a⃗∥=∑i=1nai2,∥b⃗∥=∑i=1nbi2\|\vec{a}\| = \sqrt{\sum_{i=1}^{n} a_i^2}, \qquad \|\vec{b}\| = \sqrt{\sum_{i=1}^{n} b_i^2}

因此:

SC(a⃗,b⃗)=∑i=1naibi∑i=1nai2∑i=1nbi2S_C(\vec{a},\vec{b}) = \frac{\sum_{i=1}^{n} a_i b_i}{\sqrt{\sum_{i=1}^{n} a_i^2} \sqrt{\sum_{i=1}^{n} b_i^2}}

这就是计算器用于计算余弦相似度和相关向量夹角的公式。

示例:计算余弦相似度

让我们看一个具体例子。考虑:

a⃗=[1,5],b⃗=[−1,3]\vec{a} = [1, 5],\quad \vec{b} = [-1, 3]
  • 点积:1⋅(−1)+5⋅3=−1+15=141\cdot(-1) + 5\cdot3 = -1 + 15 = 14。
  • a⃗\vec{a} 的大小:12+52=26≈5.099\sqrt{1^2 + 5^2} = \sqrt{26} \approx 5.099。
  • b⃗\vec{b} 的大小:(−1)2+32=10≈3.162\sqrt{(-1)^2 + 3^2} = \sqrt{10} \approx 3.162。
  • 余弦相似度:SC=145.099×3.162≈0.868S_C = \frac{14}{5.099 \times 3.162} \approx 0.868。

正值确认向量大致指向相同方向(夹角 ≈29.8∘\approx 29.8^\circ)。

在 Python 中实现余弦相似度

在数据科学工作流中,通常使用 Python 和 NumPy 来计算余弦相似度。实现使用了点积和向量范数:

import numpy as np

def cosine_similarity(a, b):
    dot_product = np.dot(a, b)
    norm_a = np.linalg.norm(a)
    norm_b = np.linalg.norm(b)
    return dot_product / (norm_a * norm_b)

这个函数可以用于任意一对等长数组,与工具执行的计算完全相同。

余弦距离:向量有多不同?

余弦距离定义为余弦相似度的补数:

DC(a⃗,b⃗)=1−SC(a⃗,b⃗)D_C(\vec{a},\vec{b}) = 1 - S_C(\vec{a},\vec{b})

其范围从 0(相同方向)到 2(相反方向)。虽然直观,但余弦距离不是真正的距离度量,因为它不满足三角不等式。对于某些三元组向量,DC(a⃗,c⃗)D_C(\vec{a},\vec{c}) 可能大于 DC(a⃗,b⃗)+DC(b⃗,c⃗)D_C(\vec{a},\vec{b}) + D_C(\vec{b},\vec{c}),因此在某些几何算法中应谨慎使用。

重要说明

  • 零向量:对于全为零的向量,余弦相似度无定义,因为其大小为 0,导致公式分母为零。
  • 负的相似度:负值表示向量之间的夹角超过 90∘90^\circ,意味着它们更不相似而非相似。最小值 −1-1 对应于完全相反的方向。
  • 大小无关性:请记住,相似度只反映方向对齐。两个长度非常不同但方向相同的向量仍然会得到 1 分。

常见问题

1. 什么是余弦相似度?

余弦相似度通过计算两个向量之间夹角的余弦来度量它们之间的相似度。其范围从 -1 到 1,其中 1 表示方向相同,0 表示正交,-1 表示方向相反。它不考虑大小,因此适用于比较文档或特征而尺度无关。

2. 余弦相似度可以为负数吗?

是的,当向量之间的夹角大于 90 度时,余弦相似度可以为负数。负值表示向量更不相似而非相似,-1 表示完全相反的方向。

3. 如何计算余弦相似度?

计算两个向量的点积,除以它们的大小的乘积。公式为 S_C = (a·b) / (||a|| ||b||)。该计算器和 Python 实现(使用 NumPy)都遵循此过程。

4. 余弦相似度和余弦距离有什么区别?

余弦距离是余弦相似度的补数:D_C = 1 - S_C。其范围从 0(相同方向)到 2(相反方向)。但是,余弦距离不是真正的距离度量,因为它不满足三角不等式。

使用方法

  1. 使用下拉菜单选择向量的维度(2至10)。
  2. 将向量 A 和向量 B 的分量输入到相应的输入字段中。
  3. 余弦相似度、余弦距离和向量之间的夹角将即时计算,并显示逐步计算过程。