首页 > 教程攻略 > ai资讯 >深入研究向量数据库

深入研究向量数据库

来源:互联网 时间:2026-08-02 13:11:23

探索向量数据库的幕后到底发生了什么

深入研究向量数据库

有一天,请来最熟悉的大语言模型帮忙,让它用四岁孩子能懂的方式解释“向量”。几秒钟后,一个充满神话生物、魔法和向量的故事就诞生了——主角是一只名叫“LuminaVec”的独角兽,而听起来像是一本新的儿童绘本草图已经成形。图片由作者提供(“LuminaVec”正由快四岁的孩子阅读)。

这个大语言模型是怎么创造出这种创意魔力的呢?答案就是向量,更准确地说,是向量数据库。接下来,我们一步步拆解背后的原理。

向量和嵌入

首先,模型本身并不理解输入的那些有意义的单词。真正起作用的是这些单词的数字表示——向量,它们为单词提供了

形式

上的表达。向量帮助模型在词与词之间找到相似性,同时抓住每个词的有意义内涵。具体实现靠的是

嵌入

:一种低维向量,试图捕获信息的语义和上下文。

嵌入中的向量,本质上是某个对象相对于参考空间的位置数值列表。这些对象可以是数据集中的特征变量。有了这些向量分数,就能判断一个特征与另一个特征的距离——它们是相似(靠近)还是不相似(远离)。

向量的威力很大,但处理大语言模型时必须小心——因为“大”这个字很关键。在那些“大型”模型里,向量可能迅速变得又长又复杂,动辄涵盖数百甚至数千个维度。如果处理不当,计算速度和存储开销会很快变成棘手问题。

向量数据库

针对这个痛点,我们有强大的武器:向量数据库。

向量数据库

是专门存放这些向量嵌入的数据库。相似的对象在库中拥有彼此更接近的向量,而不相似的对象则相距较远。与其每次查询进来都临时生成向量嵌入(这非常耗资源),不如先用模型把数据跑一遍,存储到向量数据库中,等需要时直接检索。这种做法极大提升了效率,使得向量数据库成为解决大语言模型规模和速度问题的利器之一。

回到彩虹独角兽和闪闪发光的魔法故事——当向模型发出那个请求时,它大致经历了这样几步:

  • 嵌入模型先将问题转换成向量嵌入。
  • 然后,这些嵌入与数据库中与“5岁儿童趣味故事”相关的向量进行比较。
  • 根据比较结果,返回最相似的匹配项,按相似度从高到低排列。

它到底如何运作?

想更具体一点?不如直接上手走一遍流程,重温基础。感谢Tom Yeh教授,他有一篇精彩的文章揭示了向量数据库的幕后工作原理。(以下所有图片,除非特别说明,均来自Tom Yeh教授的LinkedIn帖子,经许可后编辑使用。)

用一个简单示例开始:数据集包含三个句子,每个句子有三个单词(或token)。

  • How are you
  • Who are you
  • Who am I

我们的查询是“am I you”。

在真实场景中,数据集可能包含数亿条(比如维基百科、新闻档案、论文合集等),而最大token数量也可能达到数万。舞台已搭好,流程如下:

[1] 嵌入

:第一步是给所有待用的文本生成向量嵌入。在一张包含22个token的表中查找对应单词(22是示例的词汇量)。现实中的词汇量可达数万,词嵌入维度可达数千(如1024、4096)。

通过查表,单词“how are you”的词嵌入如下所示:

[2] 编码

:下一步是按顺序处理每个词的特征。示例中编码器是一个简单的感知机,由带ReLU激活函数的线性层构成。

快速回顾:

线性变换

:输入嵌入向量乘以权重矩阵 W,再加偏置向量 b,得到 z = Wx + b。

ReLU激活函数

:然后对中间结果 z 应用 ReLU,逐元素取最大值与0比较:h = max(0, z)。

因此,此示例的文本嵌入如下所示:

为展示计算过程,以最后一列为例:

  • 线性变换:
    [1·0 + 1·1 + 0·0 + 0·0] + 0 = 1
    [0·0 + 1·1 + 0·0 + 1·0] + 0 = 1
    [1·0 + (0)·1 + 1·0 + 0·0] + (-1) = -1
    [1·0 + (-1)·1 + 0·0 + 0·0] + 0 = -1
  • ReLU:
    max(0,1)=1, max(0,1)=1, max(0,-1)=0, max(0,-1)=0

这样就得到了特征处理的最后一列。对其他列重复相同步骤。

[3] 均值池化

:这一步通过对列取平均来合并特征,完成聚合。结果通常被称为文本嵌入或句子嵌入。其他池化技术(如CLS、SEP)也可用,但均值池化最广泛。

[4] 索引

:下一步是降低文本嵌入向量的维度,借助投影矩阵(可以是随机矩阵)实现。目标是得到一个更短的表示,以便更快比较和搜索。结果存入存储器。

[5] 重复

:对数据集中的“Who are you”和“Who am I”重复步骤[1]到[4]。

至此,已对数据集完成索引。接下来执行实际查询,看看索引如何发挥作用。

查询:“am I you”

[6] 首先,对查询重复上述步骤——嵌入、编码、索引,得到其二维向量表示。

[7]

点积(寻找相似性)

:完成前面步骤后,执行点积运算。点积向量捕获了查询向量与数据库向量的比较关系。操作时,将查询向量转置并与数据库向量相乘。

[8]

最近邻

:最后一步是线性扫描,找出最大的点积。本例中最大值是60/9,对应“Who am I”的向量表示。在真实场景中,线性扫描可能极慢,因为涉及数百万条记录。替代方案是使用近似最近邻(ANN)算法,如分层可导航小世界(HNSW)。

至此,整个优雅的流程结束。通过利用向量数据库中数据集的向量嵌入,并执行上述步骤,能够找到最接近查询语句的句子。嵌入、编码、均值池化、索引和点积构成了该过程的核心。

“大”图

然而,当回到“大”的视角:

  • 数据集可能包含数百万或数十亿个句子。
  • 每个句子的token数量可达数万。
  • 词嵌入维度可达数千。

当所有这些数据和步骤叠加在一起,实际上是在一个猛犸象般规模的维度上执行操作。为了应对如此巨大的规模,向量数据库的重要性就凸显了。既然从大语言模型开始讨论,就可以说:正是由于向量数据库的规模处理能力,它们在检索增强生成(RAG)中扮演了关键角色。向量数据库提供的可扩展性和速度,使RAG模型能高效检索,从而为高效的生成模型铺平道路。

总而言之,向量数据库的威力毋庸置疑。它们已存在多年——最初用于推荐系统,如今为大语言模型提供动力,统治仍在继续。随着不同AI模式的向量嵌入不断增长,向量数据库似乎还会在未来很长一段时间内延续它的统治!