首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >向量数据库原理及在场景理解的应用

向量数据库原理及在场景理解的应用

作者头像
索旭东
发布2026-04-14 17:35:20
发布2026-04-14 17:35:20
370
举报
文章被收录于专栏:具身小站具身小站

向量数据库的核心逻辑

向量数据库与传统数据库最大的不同在于:它处理的是非结构化数据的语义,而不是精确的字段值。它的核心逻辑可以概括为:

将非结构化数据转化为向量,通过计算向量间的距离来衡量数据的相似性,并通过专门的索引结构实现高效的近似搜索。

这个逻辑的实现依赖于三个核心组件:向量嵌入、索引结构和相似度度量。

1

向量数据库的基本构成

1. 向量嵌入(Embedding)—— 数据的“语义指纹”

向量数据库存储的不是原始文本或图片,而是它们的向量表示。这些向量通常有几百到上千维,由专门的嵌入模型(如BERT、CLIP)生成。关键特性是:语义上相似的对象,在向量空间中的距离也更近。

例如,“猫”和“猫咪”的向量会很接近,而“猫”和“拖拉机”则相距很远。这种特性使得基于相似性的搜索成为可能。

2. 相似度度量(Similarity Metrics)—— 判断“像不像”

向量数据库通过数学公式量化向量间的距离,常用的有三种:

度量方式

计算公式

特点

适用场景

余弦相似度

cos(θ) = (A·B)/(|A||B|)

关注方向而非大小,范围[-1,1]

文本嵌入、语义搜索

欧氏距离

√Σ(Aᵢ - Bᵢ)²

空间中两点间的直线距离

图像特征、聚类分析

点积

A·B

结合幅度和方向,未归一化

推荐系统、某些归一化数据

在创建索引时,你需要选择一种距离类型(如

DistanceType.COSINE

),这决定了后续搜索时如何计算相似度。

3. 索引结构(Index)—— 加速搜索

索引是向量数据库的“发动机”。它通过特定的数据结构,将海量向量组织起来,使得搜索时无需遍历整个数据集。主流的索引算法包括:

索引类型

核心思想

特点

适用场景

FLAT(暴力索引)

不建索引,直接遍历所有向量

100%召回率,但速度慢,数据量大时不适用

小规模数据集、精度要求极高的场景

IVF(倒排文件)

用K-means聚类,将向量分到不同桶,搜索时只查最近的几个桶

速度快,精度略降,内存效率高

中等规模数据,需平衡速度与精度

HNSW(分层可导航小世界)

构建多层图结构,上层图长距离跳跃,下层图精细搜索

速度极快,召回率高,但内存占用较大

高维数据,低延迟要求场景,现代向量数据库首选

PQ(乘积量化)

将向量切分为子向量,分别量化编码,大幅压缩存储

压缩比高(4-32倍),内存占用极低

内存受限场景,可接受轻微精度损失

DISKANN

基于Vamana图的磁盘索引,将图结构和原始数据存于SSD

支持十亿级数据,内存成本低

超大规模数据集,内存无法容纳时

4. 量化(Quantization)—— 压缩

为了节省内存和提升计算速度,向量数据库常采用量化技术:

  • Int8量化:将4字节的float压缩为1字节,内存减75%,速度提升,轻微精度损失。
  • PQ量化:将高维向量拆分为子向量,用码本编码,实现极高压缩比。
  • Float:全精度,无压缩。

在选择索引时,可以通过Quant参数指定量化方式。

5. 元数据与标量索引

向量数据库不仅能存向量,还能存相关的元数据(如作者、时间戳、标签)。为了支持混合检索(向量相似度+标量过滤),数据库会为这些标量字段建立额外的标量索引。在搜索时,可以通过Filter参数指定过滤条件,例如只搜索作者为“张三”的文档。

2

搜索是如何进行的?—— 三步走流程

向量数据库的搜索过程可以拆解为三个清晰的步骤:

第1步:查询向量化

用户输入一个查询(如一段文本、一张图片),系统调用与建库时相同的嵌入模型,将其转换为向量。

第2步:索引检索(近似最近邻搜索)

这是核心步骤。系统将查询向量交给索引结构,利用ANN算法快速找到一批“候选结果”。这一过程并非暴力遍历,而是通过精心设计的数据结构(如图、聚类桶)在极短时间内完成。

以HNSW为例:

  1. 从顶层图的一个入口节点开始。
  2. 在当前层贪婪地移动到距离查询更近的节点,直到无法更近。
  3. 将当前节点作为下一层的入口,重复,直到最底层。
  4. 在最底层收集K个最近邻居作为候选。

第3步:后处理与重排序

  1. 相似度计算:对候选结果,用指定的相似度度量(如余弦相似度)计算精确分数。
  2. 元数据过滤:如果查询带有Filter条件,在此步过滤掉不符合条件的候选结果。
  3. 重排序:根据精确分数对结果进行排序,返回Top K个最相似的结果。

如果需要返回更多上下文(如检索到的文本片段的前后段落),还可以通过expand_chunk等参数扩展结果。

3

一个完整的搜索示例

假设有一个存储了《三国演义》和《西游记》片段的数据集,每个片段都有author、bookName等元数据。

查询:“吕布是什么人?”

过程

  1. 向量化:用嵌入模型将查询转为向量[0.3123, 0.43, 0.213]
  2. 索引检索:HNSW索引快速定位到与“吕布”相关的片段所在区域,返回候选。
  3. 后处理:
  • 计算候选与查询的余弦相似度。
  • 应用过滤(如需要只返回author="罗贯中")。
  • 按分数排序,返回Top 5。

结果可能类似:

  • Score 0.978:玄德曰:“布乃当今英勇之士,可出迎之。”
  • Score 0.975:布大惊,与陈宫商议...
  • ……

搜索结果中的Score字段即表示相似度分数

4

为什么需要这些复杂性?

你可能会问:为什么不能直接把所有向量加载到内存里暴力搜索?

  • 数据规模:100万个768维的向量,如果用float32存储,占内存约2.9GB。亿级数据则需要数百GB内存,成本极高。
  • 计算量:暴力搜索一次查询需要计算百万次相似度,延迟无法接受。

而通过索引+量化,可以在保持高召回率的同时,将搜索时间降低到毫秒级,内存占用减少数倍。这正是向量数据库的核心价值。

5

在机器人领域的应用意义

  • 场景理解:将摄像头画面实时转为向量,在历史场景库中快速检索最相似的场景,辅助定位和导航。
  • 语义指令理解:将用户语音指令向量化,在意图库中匹配最相近的意图,即使指令有口音或省略也能理解。
  • 物体识别与抓取:识别物体后,在知识库中检索相似物体的抓取策略,复用经验。
  • 实时性与资源权衡:根据机器人本体的硬件限制(如Jetson系列),选择合适的索引类型和量化方式,在延迟、精度和内存之间取得平衡。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-04-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 具身小站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档