向量库面试题
1. 基础概念(共15题)
1. 什么是向量数据库?它解决了什么问题?
向量数据库(Vector Database)是一种专门用于存储、索引和检索高维向量数据的数据库系统,通常用于处理非结构化数据的相似度搜索问题,如图像、文本、音频或视频的表示向量(embedding)。
传统数据库不适合用来进行高维向量之间的相似度搜索,而这是很多 AI 应用的核心需求,比如:
应用场景 | 需要解决的问题 |
---|---|
文本检索(RAG) | 找到与用户问题语义最相近的文档片段 |
图像检索 | 找到相似风格或内容的图片 |
推荐系统 | 为用户推荐兴趣相似的内容或产品 |
人脸识别 | 找到与某张人脸最相似的其他人脸图像 |
多模态搜索 | 用一句话检索一张对应的图像 |
这些都要求在一个海量的向量集合中快速找到“最相近”的向量,即最近邻搜索(Nearest Neighbor Search)。
- 向量数据库和传统关系型数据库的最大区别是什么?
向量数据库与传统关系型数据库(如 MySQL、PostgreSQL)在设计目标、数据类型、查询方式和底层实现上存在本质区别。以下是它们最大的区别及核心对比:
最大区别:数据类型与查询方式
项目 | 向量数据库 | 关系型数据库 |
---|---|---|
主要数据类型 | 高维向量(如 512 维、1024 维 float 数组) | 表格结构化数据(字符串、数字、日期等) |
查询目标 | 找出“相似”的向量(最近邻搜索) | 精确匹配或范围查找(=、<、>、LIKE 等) |
查询语义 | 相似度检索(Approximate Nearest Neighbor,ANN) | 精确匹配查询(SQL 语句) |
举例:
任务 | 向量数据库做的事 | 关系型数据库做的事 |
---|---|---|
文本检索 | 给一个句子,找出语义最相似的文本段落 | 通过关键词或字段筛选满足条件的记录 |
图像搜索 | 上传一张猫的图片,找出最像猫的其他图片 | 不支持此类搜索 |
人脸识别 | 给定一个人脸向量,找出最相似的面孔 | 无法处理此类相似性问题 |
其他重要区别对比
维度 | 向量数据库 | 关系型数据库 |
---|---|---|
核心算法 | HNSW、IVF、PQ 等 ANN 算法 | B+ 树、哈希索引等 |
典型用途 | 图像/文本/音频/多模态相似搜索、RAG、推荐系统、人脸识别 | 电商订单、用户表、财务数据、ERP 系统等 |
数据规模适应性 | 支持亿级高维向量搜索 | 适用于百万级结构化记录处理 |
查询语言 | API 调用(部分支持 SQL-like) | 标准 SQL |
存储结构 | 向量+元数据(embedding + metadata) | 结构化表格字段 |
一致性要求 | 允许近似查询(ANN)以换取性能 | 高一致性事务保障(ACID) |
总结一句话:
向量数据库适合处理“模糊相似”的非结构化数据搜索问题,而关系型数据库适合处理“精确匹配”的结构化数据查询。
- 什么是向量?向量如何表达文本/图像/音频等数据?
- 高维向量与低维向量的特点有何不同?
- 什么是“相似性搜索”?它与精确匹配有何区别?
- 什么是向量空间模型(VSM)?
- 如何将文本数据转化为向量?
- 词向量和句向量的区别是什么?
- 什么是高维空间的“维度灾难”?
- 为什么常使用浮点型向量而非整数?
- 向量之间的相似性如何量化?
- 什么是稠密向量和稀疏向量?
- 向量数据库如何支持多模态数据?
- 向量数据库是否支持布尔查询或范围查询?
- 什么是“嵌入”(Embedding)?如何生成它?
2. 相似性搜索算法(共15题)
- 什么是K近邻(KNN)搜索?
- 什么是近似最近邻(ANN)搜索?优点是什么?
- 欧几里得距离的公式是什么?适用于哪些场景?
- 余弦相似度是如何计算的?适合什么场景?
- 点积(Dot Product)与余弦相似度有何联系?
- 曼哈顿距离和闵可夫斯基距离的区别?
- 如何在百万级向量中高效查找最相似的10个?
- 相似性搜索中如何使用批量查询(batch query)?
- 什么是Top-K搜索?如何提高其效率?
- 在文本检索中,余弦相似度是否总是优于L2?
- 向量标准化(normalize)对搜索结果有何影响?
- 如何评估相似性搜索结果的准确性(Recall@K等)?
- 什么是倒排索引与向量搜索的组合用法?
- ANN 与 Brute-force 检索的速度与准确率对比?
- 在多模态检索中如何设计相似性函数?
3. 索引结构(共15题)
- FAISS 中有哪些主要索引类型?
- 什么是 HNSW(Hierarchical Navigable Small World)?
33. IVF(Inverted File)索引是如何工作的?
1. **向量聚类**:首先将所有向量通过聚类算法(如k-means)分成多个簇(cluster)
2. **倒排索引构建**:为每个簇建立一个列表,记录属于该簇的所有向量
3. **搜索过程**:
- 查询时先确定查询向量最接近的几个簇(称为"探针")
- 然后只在这些簇的向量中进行精确或近似搜索
34. 什么是 PQ(Product Quantization)?如何压缩向量?
PQ(Product Quantization,乘积量化) 是一种高效的向量压缩和近似最近邻搜索(Approximate Nearest Neighbor, ANN)方法,常用于大规模向量检索系统中,比如图像检索、NLP、推荐系统等。
PQ 的核心思想是:
将高维向量拆分成若干低维子向量,对每个子向量分别进行独立的量化(即聚类),从而实现高效压缩和快速距离估计。
压缩过程可以分为以下几步:
- 向量分割
假设原始向量维度为 $D$,我们将其均匀划分为 $M$ 个子向量,每个子向量维度为 $D/M$。
- 训练码本(Codebook)
对每个子向量集合分别使用 K-means 聚类,训练出 $K$ 个聚类中心(即码本):
- 每个子空间都有一个独立的码本。
- 每个码本的大小决定了压缩精度和存储大小。
- 编码(Quantization)
将每个子向量替换为其最接近的聚类中心的索引:
最终,整个向量被表示为一组索引:$[q₁, q₂, ..., q_M]$。
举个例子
假设有一个 128 维的向量:
- 划分为 $M = 8$ 个子向量(每个16维);
- 每个子空间使用 $K = 256$ 个聚类中心;
- 每个索引用 1 字节(8 bits)表示;
- 最终压缩后向量仅占用 8 Bytes。
相比于原始 128维 float 向量(通常是 128×4 = 512 Bytes),压缩率高达 64 倍。
PQ 的优点
优点 | 说明 |
---|---|
压缩率高 | 显著减少内存占用 |
距离计算快 | 可通过查表(lookup table)快速估算向量间距离 |
可扩展 | 与倒排索引(IVF)等技术结合效果更佳 |
PQ 的应用场景
- Facebook FAISS:使用 PQ/IVF-PQ 进行高效的向量检索;
- 大规模推荐系统:压缩向量以节省内存;
- 图像/文本检索:通过近似距离搜索相似内容。
- IVF-PQ 的结构是如何组成的?
- Scalar Quantization 和 Product Quantization 有何不同?
- 什么是 OPQ(Optimized PQ)?
- 什么是 Flat 索引?适用于哪些场景?
- 什么是 Annoy?它的原理是什么?
- HNSW 与 IVF 哪种更适合低延迟查询?
- 多段索引结构(Multi-level Index)是如何工作的?
- 怎么评估一个索引结构的构建时间和搜索性能?
- 向量数据库中的索引压缩技术有哪些?
- 图索引(如HNSW)和树索引(如KD-Tree)相比有何优势?
- 为什么 KD-Tree 不适用于高维向量?
4. 性能优化(共10题)
- 如何加快向量检索的响应速度?
- 什么是 Recall / Precision / Latency 在向量库中代表什么?
- 向量数据库如何进行缓存优化?
- 如何使用量化技术(PQ/OPQ)来压缩数据?
- 如何利用GPU加速向量搜索?
- 查询并发量大时,向量数据库如何扩展?
- 如何调整索引参数来权衡搜索速度与准确率?
- 向量数据库中的预热机制(warm-up)是做什么的?
- 向量插入/删除频繁时如何维持索引的性能?
- 如何避免“冷启动”问题影响搜索质量?
5. 应用场景(共10题)
- 向量数据库在推荐系统中如何使用?
- 如何构建一个图像相似性检索系统?
- 多语言搜索(跨语言向量检索)是怎么实现的?
- 如何利用向量搜索做文本去重?
- 音频指纹识别是否可用向量数据库实现?
- 如何结合向量库做用户画像匹配?
- 在知识问答系统中如何使用向量检索?
- 向量库在金融风控场景下如何应用?
- 使用向量搜索辅助内容审核有哪些方法?
- 如何用向量库支持“反向搜索”(given output, find similar input)?
6. 特定数据库系统(共15题)
- FAISS 是什么?它的主要应用场景有哪些?
- FAISS 中如何选择合适的索引类型?
- FAISS 是如何进行批量检索的?
- Milvus 是什么?它的整体架构是怎样的?
- Milvus 与 FAISS 的对比有哪些?
- Milvus 中如何实现索引重建?
- Weaviate 是什么?支持哪些语义搜索能力?
- Pinecone 的使用门槛高吗?部署方式如何?
- Pinecone 如何处理版本管理与回滚?
- Qdrant 的特点是什么?
- 向量数据库与 Elasticsearch 的集成方式有哪些?
- 如何用 FAISS + Transformers 实现语义搜索?
- 哪些向量数据库支持云原生部署?适用于哪些公司?
- 哪些库适合嵌入移动端/边缘设备?
- OpenSearch 中如何使用 k-NN 插件做向量检索?
7. 分布式系统与部署(共10题)
- 向量数据库如何横向扩展(sharding)?
- 如何确保分布式环境下的查询一致性?
- 什么是副本复制机制?它如何提高可用性?
- 向量库在 Kubernetes 上如何部署?
- 如何监控向量数据库的健康状态?
- 如何做多租户隔离管理(multi-tenancy)?
- 如何配置负载均衡以保证向量查询性能?
- 数据迁移时如何避免索引重建?
- 向量库如何与云存储(S3/GCS)结合?
- 在边缘计算场景中部署向量数据库需要考虑什么?
8. 高级话题与趋势(共10题)
- 什么是 Learned Index?它如何替代传统索引结构?
- Faiss 是否适合用于持续向量更新的业务场景?
- 如何评估语义相似性与向量相似性的关系?
- 向量数据库如何做 ACL 权限控制?
- 支持高频更新的向量库该如何设计?
- 多模态向量如何实现联合检索?
- 你如何看待“RAG + 向量数据库”在AI中的应用?
- 向量库和图数据库是否可以融合使用?
- 下一代向量数据库有哪些值得关注的特性?
- 你认为未来向量库的发展方向是什么?