人工智能小白到高手:余弦相似度(Cosine Similarity)的简单理解

科技   2024-11-25 18:00   山西  

-推荐关注-

-正文-
  • 1. 余弦相似度计算方法

  • 2. 计算

  • 3. 示例:比较两篇短文本

    • 第一步:计算点积

    • 第二步:计算范数

    • 第三步:代入公式

    • 比较结论


余弦相似度是定义在内积空间中两个非零向量之间相似度的度量方法。余弦相似度是向量之间角度的余弦值;也就是说,它是向量的点积除以它们长度的乘积。因此,余弦相似度不依赖于向量的幅度,而只依赖于它们的角度

例如,在信息检索和文本挖掘中,每个词被分配一个不同的坐标,一个文档由文档中每个词出现的次数的向量表示。余弦相似度随后提供了一个有用的度量方法,来衡量两个文档在主题内容上的相似程度,而与文档的长度无关

在人脸识别的场景中,为了计算人脸的相似度,可以使用余弦相似度。

详情见:免费开源AI最先进的2D和3D人脸分析项目insightface-人脸特征比较(四)

1. 余弦相似度计算方法

两个向量 的余弦相似度定义为

  • 表示向量 的点积。通过numpy计算点积np.dot(feature1, feature2)
  • 表示向量 的范数(即向量的长度)通常是欧几里得范数(L2范数)。通过numpy获取范数np.linalg.norm(feature1)
  • 表示向量 的范数
  • 是这两个向量之间的夹角。

范数详情见:人工智能小白到高手:范数(Norm)的通俗理解

代码如下:

def calc_cos_sim(feature1, feature2):
    """
    余弦相似度
    计算两个特征向量的点积,然后除以两个向量的范数乘积。
    结果是两个向量的余弦相似度,范围在[-1, 1]之间,值越大表示两个向量越相似。-1为完全不相似,1为完全相似。
    :param feature1:
    :param feature2:
    :return:
    """

    return np.dot(feature1, feature2) / (np.linalg.norm(feature1) * np.linalg.norm(feature2))  # 计算两个特征向量的余弦相似度

余弦相似度的值范围

余弦相似度计算的是两个向量之间夹角的余弦值,数值范围在 -1 到 1 之间:

  • 如果两个向量方向相同,余弦相似度为 1
  • 如果两个向量垂直,余弦相似度为 0
  • 如果它们相反,则余弦相似度为-1

2. 计算

假设有两个向量 ,我们可以通过以下步骤计算它们的余弦相似度:


计算点积:

计算范数: ,

计算余弦相似度:

这个结果表明向量之间具有很高的相似性。

3. 示例:比较两篇短文本

假设我们有以下两个文本:

  1. A: "I like apples and bananas."
  2. B: "I like bananas and oranges."

我们用词频向量来表示它们的内容:

  • 词汇表:[I, like, apples, bananas, oranges]
  • 向量表示:
    • A 的向量:
    • B 的向量:

第一步:计算点积

点积

第二步:计算范数

第三步:代入公式

比较结论

两个文本的余弦相似度为 0.75,说明它们有较高的相似性,但不是完全一致(值为 1 时才完全相同)。

这个例子展示了余弦相似度如何量化两个向量(在这里是文本表示)的相似性。

向量数据库milvus,也提供余弦相似度的度量类型用来比较不同的特征Embedding

向量数据库milvus见:为AI而生的向量数据库 - milvus(一) | milvus是什么


往日文章:


为AI而生的向量数据库 - milvus(一) | milvus是什么

一文说清楚什么是AI Agent(智能体)

- 免费开源AI最先进的2D和3D人脸识别项目insightface-活体检测(六)

- 本地知识库,通过RAG来解决信息的精准生成

10分钟自己动手搭建一个免费的大语言模型

- 人工智能时代的必读宝典:《ChatGPT调研报告》!

一文说清楚CUDA环境


--END--



AI取经路
踏上取经路,比抵达灵山更重要! AI技术、 AI知识 、 AI应用 、 人工智能 、 大语言模型
 最新文章