公司动态

BGE-M3 算法详解:从模型架构到三种检索方式的数学原理

📅 2026/8/19 11:48:46
BGE-M3 算法详解:从模型架构到三种检索方式的数学原理
一、引言什么是BGE-M32024年1月30日智源研究院BAAI发布了BGE家族的新成员——BGE-M3。BGE-M3是首个集多语言Multi-Linguality、多粒度Multi-Granularity、多功能Multi-Functionality三大技术特征于一体的语义向量模型-。M3代表着三大核心能力Multi-Linguality多语言支持超过100种工作语言Multi-Granularity多粒度输入长度最高可达8192个tokenMulti-Functionality多功能同时支持稠密检索、稀疏检索和多向量检索三种功能BGE-M3基于XLM-RoBERTa架构参数量达5.69亿569M隐藏层维度为1024-。其最引人注目的特性是一次推理可以同时输出三种向量表示-无需额外开销。本文将深入剖析BGE-M3的模型架构、训练方法以及三种检索方式的完整算法计算过程并配以具体的数值示例。二、模型架构与核心技术2.1 整体架构BGE-M3基于XLM-RoBERTa-large架构-其核心创新包括扩展位置编码将最大位置从512扩展到8192支持长文档处理MCLS策略通过多个[CLS] token增强长文本建模能力无需额外微调三头输出在一次前向传播中同时输出稠密向量、稀疏向量和多向量三种表示2.2 MCLS长文本处理的创新策略针对长文本微调面临的数据不足和计算资源限制问题-14BGE-M3提出了MCLSMultiple CLS方法。核心思想在输入序列中每隔固定数量的token实验中为每256个token插入一个[CLS]token。每个CLS token从其相邻token捕获语义信息最终通过对所有CLS token的隐藏状态求平均来获得文本的最终嵌入表示-。2.3 前向传播的数学表示三、稠密检索Dense Retrieval的算法计算过程3.1 核心思想稠密检索将整段文本压缩为单个稠密向量通过向量相似度判断文本间的相关性。BGE-M3使用特殊token[CLS]的归一化隐藏状态作为稠密向量表示-7。3.2 向量生成3.3 相似度计算3.4 具体计算示例假设查询文本为“如何学习Python”文档文本为“Python是一门适合初学者的编程语言”。Step 1分别编码经过Transformer编码和[CLS]提取得到两个1024维的原始向量数值仅为示意查询原始向量hcls,q​[0.82,−0.15,0.37,0.51,−0.23,...]文档原始向量hcls,p​[0.79,−0.13,0.35,0.48,−0.20,...]Step 2L2归一化计算各自的模长并进行归一化假设归一化后查询稠密向量eq​[0.65,−0.12,0.29,0.40,−0.18,...]文档稠密向量ep​[0.63,−0.10,0.28,0.38,−0.16,...]Step 3计算点积sdense​0.65×0.63(−0.12)×(−0.10)0.29×0.280.40×0.38(−0.18)×(−0.16)...假设计算结果为 sdense​0.87表明两段文本在语义上高度相关。四、稀疏检索Sparse Retrieval的算法计算过程4.1 核心思想稀疏检索生成一个高维稀疏向量维度等于模型词表大小BGE-M3词表约为250,002-20。向量中绝大多数位置的值为0只有文本中出现的token对应的维度有非零权重-。BGE-M3通过神经网络学习权重而非依赖BM25的统计公式。4.2 Token级权重计算BGE-M3在编码器输出之上添加了一个线性层和ReLU激活函数来生成稀疏嵌入。ReLU的作用将所有负数置为0这是向量“稀疏”的根本来源。正数表示该token与词表中某个词存在正相关关系负数或零则被过滤掉。4.3 最大池化聚合Max Pooling​4.4 相似度计算​4.5 具体计算示例以文本“苹果公司发布了新款iPhone”为例。Step 1分词与编码分词结果[苹果, 公司, 发布, 了, 新款, iPhone]经过Transformer编码后每个token获得隐藏状态 ℎi​。Step 2线性变换与ReLU激活假设词表大小简化为10实际为250,002每个token经过线性层ReLU后生成10维的权重向量Token词0苹果词1公司词2iPhone词3发布词4新款词5-9苹果2.10.00.80.00.00.0公司0.01.50.00.40.00.0发布0.00.00.01.20.00.0了0.00.00.00.00.00.0新款0.00.00.00.00.90.0iPhone0.00.02.10.00.00.0Step 3最大池化聚合对词表中每个词取所有token中的最大值词“苹果”ID0max(2.1,0.0,0.0,0.0,0.0,0.0)2.1词“公司”ID1max(0.0,1.5,0.0,0.0,0.0,0.0)1.5词“iPhone”ID2max(0.8,0.0,0.0,0.0,0.0,2.1)2.1词“发布”ID3max(0.0,0.4,1.2,0.0,0.0,0.0)1.2词“新款”ID4max(0.0,0.0,0.0,0.0,0.9,0.0)0.9其他词ID5-9全部为0Step 4最终稀疏向量以键值对字典形式表示sparse_vec { 0: 2.1, # 苹果 1: 1.5, # 公司 2: 2.1, # iPhone 3: 1.2, # 发布 4: 0.9 # 新款 }这个向量中绝大多数位置为0只有少数位置有非零权重。Step 5相似度计算假设查询为“苹果iPhone”其稀疏向量为{0: 1.8, 2: 2.0}则查询与文档的稀疏相似度为​五、多向量检索Multi-Vector / ColBERT风格的算法计算过程5.1 核心思想多向量检索为文本中的每个token生成一个独立的向量形成 N×d 的向量矩阵。这避免了传统稠密检索将整段文本压缩为单个向量带来的“信息瓶颈”问题。在计算相似度时采用延迟交互Late Interaction和MaxSim算法实现token级别的精细匹配。5.2 多向量生成BGE-M3复用底层Transformer的参数通过一个轻量级投影头将每个token的隐藏状态映射为独立的token向量5.3 晚期交互与MaxSim算法5.4 具体计算示例假设查询 q[cat, dog]2个token文档 p[a, cute, cat]3个token。向量维度简化为4维。Step 1分别编码生成多向量矩阵Token维度0维度1维度2维度3cat (q₁)0.90.10.30.2dog (q₂)0.20.80.10.4Token维度0维度1维度2维度3a (p₁)0.10.20.80.1cute (p₂)0.30.40.20.7cat (p₃)0.80.10.30.2Step 2计算相似度矩阵2×3相似度p₁ (a)p₂ (cute)p₃ (cat)q₁ (cat)0.1×0.10.1×0.20.3×0.80.2×0.1 0.270.1×0.30.1×0.40.3×0.20.2×0.7 0.270.1×0.80.1×0.10.3×0.30.2×0.2 0.22q₂ (dog)0.2×0.10.8×0.20.1×0.80.4×0.1 0.300.2×0.30.8×0.40.1×0.20.4×0.7 0.680.2×0.80.8×0.10.1×0.30.4×0.2 0.35Step 3应用MaxSim对于 q₁cat最大相似度为 max(0.27,0.27,0.22)0.27对于 q₂dog最大相似度为 max(0.30,0.68,0.35)0.68Step 4汇总得分这个分数体现了查询中的每个词都在文档中找到了它最相关的匹配-25。六、三种检索方式的对比与总结在实际评测中采用三种方式联合检索的BGE-M3(ALL)在三项评测中全面领先而BGE-M3(Dense)稠密检索在多语言、跨语言检索中具有明显优势。七、训练方法与数据7.1 训练数据BGE-M3的训练数据来自三个来源1. 无监督数据Unsupervised Data从Wikipedia、S2ORC、xP3、mC4和CC-News等多语言语料库中提取。通过提取丰富的语义结构如标题-正文、标题-摘要等来构建文本对。无监督数据规模达到1.2亿文本对覆盖194种语言和2655种跨语言对应关系。2. 微调数据Fine-tuning Data来自标注语料库的高质量数据。英语数据集包括HotpotQA、TriviaQA、NQ、MS MARCO等中文数据集包括DuReader、T2-Ranking、NLI-zh等。3. 合成数据Synthetic Data为解决长文档检索任务中数据不足的问题从Wikipedia和MC4数据集中随机选择长文章使用GPT-3.5生成问题构成新的文本对。7.2 训练流程BGE-M3的训练分为多个阶段第一阶段使用大量无监督数据对文本编码器进行预训练其中仅训练稠密检索的基本形式。第二阶段应用自知识蒸馏Self-Knowledge Distillation使用标注和合成数据对模型进行微调建立三种检索功能。自知识蒸馏将不同检索功能的相关性分数整合为教师信号以增强训练质量。基于集成学习原理这些异构预测器可以组合成更强的预测器。7.3 Efficient Batching策略为了确保嵌入的区分性BGE-M3优化了批处理策略训练数据按序列长度分组进行预处理显著减少序列填充通过梯度检查点Gradient Checkpointing和跨GPU广播进一步划分小批量在长度为8192时启用split-batch可使batch size增长超过20倍八、混合检索的实际应用BGE-M3的多功能性为混合检索提供了天然支持。官方推荐在RAG系统中使用“混合检索 重排序”的pipeline第一棒粗筛使用计算高效的稠密检索或稀疏检索从海量文档中快速召回Top-K个候选集。第二棒精排将Top-K候选文档送入多向量ColBERT模块进行细粒度的晚期交互重排序。最终的综合相关性分数为由于多向量方法的计算成本较高通常先用稠密或稀疏方法检索候选结果再用多向量方法进行重排序-7。九、代码示例使用FlagEmbedding库可以轻松调用BGE-M3的全部三种功能from FlagEmbedding import BGEM3FlagModel # 加载模型GPU推理建议开启use_fp16 model BGEM3FlagModel(BAAI/bge-m3, use_fp16True) # 编码文本同时返回三种向量 sentences [ BGE M3 is an embedding model supporting dense retrieval, lexical matching and multi-vector interaction. ] output model.encode( sentences, return_denseTrue, # 稠密向量 return_sparseTrue, # 稀疏向量词汇权重 return_colbert_vecsTrue # 多向量ColBERT风格 ) # 输出包含三种表示 print(output.keys()) # dict_keys([dense_vecs, lexical_weights, colbert_vecs]) # 访问稀疏向量词汇权重 sparse_weights output[lexical_weights] print(sparse_weights) # 输出类似: {12345: 2.1, 67890: 1.5, ...}十、总结BGE-M3通过一次推理同时输出稠密向量、稀疏向量和多向量三种表示实现了对语义理解、精确关键词匹配和细粒度交互的统一支持-。其核心创新可概括为多语言支持100种语言在MIRACL和MKQA等基准上达到新的SOTA多粒度通过MCLS策略支持最长8192 token的输入多功能一站式集成稠密、稀疏、多向量三种检索方式在算法层面三种检索方式各有其数学原理和适用场景通过混合检索可以充分发挥各自的优势。BGE-M3为RAG系统提供了一个真正意义上的通用语义向量模型底座目前已向社区全面开源并支持免费商用许可。