【RAG】向量?知识库的底层原理:向量数据库の技术鉴赏 | HNSW(导航小世界)、LSH、K-means

#王者杯·14天创作挑战营·第1期#

一、向量化表示的核心概念

1.1 特征空间与向量表示

  • 多维特征表示:通过多个特征维度(如体型、毛发长度、鼻子长短等)描述对象,每个对象对应高维空间中的一个坐标点,来表示狗这个对象,这样可以区分出不同种类的狗狗;如果有些种类难以区分,还可以继续扩充向量的维度。世界万物都可以用这种方法表达。
  • 向量特性
    • 相似对象在特征空间中距离更近
    • 支持向量运算(如:警察-小偷 ≈ 猫-老鼠)
  • 典型应用场景
    • 以图搜图(图片向量化)
    • 视频推荐(视频向量化)
    • 商品推荐(商品向量化)
    • 智能问答(文本向量化)
      image.png

1.2 向量数据库特点

特性传统数据库向量数据库
存储结构数据表向量集合
查询方式精确匹配相似度搜索
查询结果确定值近似最近邻

二、最近邻问题(Nearest Neighbors)

2.1 暴力搜索(Flat Search)

  • 原理:线性扫描所有向量,计算与查询向量的相似度
  • 相似度度量
    • 余弦相似度(向量夹角)
    • 欧氏距离(向量间距)
  • 优缺点
    • ✅ 100%准确率
    • ❌ O(n)时间复杂度
  • 暴力算法:优点是搜索质量是完美的,缺点是耗时;如果数据集小,搜索时间可以接受,那可以用。
- 优化思路:**缩小搜索范围**,比如用【***聚类算法***】(比如k-means),【***哈希算法***】(位置敏感哈希)等,但不能不能保证是最近邻的(除了暴搜能保证,其他都不能保证)

2.2 近似最近邻搜索(ANN)(Approximate Nearest Neighbors)-提速度

2.2.1 基于聚类的方法(以K-Means为例)

  1. 随机生成四个点,作为初始的聚类中心点,然后根据与中心点距离的远近进行分类;
  2. 计算已有分类的平均点,该平均点作为中心点继续分类,然后不断重复,趋于收敛
# K-Means伪代码
1. 随机初始化k个中心点
2. while not converged:
   a. 将每个向量分配到最近的中心点
   b. 重新计算每个簇的中心点(均值)
3. 搜索时只需查询最近簇内的向量
  • 优化技巧
    • 增加聚类数量(降低速度)
    • 查询多个最近簇(降低速度)
  • 权衡:搜索质量 vs 搜索速度
    image.png

2.2.2 位置敏感哈希(LSH)(Locality Sensitive Hashing)

核心特性

  1. 高碰撞概率设计
  2. 相似向量更可能哈希到同桶
  • 哈希碰撞:由于输入是固定长度的数据,而输出是固定长度的哈希值,根据鸽巢原理,必然会出现数据不同而哈希值相同的情况,这叫碰撞。
  • 正常而言,哈希算法要尽可能减少碰撞的发生,而(对向量)位置敏感哈希函数-LSH则相反,尽可能让位置相近的数据发生碰撞,然后根据哈希碰撞来进行分组,构建方法:随机划出直线分割平面,两面的点分别增加意味0或1来表示
    image.png
    image.png
    随机超平面哈希实现(随机投影):
  1. 在d维空间中随机生成超平面
  2. 根据向量在超平面哪侧生成bit(1/0)
  3. 组合多个超平面结果生成二进制哈希码
    在这里插入图片描述

分段优化策略:合理地扩充

  • 将哈希码分成m段
  • 只要任意一段匹配即作为候选
  • 显著提高召回率
    image.png

积量化(Product Quantization)-省内存

问题:除了搜索速度,还有内存开销问题

方法——量化(Quantization):降低向量本身大小,但产生码本

聚类算法训练——有损压缩(图片中每个像素点都被其所在分类质心点所替代)——在一定程度保留原始信息——给质心编码,只需存储单个编码值,减少空间(把向量用质心编码表示就是量化)——码本

存在问题——维度灾难:

维度增加(数据稀疏)——需要非常大的聚类数——维度灾难——码本指数级膨胀,超过了量化节约出来的内存,得不偿失
进一步解决:高维分成低维(128->16–子空间需要的聚类数量小2^8)——拼接子向量——笛卡尔积——积量化PQ(Product Quantization)

NSW (Navigable Small World) - 牺牲内存,换取速度和质量

6人理论小世界——导航小世界nsw

需要手动建立图结构

保证以下性质:

需要这个:德劳内三角剖分法

但是这个建立的图结构搜索时候不一定很快速,所以nsw方法如下,
在随机足够放回向量的初始阶段向量点非常的稀疏,很容易在距离较远的点之间建立连接,通过长链接快速导航,再通过短链接精细化搜索
这就是NSW算法的大致工作原理,短连接满足了德劳内三角,长链接帮助快速导航,妙在先粗快,后细慢

HNSW(Hierarchical NSW):分层的导航小世界

搜索时候从最上层进入,快速导航,逐步进入下一层,比 NSW 更可控稳定。缺点就是占用内存太大

三、关键技术对比

方法预处理成本查询速度内存消耗准确性补充说明
暴力搜索100%线性扫描所有向量,保证结果完全准确,但时间复杂度高(O(n)),仅适用于小规模数据集。
K-Means聚类80-95%通过聚类缩小搜索范围,牺牲少量精度换取速度。增加聚类数量可提高准确性,但会降低查询速度。
LSH最快70-90%基于哈希碰撞的近似搜索,适合高维数据。分段策略可提高召回率,但内存开销较大。
NSW85-98%基于图结构的导航小世界,通过长链接快速导航、短链接精细化搜索。预处理成本低于HNSW,但稳定性稍差。
HNSW最快90-99%分层NSW,搜索时从顶层快速导航到底层,精度接近暴力搜索,但内存占用高,适合大规模实时场景和高维向量场景:既解决了高维数据的稀疏性问题,又避免了传统方法因维度增长导致的性能崩塌,成为高维向量搜索的黄金标准
PQ(积量化)75-90%通过子空间量化和笛卡尔积压缩向量,显著节省内存,但需权衡精度损失。适合内存受限的部署场景。

关键总结

  1. 速度优先级:LSH ≈ HNSW > NSW > K-Means > PQ > 暴力搜索
  2. 内存优先级:PQ < 暴力搜索 < NSW < K-Means < HNSW < LSH
  3. 精度优先级:暴力搜索 > HNSW > NSW > K-Means > PQ > LSH

适用场景建议

  • 实时推荐/搜索:HNSW(高精度+高速)
  • 内存敏感型应用:PQ(如移动端、嵌入式设备)
  • 中等规模数据:NSW(平衡速度与内存)
  • 高维数据快速过滤:LSH(如去重、粗筛)
  • 小数据集或验证场景:暴力搜索(确保100%准确率)

四、典型应用场景

  1. 大语言模型

    • 对话历史向量化存储
    • 实现"记忆检索"功能
  2. 推荐系统

    • 用户/商品联合向量空间
    • 实时相似推荐
  3. 多媒体检索

    • 跨模态向量搜索(图→文,文→视频)

以上是整理的笔记,笔记 pdf 下载 --》 【向量数据库与近似最近邻算法】-CSDN文库
速览b站原片!–》 【上集】向量数据库技术鉴赏_哔哩哔哩_bilibili

我的其他文章

RAG调优|AI聊天|知识库问答

Agent

docker

前端

nginx

好用插件

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sonetto1999

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值