向量化:将非结构化数据转化为向量
向量数据库的处理核心是将各种非结构化数据(如文本、图像、音频等)转化为高维向量。这是因为计算机无法直接处理非结构化数据,而向量是一种通用的数学表示形式,能够捕捉数据的关键特征。
文本向量化:通过自然语言处理模型(如BERT、Word2Vec)将文本转化为语义向量。例如,“猫”和“狗”在语义空间中会靠得很近,而“猫”和“汽车”则会相距较远。
图像向量化:通过深度学习模型(如ResNet、VGG)提取图像的特征向量。这些向量能够捕捉颜色、纹理、形状等视觉信息。
音频向量化:通过声学模型(如MFCC、Wav2Vec)提取音频的频谱特征向量。
可以把向量化看作是给每种数据贴上一个“数字标签”。比如,给一张汽车的照片贴上一组数字,这组数字就代表了这张照片的主要特征。
加速高维向量的检索
随着数据规模的增长,直接遍历所有向量进行相似性计算会变得非常低效。因此,向量数据库采用了多种高效的索引算法,以加速高维向量的检索过程。常见的索引算法包括:
HNSW(Hierarchical Navigable Small World): HNSW 是一种基于图结构的索引算法。它通过构建分层图的方式,快速缩小搜索范围。简单来说,它就像一个导航系统,先找到大致方向,再逐步精确定位目标。
LSH(Locality-Sensitive Hashing): LSH 是一种基于哈希的索引算法。它通过设计特定的哈希函数,将相似的向量映射到同一个“桶”中。这样,在查询时只需检查同一个桶中的向量即可,大大减少了计算量。
PQ(Product Quantization): PQ 是一种基于量化的方法。它将高维向量分解为多个低维子向量,并对每个子向量进行量化编码。通过这种方式,大幅降低存储和计算成本。
相似性计算
向量检索的核心是计算向量之间的“距离”,以衡量它们的相似性。不同的应用场景可能会选择不同的距离度量方法:
欧几里得距离:欧几里得距离是最常用的距离度量方法之一,计算两个向量之间的直线距离。距离越小,相似性越高。适合低维空间或对绝对距离敏感的场景。
余弦相似度: 余弦相似度衡量的是两个向量之间的夹角余弦值。值越接近 1,相似性越高。适合高维空间或对方向敏感的场景,如文本和图像检索。
内积:通过计算两个向量的内积值来评估相似性,常在推荐系统中使用。
近似最近邻(ANN)算法
由于高维空间中计算全部向量的距离非常耗时,向量数据库使用近似最近邻(Approximate Nearest Neighbor, ANN)算法进行优化。其原理是:近似检索允许牺牲少量精确度,换取更高速度和扩展性;不需遍历所有向量,只需检索经过索引筛选后的“候选向量”。
主流算法包括:
KD 树:适合低维向量,但维度增长时性能下降。
BallTree:通过划分球状区域进行检索,仍适合中低维情况。
HNSW 图:目前广泛使用,适合高维、大规模数据集。