BGE-M3 一个多功能、多语言、多粒度的语言向量模型

BGE-M3 是一个多功能、多语言、多粒度的嵌入模型,具有以下特点:

多功能性 (Multi-Functionality): BGE-M3 同时支持三种常见的检索功能,包括密集检索、多向量检索和稀疏检索。

多语言性 (Multi-Linguality): 支持100多种语言,具有广泛的应用场景。

多粒度性 (Multi-Granularity): 能够处理从短句到8192个token的长文档输入,满足不同任务的需求。

检索流程的建议:

我们建议使用“混合检索+重排序”的方式进行检索。

混合检索 (Hybrid Retrieval) 利用多种方法的优势,提升检索准确率和泛化能力。经典的混合检索方案包括结合嵌入检索与BM25算法,现在你可以使用支持密集与稀疏检索的 BGE-M3,在生成密集嵌入的同时获得类似 BM25 的词元权重。可以参考 Vespa 和 Milvus 实现混合检索。

重排序 (Re-Ranking) 模型通过交叉编码器的方式,比双编码器模型具有更高的准确率。例如,在检索后使用 bge-reranker 或 bge-reranker-v2 进一步筛选文本。

最新动态

  • 2024年7月1日: 更新了 BGE-M3 在 MIRACL 评测中的结果,并发布了bge-m3_miracl_2cr代码复现指南。
  • 2024年3月20日: Milvus团队帮助实现了 BGE-M3 在 Milvus 中的混合检索,相关代码可以参考 pymilvus/examples/hello_hybrid_sparse_dense.py
  • 2024年3月8日: 在最新的基准测试中,BGE-M3 在英语及多种语言中表现优异,超越了诸如 OpenAI 的模型。
  • 2024年2月6日: 发布了MLDR(覆盖13种语言的长文档检索数据集)和评测流程。

技术规格

模型名 维度 序列长度 介绍
BAAI/bge-m3 1024 8192 多语言,基于统一的微调(密集、稀疏、ColBERT)
BAAI/bge-m3-unsupervised 1024 8192 对比学习训练,来自 bge-m3-retromae
BAAI/bge-large-en-v1.5 1024 512 英文模型
BAAI/bge-base-en-v1.5 768 512 英文模型
BAAI/bge-small-en-v1.5 384 512 英文模型

不同检索方法的介绍

  1. 密集检索: 通过将文本映射到单一嵌入向量进行检索,例如 DPR、BGE-v1.5。
  2. 稀疏检索(词汇匹配): 通过计算文本中出现的词元权重,常用模型如 BM25、unicoil、splade。
  3. 多向量检索: 使用多个向量来表示文本,例如 ColBERT。

如何在其他项目中使用 BGE-M3

  • 对于嵌入检索,可以按照 BGE 的用法使用 BGE-M3,只是 BGE-M3 不再需要为查询添加指令。
  • 对于混合检索,可以使用 Vespa 和 Milvus。

BGE-M3 使用教程

  1. 安装:

    git clone https://github.com/FlagOpen/FlagEmbedding.git
    cd FlagEmbedding
    pip install -e .
    

    或直接安装:

    pip install -U FlagEmbedding
    
  2. 生成密集嵌入:

    from FlagEmbedding import BGEM3FlagModel
    model = BGEM3FlagModel('BAAI/bge-m3', use_fp16=True)
    sentences = ["What is BGE M3?", "Definition of BM25"]
    embeddings = model.encode(sentences, batch_size=12, max_length=8192)['dense_vecs']
    
  3. 生成稀疏嵌入:

    from FlagEmbedding import BGEM3FlagModel
    model = BGEM3FlagModel('BAAI/bge-m3', use_fp16=True)
    output = model.encode(sentences, return_dense=True, return_sparse=True)
    lexical_weights = output['lexical_weights']
    print(model.convert_id_to_token(lexical_weights))
    
  4. 生成多向量嵌入:

    from FlagEmbedding import BGEM3FlagModel
    model = BGEM3FlagModel('BAAI/bge-m3', use_fp16=True)
    output = model.encode(sentences, return_dense=True, return_sparse=True, return_colbert_vecs=True)
    print(model.colbert_score(output['colbert_vecs'][0], output['colbert_vecs'][1]))
    
  5. 文本对评分:

    sentence_pairs = [[i,j] for i in sentences_1 for j in sentences_2]
    scores = model.compute_score(sentence_pairs, max_passage_length=128, weights_for_different_modes=[0.4, 0.2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值