1-向量数据库概览

1. 概念与基础

  • 什么是向量(Vector)?
    • 在AI中,向量是对非结构化数据(文本、图像、音频、视频等)的数学表示。通过“嵌入模型(Embedding Model)”,将复杂数据转换为高维浮点数数组(如512维、1536维等),这个过程叫Embedding。
  • 什么是向量数据库?
    • 专门用于高效处理这类高维向量数据的数据库。其核心能力是支持相似性搜索(Similarity Search),即寻找与查询向量在多维空间中最接近(最相似)的向量集合。
  • 与传统数据库的区别?
    • 传统数据库:基于精确匹配(Exact Match)或关键词匹配,如SQL查询WHERE id = 1或倒排索引。
    • 向量数据库:基于模糊/近似匹配(Approximate Match),查找语义上的相关性。例如搜索“如何修理汽车”,它能找到包含“修车指南”的内容。

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∥∥BAB=i=1nai2i=1nbi2i=1naibi
      • 通俗解释:把它想象成计算两个尖端(箭头)在多维空间中指向方向的差异。如果它们的方向完全一致,余弦相似度就是1;如果它们成90度直角(完全不相关),相似度就是0;如果方向完全相反,相似度就是-1。
      • 特点:余弦相似度越接近1,说明两个向量越相似。与欧氏距离最大的不同在于,它只关心方向,不关心长度
    • 欧氏距离(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=1n(aibi)2
      • 通俗解释:就是把两个向量在每一个维度上的差值平方后加起来,再开平方根。这其实就是我们初中学的勾股定理在多维空间的推广。
      • 特点:对于欧氏距离,距离越,说明两个向量越相似。它对向量的绝对大小(长度)非常敏感。如果两段文本语义相似但长度差异很大,欧氏距离可能会很大,因此在NLP中处理文本特征时,通常会先对向量进行归一化(Normalize)处理之后再进行距离运算。
    • 点积(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_nAB=i=1naibi=a1b1+a2b2++anbn
      • 通俗解释:就是把两个向量在每个各自维度上的数值两两相乘,然后把所有的乘积加在一起。
      • 特点:点积的值同时依赖于向量的夹角(方向)和长度(模长)。方向越一致且向量越长,点积的值就越。在推荐系统中十分常用(比如用户向量和物品向量的匹配),它不仅能反映特征方向上的契合度,向量的长度还能天然代表物品的“热门程度”或用户的“活跃偏好”。值得一提的是,如果两个向量都提前做了归一化处理(长度变为1),那么点积的结果和余弦相似度是完全等价的。
  • 近似最近邻算法(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 - 检索增强生成):

  1. 数据分块(Chunking):将长文档切分成小块。
  2. 向量化(Embedding):调用模型(如OpenAI text-embedding-3-small 或 BGE)将文本块转为向量。
  3. 入库存储(Indexing):将向量及其原始文本(Payload/Metadata)存入向量数据库,并建立ANN索引。
  4. 查询(Query):用户输入问题 -> 问题向量化 -> 数据库进行向量相似度搜索(Top-K)。
  5. 融合生成(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_constructionM 参数)来调优。
  • 高维度灾难 (Curse of Dimensionality):向量维度过高时,距离度量失效,检索效率下降。这就需要依赖更强的降维或高级索引算法。
    • 通俗解释:在一个低维度(例如2维或3维)空间中,点和点之间的距离差异非常明显,很容易区分哪个点离哪个点近。但是,当我们把维度拉高到几百甚至上千维时(比如1536维的文本向量),数学上会出现一个反直觉的现象:在这么高维的虚无空间里,“所有的点彼此之间的距离都变得差不多大”。
    • 后果
      1. 最直接的影响就是距离度量失效:既然算出来发现查询向量和所有样本的距离都差不多,那就很难准确找出“谁是最相似的”。
      2. 检索效率下降:高维度下,为了找哪怕一个最近邻,基于分区的树或图算法很大概率需要在无数个分支里进行全盘扫描,这使得原本高效的 ANN 算法最终退化变成了暴力的全表扫描(KNN)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值