【Java 开发日记】向量检索的流程是怎样的?Embedding 和 Rerank 各自的作用?

目录

一、向量检索的整体流程

离线阶段(索引构建)

在线阶段(检索与重排)

[二、Embedding 的作用](#二、Embedding 的作用)

核心特点

具体作用

局限性

[三、Rerank 的作用](#三、Rerank 的作用)

核心特点

具体作用

四、两者对比与配合

配合逻辑

五、一个具体例子

流程

面试回答


一、向量检索的整体流程

向量检索通常用于语义搜索、RAG(检索增强生成)、推荐系统 等场景。其标准流程可以分为 离线阶段在线阶段

离线阶段(索引构建)

  1. 文档切分(Chunking)
    将长文档切分成较小的文本块(如 200--500 字),便于后续精准检索。
  2. Embedding 向量化
    使用 Embedding 模型将每个文本块转换成固定长度的浮点数向量 (例如 768 维、1536 维)。
    → 向量代表该文本的语义特征
  3. 构建向量索引
    将所有向量存入向量数据库(如 Milvus、Faiss、Qdrant),并建立近似最近邻(ANN)索引(如 HNSW、IVF),以支持快速检索。

在线阶段(检索与重排)

  1. 用户输入 Query
    例如用户问:"如何提高跑步速度?"
  2. Query 向量化
    使用同一个 Embedding 模型将 Query 转换成向量。
  3. 向量相似度搜索
    在向量数据库中检索与 Query 向量最相似的 Top-K 个向量(例如 K=100)。
    • 常用相似度:余弦相似度、内积、欧氏距离。
    • 这一步是粗排,追求快,不追求极准。
  1. Rerank(重排序)
    使用一个更强大的交叉编码器(Cross-Encoder) 模型,对候选的 K 个文本块与 Query 进行精细的相关性打分,重新排序,输出 Top-N(例如 N=5)。
  2. 返回最终结果
    将重排后的最相关文本块返回给下游任务(如 LLM 生成答案)。

二、Embedding 的作用

Embedding 模型(又称双编码器,Bi-Encoder)将文本映射到向量空间。

核心特点

  • 独立编码:Query 和 Document 分别独立通过模型生成向量。
  • 计算速度快:文档向量可以离线预计算并建索引,在线只需计算 Query 向量。
  • 语义表示:相似语义的文本在向量空间中距离更近。

具体作用

  1. 将非结构化文本转换成可计算的数学对象(向量),使得语义相似度可以通过向量距离度量。
  2. 支持大规模快速检索:通过 ANN 索引,可以在百万/十亿级向量中毫秒级召回。
  3. 泛化能力强:可以匹配同义词、上下位词、不同表达方式的相同语义(相比关键词检索)。

局限性

  • 精度有限:Embedding 是压缩的语义表示,会丢失细粒度信息(如否定、特定关系)。
  • 对复杂查询(如多条件、逻辑组合)不够精准。

例:

Query:"不是苹果公司的产品"

可能依然会匹配到"iPhone"相关文本,因为"苹果"语义太强。

三、Rerank 的作用

Rerank 模型(通常是交叉编码器,Cross-Encoder)对(Query, Document)对进行联合打分。

核心特点

  • 联合编码:将 Query 和 Document 拼接在一起输入模型,通过 Transformer 的 Self-Attention 进行深层交互。
  • 计算速度慢:无法预计算,每个候选对都要单独通过模型,因此只能对小规模候选集(如 100 个)进行重排。
  • 精度高:能捕捉 Query 与 Document 之间的细粒度语义匹配、逻辑关系、否定、条件等。

具体作用

  1. 修正 Embedding 粗排的误差
    Embedding 可能召回语义相似但实际不相关的文档(例如"跑步速度" vs "汽车速度")Rerank 能区分。
  2. 提升排序的相关性
    尤其适合 Query 复杂、需要精确理解用户意图的场景。
  3. 引入更多信号
    可以结合业务规则、时间新鲜度、权威性等,但标准的 Rerank 模型本身只做语义匹配打分。
  4. 最终决定输出顺序
    给 LLM 的上下文通常是 Rerank 后排名靠前的少量文档。

例:

Query:"如何提高跑步速度?"

  • Embedding 召回的第 1 名可能是"跑步机速度调节方法"(语义较近但不完全对)。
  • Rerank 会将"步频训练、间歇跑技巧"提到前面。

四、两者对比与配合

|-------|----------------------------|----------------------------|
| 维度 | Embedding (Bi-Encoder) | Rerank (Cross-Encoder) |
| 输入方式 | Query 和 Doc 独立编码 | Query + Doc 拼接联合编码 |
| 计算速度 | 快(可预计算) | 慢(无法预计算) |
| 精度 | 中等 | 高 |
| 适用阶段 | 粗排(召回) | 精排(重排序) |
| 候选集大小 | 百万/十亿级 | 百/千级 |
| 模型复杂度 | 较低(如 BERT 的池化输出) | 较高(需全连接分类层) |

配合逻辑

Embedding 负责"广",Rerank 负责"准"。

  • 没有 Embedding:每次检索都要对全库文档做 Cross-Encoder,无法实用。
  • 没有 Rerank:可能召回很多"貌似相关但实际无用"的内容,影响下游 LLM 生成质量。

五、一个具体例子

文档库(已切块):

  • D1:"步频训练是提高跑步速度的关键,每分钟 180 步为佳。"
  • D2:"提高汽车速度需要加大油门和优化空气动力学。"
  • D3:"跑步前热身可以预防受伤,但对速度提升帮助有限。"

Query:"怎么通过步频提升跑步速度?"

流程

  1. Embedding 召回 Top-2
    • D1(相似度 0.92)
    • D2(相似度 0.78,因为"速度"一词)
      (D3 相似度 0.65,未进 Top-2)
  1. Rerank 对 (Q,D1) 和 (Q,D2) 打分
    • (Q,D1) → 0.99
    • (Q,D2) → 0.10(因为发现"汽车"与"跑步"无关)
  1. 最终输出:只返回 D1。

面试回答

我觉得可以把向量检索理解成一个**'从粗到细的查找过程'**,主要分三步:

  1. 提前建库:先把所有文档(或商品、图片等)通过 Embedding 模型转成向量,存到向量数据库里。
  2. 查询转换 :用户输入一个问题,用同一个Embedding 模型把问题也转成向量。
  3. 近似检索:用 FAISS 这类工具,在库里快速找到最相似的 Top-K 个向量(比如 100 个)。这一步是近似最近邻搜索,牺牲一点精度换速度。

Embedding 的作用是把非结构化数据变成语义向量 ,核心是召回

  • 它要保证:意思相近的内容,在向量空间里距离也近。比如'怎么退火车票'和'取消高铁订单'的向量会很接近。但它有个局限:为了效率,只能用一个向量代表整个句子或段落,所以细节上会丢。比如两个词义相近但实际不相关的句子,也可能被误认为相似。

Rerank 是用来给召回结果重新精细打分的。

  • 它的模型通常更大,会把用户 Query 和每个召回文档拼在一起输入模型,直接输出一个相关性分数(比如 0.1 到 0.9)。这个过程精度很高,能理解对比、否定、多跳推理等复杂关系,但计算量也大,没法对几百万条数据做。所以典型做法是:先用 Embedding 快速召回 100 条,再用 Rerank 挑出最相关的 10 条给用户。

总结一句话:Embedding负责'快而粗'地召回候选集,Rerank负责'慢而精'地重排Top结果。两者结合,兼顾速度和效果,这是工业界标准做法。

如果小假的内容对你有帮助,请点赞评论收藏。创作不易,大家的支持就是我坚持下去的动力!

相关推荐
j_xxx404_1 天前
【AI大模型入门(三)】大模型API接入、Ollama本地部署与RAG核心(Embedding)
人工智能·ai·embedding
算.子3 天前
【Spring AI 实战】七、Embedding 向量化与向量数据库选型对比
人工智能·spring·embedding
rising start6 天前
RAG入门与在Dify中的简单实践
embedding·dify·rag
coderlin_7 天前
Langgraph项目 一(mysql,es,qdrant,embedding模块)
mysql·elasticsearch·embedding
deephub8 天前
无 Embedding、无向量数据库的 RAG 方法:PageIndex 技术解析
人工智能·大语言模型·embedding·rag
寂寞旅行8 天前
模型蒸馏: 小模型也有“大用“
人工智能·embedding
deephub11 天前
向量相似性搜索详解:Flat Index、IVF 与 HNSW
人工智能·python·机器学习·embedding·向量检索
华农DrLai12 天前
什么是LLM做推荐的三种范式?Prompt-based、Embedding-based、Fine-tuning深度解析
人工智能·深度学习·prompt·transformer·知识图谱·embedding
rrrjqy12 天前
深入浅出 RAG:万物皆可向量化 (Embedding) 与 Spring AI + pgvector 实战
人工智能·spring·embedding