
BGEM3FlagModel 是 BAAI(北京智源人工智能研究院)开源的 BGE-M3 系列模型 的一个特定加载器/封装类,主要用于 密集向量检索(Dense Retrieval) 和 稀疏向量检索(Sparse Retrieval) 的统一建模。
简单来说:BGEM3FlagModel 就是 BGE-M3 模型在 FlagEmbedding 库中的官方调用接口。
一、BGE-M3
BGE-M3 是 BAAI 于 2024 年发布的多语言、多功能嵌入模型,全称是 BAAI General Embedding M3。
| 特性 | 说明 |
|---|---|
| 多语言 | 支持 100+ 种语言,包括中文、英文、日文等 |
| 多功能 | 同时支持密集检索、稀疏检索、多向量检索 |
| 长文本 | 最大序列长度 8192 token |
| 向量维度 | 1024 维(密集向量) |
| 开源 | 可商用,可在 Hugging Face 下载 |

二、BGEM3FlagModel 的加载方式
安装
pip install FlagEmbedding
基础使用
from FlagEmbedding import BGEM3FlagModel
# 加载模型
model = BGEM3FlagModel(
'BAAI/bge-m3', # 模型名称
use_fp16=True, # 使用半精度加速
device='cuda' # 使用 GPU
)
# 1. 密集向量(Dense Embedding)
dense_embeddings = model.encode(
["你好", "世界"],
return_dense=True,
return_sparse=False,
return_colbert_vecs=False
)
# dense_embeddings.shape: (2, 1024)
# 2. 稀疏向量(Sparse Embedding)
sparse_embeddings = model.encode(
["你好", "世界"],
return_dense=False,
return_sparse=True,
return_colbert_vecs=False
)
# sparse_embeddings 是词权重的字典
# 3. ColBERT 多向量
colbert_vecs = model.encode(
["你好", "世界"],
return_dense=False,
return_sparse=False,
return_colbert_vecs=True
)
# colbert_vecs.shape: (2, 序列长度, 1024)
三、BGEM3FlagModel VS HuggingFaceEmbeddings
| 加载方式 | 支持 Dense | 支持 Sparse | 支持 ColBERT | 语言 |
|---|---|---|---|---|
HuggingFaceEmbeddings | ✅ | ❌ | ❌ | 多语言 |
BGEM3FlagModel | ✅ | ✅ | ✅ | 多语言 |
BGEM3FlagModel 是专门为 BGE-M3 设计的封装类,支持其独有的三种检索模式。
# 场景1:普通 RAG(只需要密集向量)
from langchain_huggingface import HuggingFaceEmbeddings
emb = HuggingFaceEmbeddings(model_name="BAAI/bge-m3")
# 场景2:混合检索(密集 + 稀疏)
from FlagEmbedding import BGEM3FlagModel
model = BGEM3FlagModel('BAAI/bge-m3')
dense, sparse = model.encode(texts, return_dense=True, return_sparse=True)
# 场景3:ColBERT 多向量检索
colbert_vecs = model.encode(texts, return_colbert_vecs=True)
四、密集检索 vs 稀疏检索 vs ColBERT
1. 密集检索(Dense Retrieval)
dense = model.encode(texts, return_dense=True)
# 输出: (n, 1024) 的向量矩阵
# 相似度计算: 点积 / 余弦相似度
2. 稀疏检索(Sparse Retrieval)
sparse = model.encode(texts, return_sparse=True)
# 输出: 词权重字典 {'词1': 权重, '词2': 权重, ...}
# 相似度计算: 匹配共同词,权重相乘求和
3. ColBERT(多向量检索)
colbert = model.encode(texts, return_colbert_vecs=True)
# 输出: (n, 序列长度, 1024)
# 相似度计算: MaxSim 运算
六、其他
| 概念 | 说明 |
|---|---|
| BGE-M3 | BAAI 开源的多语言嵌入模型,支持密集、稀疏、ColBERT 三种检索模式 |
| BGEM3FlagModel | FlagEmbedding 库中的官方加载类,专门用于 BGE-M3 |
| Dense 检索 | 语义匹配,适合模糊语义理解 |
| Sparse 检索 | 关键词匹配,适合精确匹配 |
| ColBERT | 多向量交互检索,精度最高但计算量大 |

2178

被折叠的 条评论
为什么被折叠?



