价格
25次/1$
API文档资料
BGE-M3(论文,代码)
在本项目中,我们推出的BGE-M3模型因其多功能性、多语言性和多粒度性而独树一帜: - 多功能性:可同步实现嵌入模型的三大常见检索功能——稠密检索、多向量检索与稀疏检索 - 多语言性:支持超过100种工作语言 - 多粒度性:能处理从短句到长达8192个token的长文档等不同粒度的输入
RAG检索流程的一些建议: 我们推荐采用以下流程:混合检索 + 重排序。 - 混合检索能结合多种方法的优势,提供更高准确率和更强泛化能力。 典型示例:同时使用嵌入检索和BM25算法。 现在您可以尝试使用BGE-M3,该模型同时支持嵌入检索和稀疏检索。 在生成稠密嵌入向量时,无需额外成本即可获得词元权重(类似于BM25)。 - 作为交叉编码器模型,重排序器比双编码器嵌入模型展现出更高准确性。 检索后使用重排序模型(例如bge-reranker、cohere-reranker)可进一步筛选候选文本。
新闻:
规格
- 模型
模型名称 | 维度 | 序列长度 | 简介 |
---|---|---|---|
BAAI/bge-m3 | 1024 | 8192 | 多语言;基于bge-m3-unsupervised的统一微调(稠密、稀疏和colbert) |
BAAI/bge-m3-unsupervised | 1024 | 8192 | 多语言;基于bge-m3-retromae的对比学习 |
BAAI/bge-m3-retromae | – | 8192 | 多语言;将xlm-roberta的最大长度扩展至8192并通过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 | 英文模型 |
- 数据
数据集 | 简介 |
---|---|
MLDR | 文档检索数据集,涵盖13种语言 |
常见问题解答
1. 不同检索方法介绍
- 稠密检索:将文本映射为单个嵌入向量,例如 DPR、BGE-v1.5
- 稀疏检索(词法匹配):生成与词汇表等长的向量,多数位置为零,仅对文本中存在的词元计算权重。例如 BM25、unicoil 和 splade
- 多向量检索:使用多个向量表示文本,例如 ColBERT
2. 与BGE-v1.5及其他单语模型的对比
BGE-M3是一个多语言模型,其在单语言嵌入检索方面的能力可能无法超越专为单一语言设计的模型。 不过,我们仍然推荐尝试BGE-M3,因为它具有多功能性(支持多种语言和长文本)。 此外,它能够同时生成多种表示形式,联合使用可以提升准确性和泛化能力, 这与大多数现有模型只能执行密集检索的特性不同。
在开源社区中,有许多优秀的模型(如jina-embedding、colbert、e5等),用户可以根据实际需求选择适合的模型,例如是否需要支持多语言或跨语言功能,以及是否需要处理长文本。
3. 如何在其他项目中使用 BGE-M3?
对于嵌入检索任务,您可以采用与BGE相同的方式使用BGE-M3模型。 唯一区别在于BGE-M3模型不再需要为查询语句添加指令。 在稀疏检索方法方面,目前多数开源库尚未支持直接调用BGE-M3模型, 我们欢迎社区开发者贡献相关实现。
在我们的实验中,我们使用Pyserini和Faiss进行混合检索。 现在您可以在Vespa中尝试BGE-M3的混合模式。感谢@jobergum。
4. 如何微调 bge-M3 模型?
您可以参考这个示例来微调稠密嵌入模型。
我们将发布用于统一微调(密集、稀疏和多向量)的代码与数据。
评估
目前,BM25在非英语数据上的结果存在错误。 我们将重新审查测试流程并尽快更新论文。 如需更强大的BM25实现,可参考此代码库。 感谢社区的提醒以及carlos-lassance提供的结果。
- 多语言(Miracl 数据集)
- 跨语言(MKQA数据集)
- 长文档检索
-
MLDR:
请注意MLDR是我们通过LLM构建的文档检索数据集, 涵盖13种语言,包含测试集、验证集和训练集。 我们利用MLDR的训练集来增强模型的长文档检索能力。 因此,将基线模型与
Dense w.o.long
(未使用长文档数据集进行微调的版本)进行比较更为公平。 此外,这个长文档检索数据集将会开源,以解决当前开源多语言长文本检索数据集的匮乏问题。 我们相信这些数据将有助于开源社区训练文档检索模型。 -
NarritiveQA:
训练
- 自知识蒸馏:结合来自不同检索模式的多个输出作为奖励信号,提升单一模式(特别是稀疏检索和多向量(colbert)检索)的性能
- 高效批处理:提升长文本微调时的效率。小批量策略简单但有效,也可用于微调大型嵌入模型
- MCLS:一种无需微调即可提升长文本性能的简单方法。若缺乏资源对长文本模型进行微调,该方法非常实用
详情请参阅我们的报告。
微调代码和数据集将在近期开源。
致谢
感谢开源数据集的作者们,包括Miracl、MKQA、NarritiveQA等。 感谢开源库如Tevatron、pyserial。
引用
如果您觉得这个代码库有用,请考虑给它一个星标 :star: 并引用
@misc{bge-m3,
title={BGE M3-Embedding: Multi-Lingual, Multi-Functionality, Multi-Granularity Text Embeddings Through Self-Knowledge Distillation},
author={Jianlv Chen and Shitao Xiao and Peitian Zhang and Kun Luo and Defu Lian and Zheng Liu},
year={2024},
eprint={2402.03216},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
使用量分析
lucataco/bge-m3 使用统计
replicate - 调用数据分析