BGE-M3与BGE-Reranker模型介绍

课程目标

  • 知道 bge-m3 模型是如何得到稀疏向量和稠密向量
  • 知道 bge-reranker 模型的使用

一、bge-m3 模型

bge-m3 模型论文地址:

bge-m3 模型介绍

bge-m3 论文

使用 bge-m3 模型对文本进行编码,可以得到稀疏向量和稠密向量,用于后续的混合检索,实际上 bge-m3 模型还能编码多维向量,实现多向量的检索。下面分别介绍这几种检索方式。


二、稠密向量检索

稠密向量是指,维度较低每个位置的上基本都有数值,通常也叫做低维稠密向量。bge-m3 模型编码以后默认长度为 1024 维。

输入 query 编码以后的向量为 $H_q$,使用 [CLS] 输出的向量作为全局向量来代表 query 的语义,于是有:

$$e_q = \text{norm}(H_q[0])$$

文档向量为 $e_p$,于是就可以计算这两个向量的距离:

$$s_{dense} = f_{sim}(e_q, e_p)$$

其中 $f_{sim}$ 距离可以是余弦距离,内积,L2 等。

稠密向量检索示意

代码示例

from milvus_model.hybrid import BGEM3EmbeddingFunction

m3_path = "../rag_qa/models/bge-m3"

embedding_function = BGEM3EmbeddingFunction(model_name_or_path=m3_path,
                                            use_fp16=False, device='cpu')

embed = embedding_function(["黑马JAVA", "黑马大模型"])

print(embed["dense"])
# [array([-0.03068057, 0.00156495, -0.04899885, ..., 0.04231707,
#         0.01612839, 0.0713326 ], shape=(1024,), dtype=float32),
#  array([-0.01287245, -0.01234254, -0.06556936, ..., 0.04092151,
#         -0.01335396, 0.05632111], shape=(1024,), dtype=float32)]

三、稀疏向量检索

稀疏向量是指维度很高,大多数维度上的数值为 0,只保留非零的数值和位置。

稀疏向量的表示

输入 query 编码以后的向量为 $H_q$,针对每个 token $i$ 需要计算对应的重要性,与 BM25 类似:

$$w_{qt} = \text{Relu}(W_{lex}^T H_q[i])$$

其中 $W_{lex} \in \mathbb{R}^{d \times 1}$,计算出的 $w_{qt}$ 是一个数值,代表 token $i$ 的重要程度。

于是针对输入 p 来说,就可以计算 query 与 p 的稀疏向量的距离:

$$s_{lex} = \sum_{t \in q \cap p} (w_{qt} * w_{pt})$$

稀疏向量检索示意

代码示例

from milvus_model.hybrid import BGEM3EmbeddingFunction

m3_path = "../rag_qa/models/bge-m3"

embedding_function = BGEM3EmbeddingFunction(model_name_or_path=m3_path,
                                            use_fp16=False, device='cpu')

embed = embedding_function(["黑马JAVA", "黑马大模型"])

row = embed["sparse"][0]

print(row.col)
# array([ 6, 5958, 7320, 189950])

print(row.data)
# array([0.00417884, 0.24346864, 0.15046994, 0.28743052])

四、多向量检索

多向量检索公式

$$E_q = \text{norm}(W_{mul}^T H_q)$$$$E_p = \text{norm}(W_{mul}^T H_p)$$

其中 $W_{mul}^T \in \mathbb{R}^{d \times d}$,是一个可学习的矩阵。

计算两个文档的距离如下:

$$s_{mul} = \frac{1}{N} \sum_{i=1}^{N} \max_{j=1}^{M} (E_q[i] \cdot E_p[j]^T)$$

五、bge-reranker-large 模型

bge-reranker 模型包含两个模型分别是 base 和 large,分别是基于 XLM-RoBERTa-Base 和 XLM-RoBERTa-Large 模型。

bge-reranker 介绍1

bge-reranker 介绍2

bge-reranker 介绍3


总结

  • bge-m3 模型:支持稠密向量、稀疏向量、多向量三种编码方式,适用于混合检索场景。
    • 稠密向量:默认 1024 维,使用 [CLS] 全局向量表示语义。
    • 稀疏向量:高维稀疏表示,类似 BM25,保留 token 重要性。
    • 多向量:通过可学习矩阵编码,支持更精细的匹配。
  • bge-reranker 模型:基于 XLM-RoBERTa,提供 base 和 large 两个版本,用于检索结果的重排序优化。