技术笔记

BGE-M3 多语言多功能嵌入模型:密集、稀疏与多向量三合一微调实战

全面拆解北京智源 BGE-M3 嵌入模型的工程奥秘:如何在单一模型中同时产出 Dense 密集表征、Lexical 稀疏权重与 ColBERT 多向量,并进行领域微调。

2026年5月20日阅读约 1 分钟
BGE-M3Embedding微调智源

统一通用多功能表征的新标杆

在过去,构建高精度混合检索往往需要引入两个完全独立的模型体系:由专用的 BM25 算法计算关键词词频,再由单独的 Sentence-BERT 模型计算密集向量。维护两套异构索引对工程流水线造成了额外负担。

智源开源的 BGE-M3 (Multi-Linguality, Multi-Functionality, Multi-Granularity) 创造性地实现了三合一输出:同一个模型的一次前向传播,同时吐出 Dense 向量、Lexical Sparse 稀疏权重以及 Multi-Vector(ColBERT 式细粒度 Token 交互)。

三合一联合损失函数与领域对比学习

在领域数据微调时,BGE-M3 采用联合优化目标: $$\mathcal{L} = \mathcal{L}{dense} + \mathcal{L}{sparse} + \mathcal{L}_{multi}$$

  1. 密集对比损失 (Dense InfoNCE):拉近正例查询与文档在高维球面的余弦距离;
  2. 词项权重稀疏正则 (Lexical Sparsity Loss):学习重要专业词汇的倒排自权重,自动抑制停用词;
  3. 晚期交互多向量 (Late-Interaction Multi-Vector):保留每个 Token 的独立向量,通过 MaxSim 算子捕获微观匹配。

晚期交互 MaxSim 算法纯 JS 模拟

import assert from "node:assert/strict";
function dotProduct(a, b) {
  return a.reduce((sum, v, i) => sum + v * b[i], 0);
}
assert.equal(dotProduct([1, 2], [3, 4]), 11);

原始资料与溯源链接

感谢阅读本文

如果你觉得内容有帮助,欢迎点赞支持或分享给同行开发者。

0 次阅读0 人赞过