04. Embedding 模型应该怎么选?怎么评估 Embedding 质量?
整理 Embedding 模型应该怎么选?怎么评估 Embedding 质量? 的核心概念、工程要点与面试回答。
简单回答
Embedding 模型的选择直接决定了 RAG 系统的检索上限。选择时主要考虑语言支持、向量维度、最大输入长度、检索精度以及推理速度。评估质量主要看在具体业务数据上的检索指标(Recall@K、MRR、NDCG),而不是只看公开 benchmark 排名。主流选择包括 BGE 系列、GTE 系列、E5 系列、以及商用的 OpenAI Embedding 和 Cohere Embed。
详细解释
选模型要看的几个维度
语言和领域匹配是第一位的。如果你的业务是中文场景,选一个主要在英文数据上训练的 Embedding 模型效果一定不好。BGE(BAAI General Embedding)系列和 GTE(General Text Embeddings,来自阿里)在中文上表现很强。如果是英文或多语言场景,E5、Instructor 系列也是不错的选择。
向量维度直接影响存储成本和检索速度。维度越高,理论上能表达的语义信息越丰富,但存储和计算成本也越大。常见维度有 384、768、1024、1536。OpenAI 的 text-embedding-3-large 是 3072 维,但支持降维使用(Matryoshka Embedding)。对于大多数场景,768 或 1024 维已经足够,边际收益在维度到一定程度后会递减。
最大输入长度决定了一个 Chunk 最长能有多少 token。早期模型通常只支持 512 token,现在很多模型支持到 8192 甚至更长。但要注意,长度支持和长度效果是两码事——模型号称支持 8192 token,不代表在 8192 token 的输入上编码质量和在 512 token 上一样好。一般建议 Chunk 长度控制在模型最优编码范围内。
检索精度是最核心的指标。这个不能只看 MTEB(Massive Text Embedding Benchmark)排行榜的总分。MTEB 包含了多种任务(检索、分类、聚类、语义相似度等),你需要关注的是 Retrieval 类任务的表现,而且要看你对应语言和领域的子集。更重要的是在你自己的业务数据上做评测——不同数据分布下,模型排名可能完全不同。
推理速度和部署成本也要考虑。Embedding 模型在离线索引时是批量处理,速度要求相对宽松。但在线查询时要对用户的 query 做实时编码,延迟要求就比较高了。模型大小(参数量)直接影响推理速度,要在精度和速度之间找平衡。
怎么评估 Embedding 质量
公开 benchmark(MTEB、C-MTEB)是初步筛选的依据,但不能作为最终选择的依据。真正靠谱的做法是在自己的业务数据上构建评测集。
构建方式通常是这样:从业务知识库中抽样一批文档,人工或者用 LLM 为每个文档写几个可能的用户问题(query),构成 (query, relevant_doc) 对。然后用不同的 Embedding 模型做检索,比较检索指标。
常用指标包括 Recall@K(Top K 结果中包含正确文档的比例,K 通常取 5、10、20)、MRR(Mean Reciprocal Rank,正确文档排名的倒数的均值)、NDCG(考虑排序位置的指标,排在前面的正确结果得分更高)。其中 Recall@K 最直观——你检索了 10 条结果,正确答案在不在里面?
还有一个容易忽视的评估维度:query 和 document 的语义鸿沟。用户的提问方式和文档的表述方式往往差异很大。比如用户问"怎么退钱",文档里写的是"退款流程"——好的 Embedding 模型应该能桥接这种表达差异。评测集中应该刻意包含一些这种"同义不同表"的 case。
微调 Embedding 模型
如果开箱即用的效果不满足要求,可以在业务数据上微调 Embedding 模型。微调通常用对比学习(Contrastive Learning)的方式:构造正样本对(query, positive_doc)和负样本(query, negative_doc),用 InfoNCE 之类的 loss 拉近正样本、推远负样本。负样本的选择非常关键——随机负样本太容易了,模型学不到东西;需要用"难负样本"(Hard Negatives),即和 query 语义相近但实际不相关的文档。
微调的数据量不需要很大,几百到几千条标注数据通常就能带来明显提升。FlagEmbedding(BGE 背后的框架)提供了比较完善的微调流程。
面试时可以这样答
选 Embedding 模型要看几个核心维度:语言和领域匹配、向量维度、最大输入长度、检索精度和推理速度。不能只看 MTEB 排行榜总分,要看 Retrieval 任务在对应语言上的表现,更重要的是在自己的业务数据上跑评测。
评估 Embedding 质量,最靠谱的做法是构建业务场景的评测集,用 Recall@K、MRR 这些指标来量化比较。重点关注 query 和 document 表述不一致的情况,这是真实场景中最常见的挑战。
如果开箱即用的效果不够,可以在业务数据上微调。用对比学习的方式,构造 query-doc 正负样本对训练。关键是难负样本的选择,太随机的负样本模型学不到东西。微调数据量不需要特别大,几百到几千条标注数据通常就能看到明显提升。
中文场景目前 BGE 和 GTE 系列是比较主流的选择,英文场景 E5 和 Instructor 也不错,商用的话 OpenAI 和 Cohere 的 Embedding API 效果也很好但有成本和隐私的考量。
常见追问
- 你在项目中具体用的哪个 Embedding 模型?为什么选它?
- 微调 Embedding 模型时,难负样本是怎么构造的?
- Embedding 模型的维度越高效果一定越好吗?