Python中的余弦相似度

2025年1月5日 | 阅读 4 分钟

在接下来的教程中,我们将讨论如何计算两个非零向量之间的余弦相似度。一个单维度的 NumPy 数组称为向量。在文本分析中,余弦相似度是一种评估文档之间相似程度的常用度量。要计算余弦相似度,请使用以下公式。

其中向量 A 和 B 是

  • A 和 B 的点积,或 A.B,是通过将 A 和 B 的元素乘积相加来计算的。
  • 向量 A 的 L2 范数由 ||A|| 表示,它等于其成员平方和的平方根。

让我们来看一些演示 Python 中余弦相似度的例子。

示例 1

在下面的示例中,我们计算两个向量(一维 NumPy 数组)之间的余弦相似度。在这里,我们也可以利用 Python 列表来定义一个向量。

程序说明

Python 的余弦相似度函数用于比较两个数组 A 和 B。为了计算向量范数,它导入了 numpy、适当的库以及 numpy 的 norm 函数。通过取数组的点积及其相应的范数来计算定义的数组 A 和 B 之间的余弦相似度。最终的余弦相似度值在控制台上显示了两个向量之间的相似度。

输出

A: [2 1 2 3 2 9] 
B: [3 4 2 4 5 5]
Cosine Similarity: 0.8188504723485274

示例 2

在下面的示例中,我们计算一个向量(一维 NumPy 数组)和一个由三个向量组成的批次(二维 NumPy 数组)之间的余弦相似度。

程序说明

这个 Python 程序计算矩阵 A 和向量 B 之间的余弦相似度。为了计算向量范数,它导入了 numpy、适当的库以及 numpy 的 norm 函数。定义了向量 B 和矩阵 A。该程序通过计算矩阵 A 的每一行和向量 B 之间的余弦相似度,为每一行赋予一个相似度分数。通过此过程获得的余弦相似度值将显示为一个矩阵,表示向量 B 和 A 的行之间的相似程度。

输出

请注意,B 是一个单一向量,而 A 包含三个向量。上述输出中的余弦相似度数组由三个元素组成。A 的第一个向量(第一行)与第二个向量(B)之间的余弦相似度由第一个元素表示。A 的第二个向量(第二行)与第二个向量(B)之间的余弦相似度由第二个元素表示,同样,第三个元素也是如此。

A:
  [ [ 2   1   2]
     [  3   2   9]
     [ -1    2   -3] ]
B: 
   [ 3   4   2 ]
Cosine Similarity:
   [ 0.86657824    0.67035541   -0.04962917  ] 

示例 3

在下面的示例中,我们计算两个二维数组之间的余弦相似度。在这种情况下,每个数组包含三个向量。这里,元素乘积的 m 用于计算点积。

程序说明

这个 Python 应用程序确定了两个矩阵 A 和 B 之间的余弦相似度。为了计算向量范数,它导入了 numpy、适当的库以及 numpy 的 norm 函数。定义了矩阵 A 和 B。该程序通过计算两个矩阵中对应行之间的余弦相似度,为每一对行赋予一个相似度分数。通过此过程获得的余弦相似度值将显示为一个矩阵,表示 A 和 B 的行之间的相似程度。

输出

A 和 B 的第一行之间的相似度构成了余弦相似度数组的第一个成员。同样,A 和 B 的第二行之间的余弦相似度形成了第二个元素。第三个元素也是如此。

A:
  [ [ 1   2   2]
     [  3   2   2]
     [ -2    1   -3] ]
B: 
   [ [ 4   2   4 ] 
     [ 2  -2   5 ]
     [ 3    4   -4] ]
Cosine Similarity:
   [ 0.86657824    0.67035541   -0.04962917]