RAG 中 Embedding 模型怎么选?
简化版
Embedding 选型应以自有查询—相关文档集的 Recall@k、nDCG/MRR 为核心,同时比较语言/领域覆盖、上下文长度、向量维度、吞吐、成本和部署约束。先确认模型要求的 query/document 前缀和相似度归一化,再与 BM25、混合检索及 reranker 组成端到端基线;公开榜单只能用于筛候选。
详细版
候选模型需覆盖中文、多语、代码或领域术语,并能处理实际 chunk 长度。使用相同数据、切块、索引参数和 k 做离线对照,按短关键词、长问题、实体、否定和时间查询切片。向量维度会影响存储和 ANN 延迟,量化还能降成本但需重测召回。
评测分检索与生成两层:先看相关证据是否进入 Top-k,再固定生成器测答案和引用。若双塔召回不足,可领域微调或加入 BM25;若 Recall 高但头部排序差,用 cross-encoder rerank。上线前测 QPS、P95、批处理、索引构建时间和模型许可证,并为换模型准备双写索引迁移。
业务查询集 -> 候选Embedding -> 同配置向量索引 -> Recall/nDCG + 延迟/成本 -> 端到端RAG验证
完整版教学
一、选型首先由任务定义
FAQ 的短问句、法律长问题、代码搜索和跨语言检索需要不同表示。模型在通用英文榜单领先,不保证能处理中文缩写或公司内部实体。先采集真实查询、相关 chunk 和困难负例,才能定义“好”。
还要明确是对称还是非对称检索。语义相似句匹配两边形态接近;RAG 通常是短 query 对长 document,很多模型要求使用不同前缀或 encoder 角色。遗漏官方前缀可能让优秀模型表现大幅下降。
二、离线指标各回答什么
Recall@k 看真证据是否进入候选,MRR 强调第一个相关结果的位置,nDCG 能处理多级相关性和多个相关文档。Precision@k 反映上下文噪声。指标要与下游 k 对齐,若生成只拿 5 块,单报 Recall@100 意义有限。
Recall@k = 被Top-k覆盖的相关文档数 / 全部相关文档数
MRR = mean(1 / 第一个相关结果排名)
100 个查询中 85 个至少在 Top-10 找到证据,query-level hit rate 是 85%;若每题有多份证据,需用真正 Recall 而非仅命中一份。
记忆钩子:Embedding 负责“把真证据带进候选”,Reranker 负责“把候选排到前面”;先看召回,再看排序。
三、相似度与归一化要匹配
点积同时受方向和向量范数影响,余弦只看夹角;若向量 L2 归一化,点积与余弦排序相同。模型训练时采用哪种目标,就按其说明配置索引。错误地归一化或漏归一化会造成分数不可比。
| 配置 | 特性 | 注意 |
|---|---|---|
| cosine | 忽略范数 | 常需归一化 |
| inner product | 范数参与 | 与训练目标一致 |
| L2 distance | 距离越小越近 | 归一化后与余弦相关 |
阈值也需按新模型重新校准,不能沿用旧 embedding 的 0.8,因为不同模型分数分布不同。
四、维度如何影响系统成本
一亿条 1024 维 FP32 原始向量约占 1e8×1024×4≈409.6GB,还不含索引图和元数据;384 维约 153.6GB。维度越高不必然语义越好,却会增加存储、内存带宽和网络传输。
FP16、INT8 或 Matryoshka 截断可降成本,但量化误差会影响近邻排序。使用目标 ANN 和压缩配置做联合评测,不能先用精确 FP32 得出模型最好,再假设生产量化后排名不变。
五、语言、长度和领域怎样切片
建立短关键词、自然问题、实体编号、长描述、否定、错别字、低资源语言和跨语言查询切片。文档长度超过模型窗口时会截断,后半证据永远无法编码;需要合理切块或选择长上下文 embedding。
领域术语在通用模型中可能聚得不好。可先混合 BM25 补精确实体,再考虑对比学习微调。微调前保留通用测试,防模型只会内部术语而丢失用户自然问法。
六、为什么必须有 BM25 基线
向量擅长语义改写,BM25 擅长罕见实体、产品号和精确词。若 embedding 只比简单 BM25 略好,却成本高很多,混合检索可能更划算。RRF 可在分数不可比时融合排名。
对查询“错误码 ZX-1049”,字符精确匹配很关键;对“订单一直没到怎么办”,语义向量更有优势。报告各切片两种检索的互补命中,而不是只比较总分赢家。
七、上线与迁移如何设计
模型吞吐要在真实长度、batch 和硬件上测,区分在线 query 编码与离线文档编码。云 API 还需考虑数据合规、限流和版本稳定性。许可证必须允许目标商业使用。
换 embedding 通常需要重建全部文档向量,旧新向量不能混在同一空间直接比较。采用双索引:后台回填新索引,shadow 查询比较,完成后切流量;cache key 与索引版本同步更新,并保留旧索引用于回滚。
八、常见误区与追问
- 误区:公开榜单第一就是业务最佳。 数据语言、长度与难负样本不同,必须自有集验证。
- 误区:维度越高效果越好。 维度增加成本,信息质量由训练目标决定。
- 误区:换模型只替换在线编码器。 全库文档向量必须同空间重建。
- 追问:Recall 高但答案差怎么办? 检查 rerank、packing 和生成;固定真值证据做分层实验。
- 追问:什么时候微调 embedding? 业务有稳定标注和困难负例,通用/混合基线仍不足时。
- 追问:阈值能跨模型复用吗? 不能,应按每个模型与切片重新校准分数分布。
九、加强记忆
Embedding 选型可记成“域、召、排、维、速、迁”:看语言领域,先测召回再测排序,核对维度存储与在线速度,最后规划全量重建迁移。使用官方前缀与相似度配置,以 BM25 和混合检索为基线,并把端到端答案作为最终验收,而不是迷信榜单或向量维度。