1. 概念与基础
- 什么是向量(Vector)?
- 在AI中,向量是对非结构化数据(文本、图像、音频、视频等)的数学表示。通过“嵌入模型(Embedding Model)”,将复杂数据转换为高维浮点数数组(如512维、1536维等),这个过程叫Embedding。
- 什么是向量数据库?
- 专门用于高效处理这类高维向量数据的数据库。其核心能力是支持相似性搜索(Similarity Search),即寻找与查询向量在多维空间中最接近(最相似)的向量集合。
- 与传统数据库的区别?
- 传统数据库:基于精确匹配(Exact Match)或关键词匹配,如SQL查询
WHERE id = 1或倒排索引。 - 向量数据库:基于模糊/近似匹配(Approximate Match),查找语义上的相关性。例如搜索“如何修理汽车”,它能找到包含“修车指南”的内容。
- 传统数据库:基于精确匹配(Exact Match)或关键词匹配,如SQL查询
2. 核心技术与原理
- 相似度/距离度量(Distance Metrics):
用于判断两个向量有多“像”。常用的度量方式包括:- 余弦相似度(Cosine Similarity):衡量两个向量方向的夹角,不仅看距离还看方向,常用于文本相似度。
- 计算公式:对于 nnn 维空间中的两个向量 A=[a1,a2,…,an]A = [a_1, a_2, \dots, a_n]A=[a1,a2,…,an] 和 B=[b1,b2,…,bn]B = [b_1, b_2, \dots, b_n]B=[b1,b2,…,bn],它们的余弦相似度计算公式如下:
cos(θ)=A⋅B∥A∥∥B∥=∑i=1naibi∑i=1nai2∑i=1nbi2\cos(\theta) = \frac{A \cdot B}{\|A\| \|B\|} = \frac{\sum_{i=1}^{n} a_i b_i}{\sqrt{\sum_{i=1}^{n} a_i^2} \sqrt{\sum_{i=1}^{n} b_i^2}}cos(θ)=∥A∥∥B∥A⋅B=∑i=1nai2∑i=1nbi2∑i=1naibi - 通俗解释:把它想象成计算两个尖端(箭头)在多维空间中指向方向的差异。如果它们的方向完全一致,余弦相似度就是1;如果它们成90度直角(完全不相关),相似度就是0;如果方向完全相反,相似度就是-1。
- 特点:余弦相似度越接近1,说明两个向量越相似。与欧氏距离最大的不同在于,它只关心方向,不关心长度。
- 计算公式:对于 nnn 维空间中的两个向量 A=[a1,a2,…,an]A = [a_1, a_2, \dots, a_n]A=[a1,a2,…,an] 和 B=[b1,b2,…,bn]B = [b_1, b_2, \dots, b_n]B=[b1,b2,…,bn],它们的余弦相似度计算公式如下:
- 欧氏距离(Euclidean Distance / L2距离):两点之间的直线绝对距离。
- 计算公式:对于 nnn 维空间中的两个向量 A=[a1,a2,…,an]A = [a_1, a_2, \dots, a_n]A=[a1,a2,…,an] 和 B=[b1,b2,…,bn]B = [b_1, b_2, \dots, b_n]B=[b1,b2,…,bn],它们之间的欧氏距离 ddd 计算如下:
d(A,B)=∑i=1n(ai−bi)2d(A, B) = \sqrt{\sum_{i=1}^{n} (a_i - b_i)^2}d(A,B)=i=1∑n(ai−bi)2 - 通俗解释:就是把两个向量在每一个维度上的差值平方后加起来,再开平方根。这其实就是我们初中学的勾股定理在多维空间的推广。
- 特点:对于欧氏距离,距离越小,说明两个向量越相似。它对向量的绝对大小(长度)非常敏感。如果两段文本语义相似但长度差异很大,欧氏距离可能会很大,因此在NLP中处理文本特征时,通常会先对向量进行归一化(Normalize)处理之后再进行距离运算。
- 计算公式:对于 nnn 维空间中的两个向量 A=[a1,a2,…,an]A = [a_1, a_2, \dots, a_n]A=[a1,a2,…,an] 和 B=[b1,b2,…,bn]B = [b_1, b_2, \dots, b_n]B=[b1,b2,…,bn],它们之间的欧氏距离 ddd 计算如下:
- 点积(Dot Product / 内积 / Inner Product):两个向量对应元素的乘积之和,常用于考虑向量长度特征的场景。
- 计算公式:对于 nnn 维空间中的两个向量 A=[a1,a2,…,an]A = [a_1, a_2, \dots, a_n]A=[a1,a2,…,an] 和 B=[b1,b2,…,bn]B = [b_1, b_2, \dots, b_n]B=[b1,b2,…,bn],它们的点积计算公式如下:
A⋅B=∑i=1naibi=a1b1+a2b2+⋯+anbnA \cdot B = \sum_{i=1}^{n} a_i b_i = a_1b_1 + a_2b_2 + \dots + a_nb_nA⋅B=i=1∑naibi=a1b1+a2b2+⋯+anbn - 通俗解释:就是把两个向量在每个各自维度上的数值两两相乘,然后把所有的乘积加在一起。
- 特点:点积的值同时依赖于向量的夹角(方向)和长度(模长)。方向越一致且向量越长,点积的值就越大。在推荐系统中十分常用(比如用户向量和物品向量的匹配),它不仅能反映特征方向上的契合度,向量的长度还能天然代表物品的“热门程度”或用户的“活跃偏好”。值得一提的是,如果两个向量都提前做了归一化处理(长度变为1),那么点积的结果和余弦相似度是完全等价的。
- 计算公式:对于 nnn 维空间中的两个向量 A=[a1,a2,…,an]A = [a_1, a_2, \dots, a_n]A=[a1,a2,…,an] 和 B=[b1,b2,…,bn]B = [b_1, b_2, \dots, b_n]B=[b1,b2,…,bn],它们的点积计算公式如下:
- 余弦相似度(Cosine Similarity):衡量两个向量方向的夹角,不仅看距离还看方向,常用于文本相似度。
- 近似最近邻算法(ANN, Approximate Nearest Neighbor):
如果遍历整个数据库进行对比(KNN),计算量太大。向量数据库采用ANN算法在牺牲微小精确度的情况下大幅提升查询速度。主流算法包括:- HNSW (Hierarchical Navigable Small World):基于多层图结构,目前最主流的高性能检索算法,平衡了召回率和速度。
- IVF (Inverted File Index):基于倒排文件/聚类的索引方法结构(常和PQ-乘积量化结合)。
- LSH (Locality-Sensitive Hashing):局部敏感哈希,将相近的点哈希到同一个桶中。
- PQ (Product Quantization):乘积量化,用于数据压缩,减少内存占用。
3. 主流向量数据库分类与产品
- 原生/独立向量数据库(Native Vector Databases)
- Milvus:开源、分布式、功能全面,适合生产级大规模部署。
- Pinecone:云原生架构,易用性强,Serverless。
- Qdrant:托管的云端服务,免运维,专注于效率和API体验。
- Weaviate:基于Rust/GO编写,提供强大的过滤功能。
- Chroma:常用于AI应用(LangChain/LlamaIndex)快速原型开发。
4. 核心功能与工作流
典型工作流(RAG - 检索增强生成):
- 数据分块(Chunking):将长文档切分成小块。
- 向量化(Embedding):调用模型(如OpenAI
text-embedding-3-small或 BGE)将文本块转为向量。 - 入库存储(Indexing):将向量及其原始文本(Payload/Metadata)存入向量数据库,并建立ANN索引。
- 查询(Query):用户输入问题 -> 问题向量化 -> 数据库进行向量相似度搜索(Top-K)。
- 融合生成(Generation):将查找到的相关文本块作为上下文片段,连同问题一起喂给LLM,生成最终回答。
关键功能:
- 混合搜索(Hybrid Search):将传统的关键词搜索(如BM25)与向量搜索结合,通过重排序(Reranking)获得更准的结果。
- 标量过滤(Scalar Filtering/Metadata Filtering):在做向量对比前或后,根据附加的元数据(如日期、分类、作者)进行SQL式的条件过滤(如“只搜索2023年之后的文档”)。
- 动态更新与实时索引:支持数据的增删改(CRUD)和索引的实时或近实时更新。
5. 核心挑战与优化方向
- 内存成本(Memory Consumption):向量数据庞大,HNSW等索引极其消耗内存(RAM)。优化方案:量化(PQ/SQ)、磁盘-内存混合检索方案(DiskANN)。
- 召回率(Recall) vs 延迟(Latency) 的平衡:ANN算法本质上是一种Trade-off。召回率越高(找得越准),耗时越长。需要通过调整算法参数(如HNSW的
ef_construction和M参数)来调优。 - 高维度灾难 (Curse of Dimensionality):向量维度过高时,距离度量失效,检索效率下降。这就需要依赖更强的降维或高级索引算法。
- 通俗解释:在一个低维度(例如2维或3维)空间中,点和点之间的距离差异非常明显,很容易区分哪个点离哪个点近。但是,当我们把维度拉高到几百甚至上千维时(比如1536维的文本向量),数学上会出现一个反直觉的现象:在这么高维的虚无空间里,“所有的点彼此之间的距离都变得差不多大”。
- 后果:
- 最直接的影响就是距离度量失效:既然算出来发现查询向量和所有样本的距离都差不多,那就很难准确找出“谁是最相似的”。
- 检索效率下降:高维度下,为了找哪怕一个最近邻,基于分区的树或图算法很大概率需要在无数个分支里进行全盘扫描,这使得原本高效的 ANN 算法最终退化变成了暴力的全表扫描(KNN)。

1413

被折叠的 条评论
为什么被折叠?



