向量数据库:技术入门 [pdf]

向量数据库正在成为语义搜索和检索增强生成的核心基础设施,但工程师们仍在权衡:在 SQLite 或带 pgvector 的 Postgres 里直接做暴力搜索等更简单方案,是否已经足够。评论者交换资源和基准测试,讨论余弦距离与欧氏距离以及各种索引方案(HNSW、IVF、ANNOY、PQ),并强调嵌入是由外部 ML 模型生成的,而不是数据库本身。一个反复出现的主题是:实际需求——数据规模、延迟、成本,以及词法–向量混合搜索——应当决定是采用“完整”的向量数据库,还是更轻量的扩展或库。

课程和附加资源

  • 讨论围绕一份基于录制课程整理而成的 PDF 入门材料展开,同时还有一个关联的(折扣)Udemy 视频课程。
  • 评论者分享了许多补充资源:关于向量数据库的学术综述、关于嵌入和 ANN 搜索的通用入门,以及厂商文档。

余弦相似度 vs 欧氏距离

  • 围绕为什么余弦相似度被广泛使用展开了长篇讨论。
  • 支持观点:幅度通常没有语义意义;归一化后可简化为点积;效率更高。
  • 怀疑意见:在某些任务里幅度可能很重要;对余弦的解释常常显得含糊;也有人认为真正的目标是最大化内积,而归一化主要只是出于便利。
  • 还有人引入了随机超平面和局部敏感哈希的直觉。共识是:实践上更偏好余弦,但理论上的权衡相当微妙。

暴力搜索 vs ANN / 向量索引

  • 多个基准测试表明,对几十万到数百万向量进行暴力搜索出乎意料地可行,尤其是在批量处理时,以及当 LLM 生成主导延迟时。
  • 讨论线性扫描何时会“失效”:这取决于向量数量、维度、RPS 和内存。
  • ANN 结构(HNSW、IVF、Annoy、LSH 等)在更大规模或更高 QPS 时变得重要,不过基于图的方法会带来内存和构建时间成本。

专用向量数据库 vs 传统数据库

  • 许多人在问,何时应从 SQLite/Postgres+pgvector 迁移到专门的向量数据库(Pinecone、Qdrant 等)。
  • 对于 O(100k) 级别的向量和低流量场景,简单的数据库内方案或内存方案通常已经“足够好”。
  • 有些人报告称,他们已将自定义或轻量引擎扩展到数千万向量;也有人强调托管向量数据库的成本/复杂度,并提出替代方案。
  • 大家希望有更清晰的权衡指导(索引构建速度、查询延迟、成本、运维)。

混合搜索与 RAG

  • 如今大多数 RAG 系统使用向量搜索;也有一些仍依赖关键词/文本搜索。
  • 几位评论者强调,混合式(向量 + 词法)搜索正越来越成为标准;传统数据库在增加向量支持,而向量数据库也在增加词法特性。

嵌入、特征选择与语义

  • 一个重要澄清:向量数据库只存储和搜索向量;嵌入是由外部的 ML 模型生成的。
  • 关于“特征选择”和人类判断有大量讨论:
    • 一种观点:现代深度学习加注意力机制,已经在很大程度上为常见模态自动完成了从原始数据中提取特征;不需要显式的手工特征设计。
    • 反方观点:人类仍然要决定表示方式(例如音频的 FFT)、目标函数,以及“相似性”到底应当意味着什么;缺失特征会导致系统性错误的“相似”结果。
  • 需要注意的是,嵌入不一定纯粹是语义性的;它们也可以编码行为(例如推荐系统)或时间/上下文。

用例与替代方案

  • 向量数据库主要用于相似/语义搜索、相关项目检索以及 RAG。
  • 对于特定视觉任务(例如头发/肤色识别),回应者认为专门的 ML 模型(CNN、面部检测器、多模态模型)会比朴素的图像相似搜索更好;向量数据库是一个组件,而不是替代品。

嵌入式 / 轻量级选项

  • 文中提到了多种嵌入式或简单方案:带自定义函数的 SQLite、DuckDB、Chroma、SQLite 扩展、小型库(Faiss、HNSWlib、usearch),以及大型系统的本地/嵌入式模式。

对该入门材料的批评

  • 几个人指出表格中存在错误(行对调、索引类型颠倒)。
  • 也有人反对把向量数据库描述成“按语义聚类”或“为分析优化”:
    • 聚类完全取决于嵌入和任务。
    • 向量数据库更适合被视为搜索/检索系统,更像搜索引擎而不是分析型数仓。
  • 还有一些技术细节上的挑剔:例如,PQ 更像是压缩而不是索引策略;对于何时使用特定索引类型的指导也存在争议。