Embedding模型在RAG中的选择与优化
Embedding是RAG系统的检索基础。请比较开源Embedding模型(bge/m3e/text2vec)与商业API(OpenAI/Cohere)的适用场景,以及混合检索(稠密+稀疏)的实现方式。
回答
苦行僧
Embedding模型将文本转为语义向量,检索时计算余弦相似度。
主流Embedding模型对比:
-
开源模型:
- BGE (BAAI):BAAI/bge-large-en-v1.5(1024维),MTEB排名前列,中文bge-base-zh-v1.5
- M3E (Moka AI):moka-ai/m3e-base(768维),中英双语优化
- Text2Vec (shibing624):text2vec-base-chinese,中文专用
- GTE (Alibaba):Alibaba-NLP/gte-large-en,多语言
-
商业API:
- OpenAI text-embedding-3-small/large:1536/3072维,质量最高但收费
- Cohere Embed v3:多语言,支持搜索和分类两种模式
稠密(Dense) vs 稀疏(Sparse): 稠密Embedding:强语义匹配、弱精确匹配 稀疏Embedding(BM25):强精确匹配、弱语义匹配
混合检索(Hybrid Search):
- 同时对同一query做稠密检索和稀疏检索
- 使用RRF(Reciprocal Rank Fusion)合并排序:score = 1/(60 + rank_dense) + 1/(60 + rank_sparse)
- 实践:Elasticsearch的HNSW+BM25组合部署
优化技巧:
- 向量维度选择:更高维度不一定更好
- 归一化:L2归一化后cosine ≈ dot product
- 量化:FP32→INT8,召回损失<1%,存储减4倍