Embedding 模型选择
问题
市面上有哪些主流的 Embedding 模型?如何根据场景选择合适的模型?
答案
一、主流 Embedding 模型对比
| 模型 | 提供方 | 维度 | 最大 Token | 中文支持 | 开源 | 特点 |
|---|---|---|---|---|---|---|
| text-embedding-3-small | OpenAI | 1536 | 8191 | ✅ | ❌ | 高性价比,支持维度裁剪 |
| text-embedding-3-large | OpenAI | 3072 | 8191 | ✅ | ❌ | 最强通用能力 |
| BGE-M3 | BAAI | 1024 | 8192 | ✅ | ✅ | 多语言、多粒度、混合检索 |
| BGE-large-zh | BAAI | 1024 | 512 | ✅ | ✅ | 中文专精 |
| Jina-embeddings-v3 | Jina AI | 1024 | 8192 | ✅ | ✅ | 多任务 LoRA,长文本 |
| Voyage-3 | Voyage AI | 1024 | 32000 | ✅ | ❌ | 超长上下文,代码支持好 |
| Cohere embed-v3 | Cohere | 1024 | 512 | ✅ | ❌ | 支持搜索类型标注 |
| E5-mistral-7b | Microsoft | 4096 | 32768 | ✅ | ✅ | 基于 LLM,效果最强 |
| GTE-Qwen2 | 阿里 | 1536 | 32768 | ✅ | ✅ | 中文 SOTA |
选型核心建议
- 快速上线:OpenAI text-embedding-3-small(API 简单,效果稳定)
- 中文优先:BGE-M3 或 GTE-Qwen2(中文 benchmark 领先)
- 数据隐私:本地部署 BGE-M3 或 Jina-v3
- 超长文本:Voyage-3 或 Jina-v3(支持 8K+ token)
二、MTEB 排行榜
MTEB(Massive Text Embedding Benchmark)是最权威的 Embedding 评测榜单:
关注指标
面试中常问"你用什么模型?为什么?",关键是说出选型依据和MTEB 分数。
三、OpenAI Embedding 的维度裁剪
OpenAI text-embedding-3 系列支持 dimensions 参数,截取向量前 N 维:
from openai import OpenAI
client = OpenAI()
# 使用 1536 维(默认)
response = client.embeddings.create(
model="text-embedding-3-small",
input="如何选择 Embedding 模型?"
)
# 降维到 256 维(节省存储,仍保留较好效果)
response_256 = client.embeddings.create(
model="text-embedding-3-small",
input="如何选择 Embedding 模型?",
dimensions=256 # Matryoshka Representation Learning
)
降维代价
维度从 1536 降到 256,MTEB 分数大约下降 2-5%。需要在效果和成本间权衡。
四、选型决策流程
常见面试问题
Q1: 开源模型和商业模型怎么选?
答案:
- 商业 API(OpenAI/Cohere):开发快、免运维,适合快速验证和小数据量场景
- 开源模型(BGE/GTE):数据安全、可微调、无调用成本,适合大数据量和隐私敏感场景
- 实际项目中建议先用商业 API 验证方案,效果达标后再考虑替换为开源模型降低成本
Q2: 如何评测一个 Embedding 模型是否适合你的业务?
答案:
- 构建评测集:从真实业务中抽取 50-200 组 query-document 对
- 计算 Recall@K:检索 Top-K 中命中正确文档的比例
- 对比多个模型:在相同评测集上横向对比
- 关注边缘 case:短查询、长文档、专业术语等
Q3: Embedding 模型支持的最大 Token 数不够怎么办?
答案:
- 文档分块:将长文本切分为 512 token 左右的段落(参考 文档处理与分块)
- Late Chunking:先对整个文档编码,再切分(保留上下文信息)
- 换用长上下文模型:Jina-v3(8K)、Voyage-3(32K)