🏠 总目录📚 本教程 08b · 重排与选型 ← →
📑 本页目录(点开跳转)

08b · 重排与 Embedding 选型

⏱ 26 分钟 | ⭐ 按错误发生的位置决定优化顺序


🎯 一句话

正确文档已经被召回了、却排在第 15 位被截断 —— 这是 RAG 最常见的失败形态, 而重排是修它性价比最高的一步,是否划算需要用相同任务集比较质量、成本与延迟。 先查故障发生在哪一层:输入前缀、语种、截断或向量版本错了,应先修配置;候选集已有正确资料再比较重排。换 embedding 时还要处理索引迁移。


🎯 环节三:重排候选集里已有的证据

结果对照

双塔 Embedding(检索用) Cross-Encoder(重排用)
问题和文档分别编码,点积 问题和文档拼在一起过模型
✅ 快,能扫全库 ✅ 能做深度交互,效果需实测
❌ 不能做深度交互 ❌ 慢,只能处理几十上百条
先用向量+BM25 召回 100 条,再用 Cross-Encoder 精排出 10 条

🔗 完全是推荐算法第 8 章的「双塔做召回、精排做交叉」。同一套思想。

固定同一候选集比较重排前后,再看答案质量和额外延迟。重排无效时保留简单基线,不凭经验断定它一定优于更换 embedding。

🥊 Cross-Encoder / ColBERT / LLM:三种重排怎么选

"重排"不是一种东西,是三条不同的路线。它们的核心差别只有一个:问题和文档在什么时候相遇。

路线 交互位置 文档预计算 主要代价 选型依据
双塔 各自编码后比较向量 可以 编码与索引查询 建立召回基线;查询并非零延迟
Cross-Encoder 问题与文档联合编码 不能缓存与查询无关的完整联合编码 在线成对推理,可批处理 候选相关性、语种与延迟实测
ColBERT 各自 token 向量的后期交互 文档侧可以 多向量存储、索引与 MaxSim 用实际规模比较质量/存储/延迟
LLM 重排 读取候选并按任务比较 通常需在线推理,缓存取决于服务 token、输出约束、顺序偏差 高价值复杂条件任务的受控对照

不固定宣称哪一路最准或几毫秒;硬件、候选数、文本长度、模型和批量会改变结果。机制与实践依据。

ColBERT 的机制值得单独说清楚(它是这三条里最容易讲错的):

算一算

Cross-Encoder:[问题 + 文档] 拼一起进模型 → 一个分数

→ 100 条候选 = 100 对输入;可批处理,在线计算量仍随候选增长

ColBERT:问题编成 Q 个向量,文档编成 D 个向量(每个 token 一个)

分数 = 对每个【问题 token】,取它和所有【文档 token】里最像的那个

的相似度,然后全部加起来 ← 这就是 MaxSim

→ 文档那 D 个向量【可以离线算好存起来】⭐

→ 在线主要是查询编码与向量交互;延迟收益取决于索引、硬件和候选规模

⚠️ 代价是存储爆炸:一个块从「1 个向量」变成「几百个向量」,

索引体积膨胀一个数量级。ColBERTv2 用残差压缩把它压回来一些,

但仍然远大于单向量索引。

🔑 按瓶颈选择:先测简单基线与 Cross-Encoder;需要多向量交互时再评估 ColBERT,需要复杂条件判断时再评估 LLM 重排。三者没有固定的质量排序,ColBERT 也不只是降级方案。

💡 LLM 重排还有一个更划算的用法:不当线上重排器,而当离线评测集的标注器——让它给 100 个问题的召回结果打分,人再抽查 10%。线上跑不起的成本,离线跑得起。


🧭 Embedding 选型:从错误证据决定顺序

先检查文档是否入库、权限是否正确、模型语种与前缀是否匹配,再比较召回、融合与重排。若正确文档根本没进入候选,重排无法找回它;若已在候选里却排错,再做固定候选的重排对照。不存在所有项目都必须走的“切分、混合、重排、最后换 embedding”顺序。

什么时候是真的该换了

信号 说明
⭐ 语种不对 拿纯英文模型跑中文——这不是"效果差一点",是根本不该出现的配置错误。中文/多语言场景先确认模型的训练语料覆盖
⭐ 领域词汇完全在分布外 医学、法律、化学式、内部工单代号。通用模型没见过这些词,它们的向量互相挤在一起,可能难以区分,需要领域题集与难负例验证
⚠️ 文本长度对不上 模型 max_seq_len 是 512 token,你的块是 1000 字 → 超出部分被静默截断。你以为在检索整块,其实只检索了前半块。这个坑最隐蔽,因为它不报错
非对称检索没用对姿势 「短问题查长文档」是非对称任务,很多模型要求给 query 和 document 加不同的前缀(instruction),不加就掉点。这是配置问题,不是模型问题

维度怎么取舍(768 / 1024 / 1536)

算一算

维度 ↑ → 表达能力略强,但【边际收益递减很快】

→ 原始向量存储随维度线性增长;ANN 延迟还取决于索引、硬件与过滤

