向量数据库:技术入门 [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 更像是压缩而不是索引策略;对于何时使用特定索引类型的指导也存在争议。