BGEM3FlagModel 嵌入模型

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 多向量交互检索,精度最高但计算量大