跳到主要内容
约 6 分钟3 张卡

Embedding 与向量检索

Embedding 模型把文本映射成固定维度的向量,语义相近的文本在向量空间中距离更近。向量检索在大量向量中找出与查询向量最相似的若干个,是 RAG 语义召回的基础。本文讲相似度度量、近似最近邻索引 HNSW、向量数据库选型和向量检索的局限。

1. 面试核心​

先记住这几条,再读正文
  • 检索流程:文档块和查询用同一个 Embedding 模型向量化,计算相似度,取 Top-K。卡 · Embedding
  • 常用相似度有余弦相似度、内积和欧氏距离。向量归一化后三者排序结果一致;要与 Embedding 模型训练时使用的度量保持一致。
  • 精确检索要与所有向量比较,数据量大时太慢,生产中用近似最近邻(ANN)索引,以少量召回损失换取速度。
  • HNSW 是多层图索引:上层稀疏用于快速定位,下层稠密用于精细搜索;M、efConstruction、efSearch 控制精度、内存和速度。卡 · 近似最近邻与 HNSW
  • 向量库按数据规模、是否需要与业务数据联合过滤、是否需要关键词混合检索来选,带过滤条件的召回和延迟要实测。卡 · 向量数据库
  • 向量检索对专有名词、编号、精确匹配不敏感,通常与关键词检索组合使用,见混合检索与重排序。

2. Embedding​

Embedding 模型通常是 Transformer 编码器,输入文本输出一个几百到几千维的向量。训练目标是让语义相关的文本对(问题与答案、同义句)向量接近,不相关的远离。

选择和使用时注意:

  • 语言与领域:中文场景选择在中文语料上表现好的模型;专业领域可以用领域数据微调。
  • 输入长度上限:超出部分会被截断,切分时块不能超过上限。
  • 非对称检索:查询短、文档长,一些模型要求给查询和文档加不同前缀,按模型说明使用。
  • 模型一致:更换 Embedding 模型后,所有文档都要重新向量化,新旧向量不可混用。

3. 相似度度量​

度量公式特点
余弦相似度cos(a,b) = a·b / (‖a‖‖b‖)只看方向,不受向量长度影响,最常用
内积a·b计算快;向量已归一化时等于余弦相似度
欧氏距离‖a − b‖距离越小越相似;归一化后与余弦单调对应

向量归一化为单位长度后,‖a − b‖² = 2 − 2·cos(a,b),三种度量得到的排序相同。因此很多系统在写入时先归一化,再用计算最快的内积。

4. 近似最近邻与 HNSW​

精确检索(暴力搜索)对每个查询计算与全部 N 个向量的相似度,复杂度 O(N·d)。百万级以上数据需要 ANN 索引。

HNSW(Hierarchical Navigable Small World,分层可导航小世界图):

  • 每个向量是图中的一个节点,与若干个相近的节点相连。
  • 节点按概率分配到多层:最底层包含所有节点,越往上节点越少,连接跨度越大。
  • 查询时从最高层的入口点出发,贪心地移动到离查询更近的邻居,到达局部最近点后下降一层继续,直到最底层,在最底层维护一个候选列表找出 Top-K。

上层像高速公路,快速接近目标区域;底层像街道,精细查找。查询复杂度接近 O(log N)。

参数作用调大的影响
M每个节点的最大连接数召回率提高,内存和构建时间增加
efConstruction构建时的候选列表大小图质量更好,构建变慢
efSearch查询时的候选列表大小召回率提高,查询变慢

HNSW 需要把图放在内存中,删除通常是标记删除。其他常见索引有 IVF(先聚类,查询时只搜索最近的几个簇)和 PQ(乘积量化压缩向量以节省内存),数据量极大时常组合使用。

5. 向量数据库​

类型例子适合
专用向量数据库Milvus、Qdrant、Weaviate大规模向量、需要分布式和多种索引
关系库扩展PostgreSQL + pgvector数据量中等,需要和业务数据一起做事务与过滤
搜索引擎Elasticsearch、OpenSearch已有全文检索,需要关键词与向量混合检索
内存库FAISS单机原型或离线批处理,不提供完整的数据库功能

选型看数据规模、是否需要与业务数据联合过滤、是否需要关键词混合检索、运维成本和团队已有技术栈。元数据过滤(权限、版本)的性能也要实测:先过滤再检索可能导致 HNSW 图连通性变差,先检索再过滤可能导致结果不足 K 个。

6 · 面试题卡片​

6.1 讲一下向量检索的原理。常用的相似度计算方法有哪些?​

出现公司:百度、联想、腾讯、字节跳动

考察重点

  • Embedding 的作用与模型一致性。
  • 余弦、内积、欧氏距离的关系,精确检索与 ANN。

相关内容:Embedding、相似度度量。

参考回答

用 Embedding 模型把文档块和查询映射为向量,语义相近的文本向量接近。查询时计算查询向量与库中向量的相似度,取最相似的 Top-K 个块。文档和查询必须使用同一个模型。

相似度常用余弦相似度、内积和欧氏距离。余弦只看方向;内积计算最快;欧氏距离越小越相似。向量归一化后三者排序一致,所以常在写入时归一化再用内积,并与模型训练时的度量保持一致。数据量大时不做暴力比较,而是用 HNSW、IVF 等近似最近邻索引,用少量召回损失换取速度。

6.2 HNSW 索引的原理是什么?关键参数如何影响效果?​

出现公司:阿里云

考察重点

  • 分层图结构与贪心搜索过程。
  • M、efConstruction、efSearch 的精度、内存和速度取舍。

相关内容:近似最近邻与 HNSW。

参考回答

HNSW 把向量组织成多层近邻图。每个节点与若干相近节点相连,节点按概率进入不同层,底层包含全部节点,越往上越稀疏、连接跨度越大。查询从顶层入口点开始,贪心地走向离查询更近的邻居,到局部最优后下降一层继续,最底层用候选列表精细搜索得到 Top-K,复杂度接近对数级。

M 是每个节点的连接数,越大召回越高但内存和构建时间增加;efConstruction 影响建图质量和构建速度;efSearch 是查询时的候选列表大小,越大召回越高、查询越慢,可以按延迟要求在线调整。HNSW 图常驻内存,删除多为标记删除,需要定期重建或合并。

6.3 常见的向量数据库有哪些?如何选型?​

出现公司:联想、ZS、Accenture、淘宝闪购

考察重点

  • 专用向量库、关系库扩展、搜索引擎的差异。
  • 规模、联合过滤、混合检索和运维成本。

相关内容:向量数据库。

参考回答

常见的有专用向量数据库 Milvus、Qdrant、Weaviate,关系库扩展 pgvector,搜索引擎 Elasticsearch、OpenSearch,以及单机库 FAISS。

选型看几点:数据规模和并发,大规模分布式选专用向量库;需要与业务表联合过滤、保证事务一致时,中等规模用 pgvector;已有全文检索、需要关键词和向量混合检索时用 Elasticsearch;原型或离线处理用 FAISS。还要实测带权限、版本过滤时的召回和延迟,并考虑团队运维能力。

7. 参考资料​