跳到正文

Embedding 相似性检索怎么工作?

向量检索基本原理:从向量化到相似度计算

原题:请解释在AI项目中,基于embedding向量的相似性检索的基本原理和工作机制?

向量检索 · 美团真题

30 秒回答

  1. embedding将文本映射到语义空间
  2. 相似性通过距离度量(余弦/欧氏)计算
  3. ANN算法加速大规模检索
  4. 倒排索引或图索引优化查询效率

回答与解析

答案要点

  • embedding将文本映射到语义空间
  • 相似性通过距离度量(余弦/欧氏)计算
  • ANN算法加速大规模检索
  • 倒排索引或图索引优化查询效率
  • RAG中用于召回相关文档

核心原理

Embedding语义映射

  • 文本通过预训练模型(如BGE、M3E、OpenAI的text-embedding)编码为固定维度的稠密向量
  • 语义相近的文本在向量空间中距离更近,这是检索有效性的基础

相似性度量

  • 余弦相似度:最常用,关注方向一致性,对向量长度不敏感
  • 欧氏距离:关注绝对距离,适合归一化后的向量
  • 点积:计算快,但受向量模长影响

工作机制

离线阶段:索引构建

文本 → 分块 → Embedding模型 → 向量 → 构建索引(HNSW/IVF-PQ)→ 存入向量库

在线阶段:相似检索

查询文本 → 向量化 → ANN搜索Top-K → 返回相似文档

ANN加速算法

  • HNSW:图索引,查询快、精度高,内存占用大,适合百万级
  • IVF-PQ:倒排+乘积量化,内存省、亿级规模,精度略降
  • 实际选型看数据规模和延迟要求

RAG中的关键作用

作为召回环节,解决"找什么"的问题。检索质量直接决定生成上限,常见优化:query改写、混合检索(向量+关键词)、重排序(Rerank)。

口语版讲法(约4分钟)

  • 本质在问怎么把语义理解转换成工程可算的距离
  • Embedding和相似度是基础
  • ANN索引是核心
  • 混合检索是实战标配
  • 落地风险和判断

这道题其实是在问,怎么把人对语义的理解,转换成机器能算的距离。我们做RAG、做知识库的时候,核心就是靠这个。

先说一下基本原理。文本进来,我会用Embedding模型把它变成一个向量,比如768维或者1024维的稠密向量。你理解成把一句话压缩成一个坐标点,语义相近的,坐标就挨得近。这一步的前提是模型本身质量够,如果模型不行,后面全白搭。

然后算相似度,最常用的是余弦相似度,它只看方向不看模长,适合大部分场景。欧氏距离也行,但得先归一化。说白了,选哪个度量取决于你的向量空间长什么样。

但真正要落地,你不能每次都暴力算所有向量的距离,那太慢了。所以得用ANN算法,也就是近似最近邻搜索。我实际项目里用得最多的是HNSW,它是个图结构,查询快、精度高,但内存吃得多,百万级数据很适合。如果数据量到亿级,我会换IVF加Product Quantization,也就是倒排加乘积量化,省内存,但精度会掉一点。选哪个取决于你的延迟容忍度和精度要求。

这里有个坑:很多人以为向量检索就能解决一切,其实不是。关键词检索在精确匹配上比向量强得多,比如订单号、错误码这些,向量可能找偏,但BM25一搜一个准。所以真正落地的方案,我倾向做Hybrid Search,也就是向量和关键词两条路一起走,然后合并排序。

举个例子,电商客服场景里,用户问“退款怎么还没到”,向量检索能召回相似语义的退款政策文档,但用户如果报了一串订单号,关键词检索能精准定位那条订单记录。两个互补,缺一个体验都会崩。

再说RAG里的召回环节。检索质量直接决定了生成的天花板。我上线前会特别关注几个点:一是chunk切分策略,切太碎丢失上下文,切太长噪声多,得根据文档类型调;二是query改写,用户问题可能很口语化,我会先改写一下再去做检索;三是Rerank,初召回Top100,再用Cross-Encoder重排一次,把最相关的Top5送进生成。

还有一个点值得聊,就是检索的置信度问题。有时候召回来的文档跟问题根本不相关,但模型还是硬用,就会产生Hallucination。我一般会在检索后加一层相关性过滤,低于阈值的直接丢弃。这个阈值怎么定,其实跟业务场景和模型能力都有关系。

所以整体上,我会把相似性检索看成整个RAG系统的漏斗入口,入口质量不行,后面生成再怎么调也救不回来。我更倾向把检索和生成当整体来优化,而不是各自独立调参数。

关键一句:检索后的相关性过滤和阈值设定

面试官还可能这样问

  1. 问法 1 · 场景切入

    我看你做过RAG相关的项目。假设用户输入一个查询,你要从百万级知识库里快速找到相关片段,这时候你会怎么设计检索流程?核心依赖的是什么技术?

  2. 问法 2 · 层层追问

    向量检索的基本原理你能讲讲吗?……文本怎么变成向量的?……两个向量怎么比较相似?……如果数据量特别大,怎么保证检索速度?

  3. 问法 3 · 直球架构

    解释一下基于embedding的相似性检索的基本原理和工作机制,包括离线索引构建和在线查询的完整流程。

同模块相关题目