汪图南
  • RAG

    • RAG
  • 快速入门
  • 高级技巧
前端面试之道
  • 打包工具

    • Webpack
    • Rollup
  • TypeScript

    • TypeScript基础
    • TypeScript类型挑战
  • CSS预编译器

    • SASS
  • 自动化测试

    • Vue应用测试
  • Vue2.0源码分析
  • Vue3.0源码分析
  • 数据结构和算法(基础)
  • LeetCode(刷题)
  • JavaScript书籍

    • 你不知道的JavaScript(上)
    • 你不知道的JavaScript(中下)
    • JavaScript数据结构和算法
    • JavaScript设计模式与开发实践
    • 深入理解ES6
  • Git书籍

    • 精通Git
Github
  • RAG

    • RAG
  • 快速入门
  • 高级技巧
前端面试之道
  • 打包工具

    • Webpack
    • Rollup
  • TypeScript

    • TypeScript基础
    • TypeScript类型挑战
  • CSS预编译器

    • SASS
  • 自动化测试

    • Vue应用测试
  • Vue2.0源码分析
  • Vue3.0源码分析
  • 数据结构和算法(基础)
  • LeetCode(刷题)
  • JavaScript书籍

    • 你不知道的JavaScript(上)
    • 你不知道的JavaScript(中下)
    • JavaScript数据结构和算法
    • JavaScript设计模式与开发实践
    • 深入理解ES6
  • Git书籍

    • 精通Git
Github
  • RAG基础

    • 介绍
  • 简易RAG

    • 前置准备
    • LangChain实现RAG
    • LangGraph实现RAG
    • LangChain vs LangGraph
  • 数据导入(Loader)

    • 介绍
    • Document类型
    • 简单文本导入
    • JSON
    • HTML网页数据
    • Markdown
    • CSV
    • OCR
    • PDF
    • DataBase
  • 文本切块(Chunking)

    • 介绍
    • 分块方法
  • 数据嵌入(Embedding)

    • 介绍
    • 向量相似度计算
    • 稀疏嵌入
    • 密集嵌入
    • 混合嵌入
  • 向量存储(VectorStore)

    • 介绍
    • Chroma
    • Milvus

向量相似度计算

向量相似度计算:是衡量两个嵌入向量Embedding之间关联性的核心技术,广泛应用于搜索、推荐、聚类等场景。

余弦相似度

提示

余弦相似度 维基百科

余弦相似度(Cosine Similarity):忽略向量长度,专注方向一致性(范围[-1, 1],1表示完全相似),适用于文本、推荐系统(如比较用户兴趣向量)。

公式:

cosine(A,B)=A⋅B∥A∥⋅∥B∥\text{cosine}(A, B) = \frac{A \cdot B}{\|A\| \cdot \|B\|} cosine(A,B)=∥A∥⋅∥B∥A⋅B​

示例:

import numpy as np
from sklearn.metrics.pairwise import cosine_similarity, euclidean_distances

# 示例向量
A = np.array([1, 2, 3])
B = np.array([4, 5, 6])

cos_sim = cosine_similarity([A], [B])[0][0]  
print(cos_sim) # 输出 0.974

点积

提示

点积 维基百科

点积(Dot Product):受向量长度影响,适合长度本身有意义的场景(如加权评分),例如推荐系统中用户/物品得分的直接计算(矩阵分解)。

公式:

dot(A,B)=A⋅B=∑i=1nAiBi\text{dot}(A, B) = A \cdot B = \sum_{i=1}^n A_i B_i dot(A,B)=A⋅B=i=1∑n​Ai​Bi​

示例:

import numpy as np
from sklearn.metrics.pairwise import cosine_similarity, euclidean_distances

# 示例向量
A = np.array([1, 2, 3])
B = np.array([4, 5, 6])

dot_product = np.dot(A, B)
print(dot_product)  # 输出 32

欧氏距离

提示

欧氏距离 维基百科

欧氏距离(Euclidean Distance):衡量向量空间中的绝对距离(越小越相似),用于聚类(如K-Means)、图像检索。

公式:

euclidean(A,B)=∑i=1n(Ai−Bi)2\text{euclidean}(A, B) = \sqrt{\sum_{i=1}^n (A_i - B_i)^2} euclidean(A,B)=i=1∑n​(Ai​−Bi​)2​

示例:

import numpy as np
from sklearn.metrics.pairwise import cosine_similarity, euclidean_distances

# 示例向量
A = np.array([1, 2, 3])
B = np.array([4, 5, 6])

euclidean_dist = euclidean_distances([A], [B])[0][0]
print(euclidean_dist)  # 输出 5.196

曼哈顿距离

提示

曼哈顿距离 维基百科

曼哈顿距离(Manhattan Distance):对异常值更鲁棒,适用于高维稀疏数据,例如用户行为分析。

公式:

manhattan(A,B)=∑i=1n∣Ai−Bi∣\text{manhattan}(A, B) = \sum_{i=1}^n |A_i - B_i| manhattan(A,B)=i=1∑n​∣Ai​−Bi​∣

示例:

import numpy as np
from sklearn.metrics.pairwise import cosine_similarity, euclidean_distances

# 示例向量
A = np.array([1, 2, 3])
B = np.array([4, 5, 6])

manhattan_dist = manhattan_distances([A], [B])[0][0]
print(manhattan_dist)  # 输出 9.0

雅卡尔指数

提示

雅卡尔指数 维基百科

雅卡尔指数(Jaccard):用于比较二进制向量或集合,如用户兴趣标签匹配。

公式:

jaccard(A,B)=∣A∩B∣∣A∪B∣\text{jaccard}(A, B) = \frac{|A \cap B|}{|A \cup B|} jaccard(A,B)=∣A∪B∣∣A∩B∣​

示例:

A = {苹果, 香蕉, 梨}
B = {香蕉, 梨, 西瓜}

A ∩ B = {香蕉,梨}
A U B = {苹果,香蕉,梨,西瓜}

J(A,B) = 2 / 4 = 0.5

皮尔逊相关系数

提示

皮尔逊相关系数 维基百科

皮尔逊相关系数(Pearson Correlation):衡量线性相关性(范围[-1, 1]),适用于评分预测,例如电影推荐。

公式:

pearson(A,B)=Cov(A,B)σA⋅σB\text{pearson}(A, B) = \frac{\text{Cov}(A, B)}{\sigma_A \cdot \sigma_B} pearson(A,B)=σA​⋅σB​Cov(A,B)​

示例:

import numpy as np
from scipy.stats import pearsonr

# 示例向量
A = np.array([1, 2, 3])
B = np.array([4, 5, 6])

r, p = pearsonr(x, y)
print(f"相关系数 r = {r:.3f}, p值 = {p:.3f}") # 输出:r = 1.000, p = 0.000

对比和选择建议

方法适用场景计算效率鲁棒性特点
余弦相似度(Cosine Similarity)文本、高维稀疏数据高中忽略向量长度,专注方向一致性
点积(Dot Product)推荐系统(显式评分高低受向量长度影响,需归一化
欧氏距离(Euclidean Distance)图像、聚类中高衡量绝对距离,对尺度敏感
曼哈顿距离(Manhattan Distance)异常检测、稀疏特征中高对异常值鲁棒
雅卡尔指数(Jaccard)集合、标签匹配高高适用于二进制数据或集合
皮尔逊相关系数(Pearson Correlation)评分预测、连续变量相关性分析中中消除均值影响,衡量线性相关性(范围[-1,1])
最后更新时间: 2025/5/31 05:05
贡献者: wangtunan
Prev
介绍
Next
稀疏嵌入