BGE-M3 是一款同时支持密集检索、多向量检索与稀疏检索的多功能、多语言、多粒度文本嵌入模型。本文梳理三种检索方式的原理与权重计算示例,并给出混合检索加重排序的 RAG 实践方案。
BGE-M3 具有以下特性
- 多功能性:能够同时执行嵌入模型的三种常见检索功能:密集检索、多向量检索和稀疏检索。
- 多语言性:支持超过100种工作语言。
- 多粒度:能够处理不同粒度的输入,从短句到长达8192个token的长文档。
RAG中的检索方法:混合检索 + 重排序
不同检索方法介绍
- 密集检索:将文本映射到单一嵌入向量中,例如,DPR,BGE-v1.5
- 稀疏检索(词汇匹配):一个与词汇表大小相等的向量,其中大多数位置设为零,仅对文本中存在的令牌计算权重。例如,BM25,unicoil,和splade
- 多向量检索:使用多个向量来表示一个文本,例如,ColBERT。
稠密检索
稠密检索使用低维、密集的向量表示文本数据,将文本嵌入到连续的向量空间中,能够捕捉语义相似性,适合处理自然语言处理(NLP)任务中的模糊查询和复杂语义关系。
1 | from FlagEmbedding import BGEM3FlagModel |
稀疏检索
稀疏检索使用高维、稀疏的向量表示文本,其中大部分特征值为零,其计算效率高,易于解释,适合处理短文本和关键词匹配。
1 | from FlagEmbedding import BGEM3FlagModel |
多向量检索
多向量检索是一种混合方法,结合了稠密和稀疏检索的优点,使用多个向量来表示一个文档或查询。
1 | from FlagEmbedding import BGEM3FlagModel |
加权语义相似度
计算三种检索的加权平均值:
1 | from FlagEmbedding import BGEM3FlagModel |

