跳到主要内容

Embedding 深度解析

模型选型

模型维度语言部署方式适用场景
BGE-large-zh1024中文优本地/API中文 RAG、知识库
M3-embedding1024100+本地/API多语言、多粒度
text-embedding-31536+多语言云端 API通用、易集成
E5-large1024多语言本地开源、高性价比
GTE1024多语言本地综合性能好

维度选择

  • 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 检索效果:

  • 选型:按语言、数据规模、成本选择
  • 一致性:索引与查询使用同一模型
  • 指令:对 BGE 等加检索指令可提升效果
  • 评估:用 MTEB、自定义测试集评估

与向量数据库的配合

  • 向量库存储 Embedding 结果,维度需一致
  • 索引类型(IVF、HNSW 等)影响检索速度与精度
  • 参考 向量数据库

评估与选型

MTEB 与自定义评估

  • MTEB(Massive Text Embedding Benchmark):多任务评估,包含检索、聚类、分类等
  • 自定义测试集:在业务数据上构建 query-doc 对,计算 Recall@K、MRR
  • 与 RAG 效果挂钩:检索质量直接影响 RAG 回答,建议将 RAG 端到端效果作为最终指标

分块策略对 Embedding 的影响

  • 块大小:太小丢失上下文,太大噪声多、检索精度下降。常用 256–512 tokens 或 128–256 字符
  • 重叠(Overlap):相邻块重叠 10–20% 可避免语义断裂
  • 检索粒度:按块检索后,可扩展上下文(前后块)再送入 LLM

多向量与 ColBERT

  • 多向量:同一文档生成多个向量(如按句、按段),检索时融合
  • ColBERT:Token 级向量,匹配更精细,适合高精度场景,但存储与计算成本更高

总结

Embedding 是 RAG 与语义检索的基石。合理选型、正确使用归一化与指令,可显著提升检索质量,进而提升 RAG 整体效果。结合 MTEB 与业务评估、优化分块策略,可系统提升 RAG 链路效果。