100 万块 × 1536 维 × 4 字节 = 6.1 GB (还没算索引结构本身)

100 万块 × 768 维 × 4 字节 = 3.1 GB

⭐ 判断顺序(不要反过来):

先量出 1536 维比 768 维在【你自己那 20 个问题】上高几个点,

再问这几个点值不值 2 倍存储 + 更慢的检索。

是否值得,依据业务保留集与资源预算判断。

💡 一个常被忽略的选项:MRL(套娃表示)。有些模型在训练时就让"前 256 维"自己也是一个能用的向量,于是同一份 embedding 可以截断后粗筛、完整维度精算,存储和延迟一起省。选型时留意模型卡上有没有这一条。

MTEB 榜怎么看(榜首≠对你最好)

  1. ⭐ 看子任务,不看总分。 MTEB 总分把分类、聚类、语义相似度、检索混在一起平均。你只关心 Retrieval 那一栏;中文看 C-MTEB 的检索子集。
  2. 顺手看"参数量"和"维度"两列。 榜首常是 7B 级的 embedding 模型——它的推理成本可能比你整条检索链路还高。
  3. ⚠️ 榜单会被刷。 训练数据里混进评测集是这个榜公开的老问题。一个模型只在榜上好、在你那 20 个问题上不好,信你自己的。
  4. 别忘了迁移成本:换 embedding 意味着全库重算向量 + 重建索引。100 万块重跑一遍是实打实的钱和时间。

什么时候值得领域微调

⭐ 判据不是"效果不够好",而是"通用模型分不开你的两类文档"。

情况 建议
领域术语密集,且有一定数量、经核验的「问题 → 正确文档」的真实数据(可以从线上点击日志里挖) ✅ 值得试
只有几百条 🟡 先试指令前缀和领域词典做查询扩展,先验证低成本的配置修复
还没定位错误来源 先对照简单基线,按漏召回或错排序选择实验

🔗 微调 embedding 用的就是对比学习 + in-batch 负采样 + 温度系数,和推荐算法第 8 章的双塔训练是同一套方法,连坑都一样:负样本选错(用"曝光未点击"当负样本会训废)、采样分布与假负例偏差;是否用 LogQ、温度取值要结合具体损失与验证结果。要动手微调之前先去读那一节。

🚨 最后一条是运维铁律:换了 embedding 模型,全库必须重建索引。 新旧模型的向量空间不通用,混在一个索引里检索结果是乱的——而且不报错,只是变差。 需要不停机灰度时,用双索引并行(新旧各一份,按流量切);允许停机时可完整重建后切换,不能混合不同空间。


🔗 想再深一层,去哪一套

去哪 为什么
推荐算法 06 · 工业架构-召回粗排精排重排 ⭐ 同一个漏斗在工业推荐系统里的完整版:每一层该留多少候选、算力怎么分配
推荐算法 10 · 向量检索与ANN HNSW / IVF 为什么快、怎么工作 —— 重排之前那一层的底子
AI全栈 07 · 向量检索落地 ⭐ 「换 embedding 必须全库重建索引」在工程上怎么落:那一章给的是要么停机、要么建新表双写再切换,以及为什么必须存一列 embedding_model

✅ 检查点

  1. 为什么说重排是性价比最高的一步?
  2. Cross-Encoder、ColBERT、LLM 重排三条路线的核心差别是什么?应该依据哪些质量、候选规模与资源证据选择?
  3. ColBERT 的 MaxSim 是怎么算的?它换来了什么、代价是什么?
  4. 什么信号说明“该换 embedding 模型了”?换模型有一条什么运维铁律?
👀 答案
  1. Cross-Encoder 联合编码问题与文档,能做深度相关性比较;是否更准、更划算,必须在固定候选与题集上比较质量、延迟和成本。
  2. 双塔在向量比较时交互,Cross-Encoder 联合编码,ColBERT 在 token 向量间做后期交互,LLM 按任务读取候选。按实际质量、候选规模、存储与延迟选择,没有永远最好的路线。
  3. MaxSim 对每个问题 token 取最相似文档 token 的得分,再求和。文档表示可预计算,代价是多向量存储与索引复杂度;延迟和质量优势都需实测。
  4. 四个信号:语种不对(英文模型跑中文是配置错误不是效果问题)、领域词汇完全在分布外(医学/法律/工单代号)、⚠️块长超过模型 max_seq_len 被静默截断(最隐蔽,因为不报错)、非对称检索没加 query/document 前缀。铁律:换 embedding 必须全库重建索引——新旧向量空间不通用,混在一个索引里检索结果会乱且不报错;灰度期要双索引并行。

🛑 可以停在这里

召回对了、也排到前面了 —— 到这里 RAG 的检索侧就基本齐了。

⚠️ 什么时候看下一页:你已经没法凭感觉判断「这次改动到底有没有变好」。那说明该上评估了。

⚡ 走神救援

先记住这几件事

下一节 👉 08c-RAG怎么评估.md

打卡记录保存在你的浏览器里,首页能看到总进度