Embedding 深度解析
模型选型
| 模型 | 维度 | 语言 | 部署方式 | 适用场景 |
|---|---|---|---|---|
| BGE-large-zh | 1024 | 中文优 | 本地/API | 中文 RAG、知识库 |
| M3-embedding | 1024 | 100+ | 本地/API | 多语言、多粒度 |
| text-embedding-3 | 1536+ | 多语言 | 云端 API | 通用、易集成 |
| E5-large | 1024 | 多语言 | 本地 | 开源、高性价比 |
| GTE | 1024 | 多语言 | 本地 | 综合性能好 |
维度选择
- 768:轻量、省资源,适合简单场景
- 1024:常用,在质量与成本间平衡
- 1536+:OpenAI 等,表达力强,成本较高
选择时需与向量数据库支持的维度一致。
归一化
多数检索场景使用余弦相似度或点积(归一化后等价)。模型输出是否已归一化因模型而异,BGE 等需在提示词中加 Represent this sentence for retrieval: 以提升效果。
BGE 实践
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("BAAI/bge-large-zh-v1.5")
# 查询向量:加指令
query_embedding = model.encode("Represent this sentence for retrieval: 什么是RAG")
# 文档向量:可不加
doc_embedding = model.encode("RAG是检索增强生成...")
M3 实践
M3 支持多粒度(passage、sentence、word),适合长文档与多语言场景。可通过 Hugging Face 或官方 API 使用。
与 RAG 的闭环
Embedding 质量直接影响 RAG 检索效果: