BGE-M3项目介绍
BGE-M3是一个功能强大的多语言、多功能、多粒度文本嵌入模型。该项目由FlagOpen团队开发,旨在为自然语言处理任务提供一个versatile的嵌入解决方案。
项目特点
BGE-M3具有以下三个主要特点:
-
多功能性(Multi-Functionality):
- 可以同时执行三种常见的检索功能:密集检索、多向量检索和稀疏检索。
- 这种多功能性使得BGE-M3能够适应不同的检索需求。
-
多语言性(Multi-Linguality):
- 支持100多种工作语言。
- 让BGE-M3成为一个真正的多语言模型,可以处理各种语言的文本。
-
多粒度性(Multi-Granularity):
- 能够处理不同粒度的输入,从短句到长达8192个token的长文档。
- 这种灵活性使其适用于各种文本长度和复杂度的场景。
模型架构
BGE-M3提供了多个版本的模型:
- bge-m3:1024维度,8192序列长度,多语言模型。
- bge-m3-unsupervised:1024维度,8192序列长度,无监督学习的多语言模型。
- bge-m3-retromae:8192序列长度,基于XLM-RoBERTa的预训练模型。
- 还有专门针对英语的bge-large-en-v1.5、bge-base-en-v1.5和bge-small-en-v1.5等版本。
应用场景
BGE-M3在检索增强生成(RAG)系统中有广泛应用。项目推荐的检索流程包括:
- 混合检索:结合嵌入检索和BM25等算法,提高准确性和泛化能力。
- 重排序:使用交叉编码器模型进一步过滤检索结果,提高准确性。
使用方法
BGE-M3可以通过FlagEmbedding库轻松使用:
from FlagEmbedding import BGEM3FlagModel
model = BGEM3FlagModel('BAAI/bge-m3', use_fp16=True)
# 生成密集嵌入
embeddings = model.encode(sentences)['dense_vecs']
# 生成稀疏嵌入(词法权重)
lexical_weights = model.encode(sentences, return_sparse=True)['lexical_weights']
# 生成多向量嵌入(ColBERT)
colbert_vecs = model.encode(sentences, return_colbert_vecs=True)['colbert_vecs']
评估结果
BGE-M3在多个多语言和跨语言基准测试中表现出色:
- 在MIRACL数据集上,BGE-M3在多种语言中都取得了最佳性能。
- 在MKQA跨语言数据集上,BGE-M3同样表现优异。
- 在长文档检索任务(如MLDR和NarrativeQA)中,BGE-M3也展现出强大的能力。
开源贡献
BGE-M3项目不仅开源了模型,还提供了:
- MLDR数据集:覆盖13种语言的长文档检索数据集。
- 评估脚本:用于MKQA和MLDR等数据集的评估。
- 微调示例:帮助用户进行模型的统一微调。
总结
BGE-M3作为一个多功能、多语言、多粒度的文本嵌入模型,为NLP领域带来了新的可能性。它不仅在各种基准测试中表现出色,还提供了丰富的开源资源,为研究人员和开发者提供了强大的工具。