<h1 align="center">FlagEmbedding</h1>
<p align="center">
<a href="https://github.com/FlagOpen/FlagEmbedding">
<img alt="Build" src="https://yellow-cdn.veclightyear.com/2b54e442/15dc473c-93bd-46a5-8209-fa3a854ffc28.png">
</a>
<a href="https://github.com/FlagOpen/FlagEmbedding/blob/master/LICENSE">
<img alt="License" src="https://yellow-cdn.veclightyear.com/2b54e442/163e8e43-8cdd-4900-8dee-2537522817ce.png">
</a>
<a href="https://huggingface.co/C-MTEB">
<img alt="Build" src="https://yellow-cdn.veclightyear.com/2b54e442/7770b19b-da90-47c5-9595-f557ba592bf5.png">
</a>
<a href="https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/baai_general_embedding">
<img alt="Build" src="https://yellow-cdn.veclightyear.com/2b54e442/6842158e-1799-47ac-86cb-edc82bab5e1d.1-red">
</a>
</p>
<h4 align="center">
<p>
<a href=#news>新闻</a> |
<a href="#projects">项目</a> |
<a href=#model-list>模型列表</a> |
<a href="#contributor">贡献者</a> |
<a href="#citation">引用</a> |
<a href="#license">许可证</a>
<p>
</h4>
[English](README.md) | [中文](https://github.com/FlagOpen/FlagEmbedding/blob/master/README_zh.md)
FlagEmbedding 专注于增强检索的 LLM,目前由以下项目组成:
- **长上下文 LLM**:[激活信标](https://github.com/FlagOpen/FlagEmbedding/tree/master/Long_LLM/activation_beacon),[长上下文 LLM QLoRA](https://github.com/FlagOpen/FlagEmbedding/tree/master/Long_LLM/longllm_qlora)
- **LM 的微调**:[LM-Cocktail](https://github.com/FlagOpen/FlagEmbedding/tree/master/LM_Cocktail)
- **嵌入模型**:[可视化-BGE](https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/visual),[BGE-M3](https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/BGE_M3),[LLM 嵌入器](https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/llm_embedder),[BGE 嵌入](https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/baai_general_embedding)
- **重排模型**:[LLM 重排器](https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/llm_reranker),[BGE 重排器](https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/reranker)
- **基准测试**:[C-MTEB](https://github.com/FlagOpen/FlagEmbedding/tree/master/C_MTEB),[AIR-Bench](https://github.com/AIR-Bench/AIR-Bench),[MLVU](https://github.com/JUNJIE99/MLVU)
## 新闻
- 2024 年 7 月 26 日:发布了一个新的嵌入模型 [bge-en-icl](https://huggingface.co/BAAI/bge-en-icl),该嵌入模型具有上下文学习能力,通过提供与任务相关的查询响应示例,可以编码语义更丰富的查询,进一步增强嵌入的语义表示能力。:fire:
- 2024 年 7 月 26 日:发布了一个新的多语言嵌入模型 [bge-multilingual-gemma2](https://huggingface.co/BAAI/bge-multilingual-gemma2),这是一个基于 gemma-2-9b 的多语言嵌入模型,支持多种语言和不同的下游任务,在多语言基准(MIRACL,MTEB-fr 和 MTEB-pl)上取得了新的 SOTA。:fire:
- 2024 年 7 月 26 日:发布了一个新的轻量级重排器 [bge-reranker-v2.5-gemma2-lightweight](https://huggingface.co/BAAI/bge-reranker-v2.5-gemma2-lightweight),这是一个基于 gemma-2-9b 的轻量级重排器,支持标记压缩和分层轻量化操作,在节省大量资源的同时仍能确保良好的性能。:fire:
- 2024 年 6 月 7 日:发布了一个新的基准 [MLVU](https://github.com/JUNJIE99/MLVU),这是第一个专为长视频理解而设计的综合基准。MLVU 具有广泛的视频时长范围,多样的视频来源集合以及专为长视频理解而定制的评估任务集。:fire:
- 2024 年 5 月 21 日:与 Jina AI、Zilliz、HuggingFace 和其他合作伙伴共同发布了新的基准 [AIR-Bench](https://github.com/AIR-Bench/AIR-Bench)。AIR-Bench 专注于神经 IR 和 RAG 的公平分布外评估。它生成多领域和多语言的合成数据以进行基准测试。它是动态的,将定期更新。[排行榜](https://huggingface.co/spaces/AIR-Bench/leaderboard) :fire:
- 2024 年 4 月 30 日:发布 [Llama-3-8B-Instruct-80K-QLoRA](https://huggingface.co/namespace-Pt/Llama-3-8B-Instruct-80K-QLoRA),通过 QLoRA 在一些合成的长上下文数据上训练,将 Llama-3-8B-Instruct 的上下文长度从 8K 扩展到 80K。该模型在各种长上下文基准上取得了显著性能。[代码](https://github.com/FlagOpen/FlagEmbedding/tree/master/Long_LLM/longllm_qlora) :fire:
- 2024 年 3 月 18 日:发布新的 [重排器](https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/llm_reranker),构建于强大的 M3 和 LLM (GEMMA 和 MiniCPM,实际上不太大 :smiley:) 框架之上,支持多语言处理和更大输入,显著提高了 BEIR,C-MTEB/检索,MIRACL,LlamaIndex 评估中的排名性能 :fire:
- 2024 年 3 月 18 日:发布 [可视化-BGE](https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/visual),为 BGE 提供视觉功能。可视化-BGE 可以用于生成混合图像-文本数据的嵌入。:fire:
- 2024 年 1 月 30 日:发布 **BGE-M3**,BGE 模型系列的新成员!M3 代表 **多**语言性(100+ 种语言),**多**粒度性(输入长度可达 8192),**多**功能性(密集、词汇、multi-vec/colbert 检索的统一)。这是第一个支持所有三种检索方法的嵌入模型,在多语言(MIRACL)和跨语言(MKQA)基准上取得了新的 SOTA。[技术报告](https://arxiv.org/pdf/2402.03216.pdf) 和 [代码](https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/BGE_M3)。:fire:
- 2024 年 1 月 9 日:发布 [激活信标](https://github.com/FlagOpen/FlagEmbedding/tree/master/Long_LLM/activation_beacon),一种有效、高效、兼容且低成本(训练)的方法,用于扩展 LLM 的上下文长度。[技术报告](https://arxiv.org/abs/2401.03462)
- 2023 年 12 月 24 日:发布 **LLaRA**,基于 LLaMA-7B 的密集检索器,在 MS MARCO 和 BEIR 上取得了最先进的性能。模型和代码将开源。请继续关注。[技术报告](https://arxiv.org/abs/2312.15503)
- 2023 年 11 月 23 日:发布 [LM-Cocktail](https://github.com/FlagOpen/FlagEmbedding/tree/master/LM_Cocktail),一种通过合并多个语言模型在微调过程中保持一般能力的方法。[技术报告](https://arxiv.org/abs/2311.13534)
- 2023 年 10 月 12 日:
### [Visualized-BGE](https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/visual)
在这个项目中,我们引入了Visualized-BGE,它将图像标记嵌入集成到BGE文本嵌入框架中。Visualized-BGE可以用于各种混合模态检索任务,如多模态知识检索、组合图像检索和多模态查询的知识检索。
我们的模型在多个混合模态检索任务中表现出色的零样本性能。它还可以作为下游微调的基础模型,用于混合模态检索任务。
### [LongLLM QLoRA](https://github.com/FlagOpen/FlagEmbedding/tree/master/Long_LLM/longllm_qlora)
我们通过QLoRA微调将Llama-3-8B-Instruct的上下文长度从8K扩展到80K。整个训练周期非常高效,在一台8xA800 (80G) GPU机器上只需8小时。生成的模型在多个评估任务中表现出色,如NIHS、主题检索和长上下文语言理解;同时,它还很好地保留了短上下文的原始能力。这种显著的上下文扩展主要归功于由GPT-4生成的仅3.5K的合成数据,这表明LLMs本质上(但在很大程度上被低估)的潜力可以扩展其原始上下文长度。事实上,如果有更多的计算资源,上下文长度可以扩展到远远超过80K。
### [Activation Beacon](https://github.com/FlagOpen/FlagEmbedding/tree/master/Long_LLM/activation_beacon)
由于上下文窗口长度的限制,利用长上下文对大语言模型提出了很大的挑战。Activation Beacon将LLM的原始激活压缩成更紧凑的形式,使其能够在有限的上下文窗口中感知更长的上下文。这是一种有效、高效、兼容且低成本的(训练)方法来扩展LLM的上下文长度。更多详情请参阅我们的[论文](https://arxiv.org/abs/2401.03462)和[代码](https://github.com/FlagOpen/FlagEmbedding/tree/master/Long_LLM/activation_beacon)。
### [LM-Cocktail](https://github.com/FlagOpen/FlagEmbedding/tree/master/LM_Cocktail)
模型合并已被用于提高单一模型的性能。我们发现这种方法对大语言模型和密集嵌入模型也很有用,并设计了LM-Cocktail策略,该策略使用一个简单的函数计算合并权重,自动合并微调模型和基础模型。LM-Cocktail可以用来提高目标领域的性能,而不会降低目标领域以外的通用能力。它还可以用于生成无需微调的新任务模型。您可以使用它来合并LLM(如Llama)或嵌入模型。更多详情请参阅我们的报告:[LM-Cocktail](https://arxiv.org/abs/2311.13534)和[代码](https://github.com/FlagOpen/FlagEmbedding/tree/master/LM_Cocktail)。
### [LLM Embedder](https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/llm_embedder)
LLM Embedder基于LLMs的反馈进行微调。它可以支持大语言模型的检索增强需求,包括知识检索、记忆检索、示例检索和工具检索。它在6个任务上进行了微调:问答、对话搜索、长对话、长距离语言建模、上下文学习和工具学习。更多详情请参阅[报告](https://arxiv.org/abs/2310.07554)和[./FlagEmbedding/llm_embedder/README.md](https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/llm_embedder)。
### [BGE Reranker](https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/reranker)
Cross-encoder将在输入对上执行全注意力操作,比嵌入模型(即bi-encoder)更精确,但比嵌入模型耗时。因此,它可以用来重新排序嵌入模型返回的top-k文档。我们在多语言配对数据上训练了cross-encoder,其数据格式与嵌入模型相同,因此您可以按照我们的[示例](https://github.com/FlagOpen/FlagEmbedding/tree/master/examples/reranker)轻松进行微调。更多详情请参阅[./FlagEmbedding/reranker/README.md](https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/reranker)。
我们提供了一个支持更多语言和更长长度的新版本cross-encoder。数据格式类似于我们的嵌入模型,但现在包括用于微调和推理的提示数据。您可以使用特定层或使用整个层进行推理。您可以按照我们的[示例](https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/llm_reranker#fine-tune)轻松进行微调。更多详情请参阅[./FlagEmbedding/llm_reranker/README.md](https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/llm_reranker)。
### [BGE Embedding](https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/baai_general_embedding)
BGE embedding是一个通用的嵌入模型。我们使用[retromae](https://github.com/staoxiao/RetroMAE)对模型进行预训练,并使用对比学习在大规模配对数据上进行训练。**您可以按照我们的[示例](https://github.com/FlagOpen/FlagEmbedding/tree/master/examples/finetune)在您的数据上微调嵌入模型。**我们还提供了一个[预训练示例](https://github.com/FlagOpen/FlagEmbedding/tree/master/examples/pretrain)。请注意,预训练的目标是重建文本,预训练模型不能直接用于相似性计算,需要进行微调。更多详情请参阅我们的[报告: c-pack](https://arxiv.org/pdf/2309.07597.pdf)和[代码](https://github.com/FlagOpen/FlagEmbedding/blob/master/FlagEmbedding/baai_general_embedding/README.md)。
**BGE使用最后一个隐藏状态的`[cls]`作为句子嵌入:`sentence_embeddings = model_output[0][:, 0]`。如果您使用平均池化,性能将显著下降。**
### [C-MTEB](https://github.com/FlagOpen/FlagEmbedding/tree/master/C_MTEB)
一个中文文本嵌入基准测试。该基准测试已合并到MTEB中。更多详情请参阅我们的[报告: c-pack](https://arxiv.org/pdf/2309.07597.pdf)和[代码](https://github.com/FlagOpen/FlagEmbedding/tree/master/C_MTEB)。
## 模型列表
`bge`是`BAAI general embedding`的缩写。
| 模型 | 语言 | 描述 | 检索查询说明 |
|:---|:---:|:---:|:---:|
| [BAAI/bge-en-icl](https://huggingface.co/BAAI/bge-en-icl) | 英语 | 具备上下文学习能力的LLM嵌入模型,可以根据少量示例充分发挥模型潜力 | 根据给定任务自由提供指令和少量示例 |
| [BAAI/bge-multilingual-gemma2](https://huggingface.co/BAAI/bge-multilingual-gemma2) | 多语言 | 基于LLM的多语言嵌入模型,在多种语言和任务上训练 | 根据给定任务提供指令 |
| [BAAI/bge-m3](https://huggingface.co/BAAI/bge-m3) | 多语言 | 多功能(密集检索、稀疏检索、多向量检索)、多语言性和多粒度性(8192 tokens) | |
| [LM-Cocktail](https://huggingface.co/Shitao) | 英语 | 微调模型(Llama和BGE),可用于重现LM-Cocktail的结果 | |
| [BAAI/llm-embedder](https://huggingface.co/BAAI/llm-embedder) | 英语 | 支持多种LLM检索增强需求的统一嵌入模型 | 参见[README](https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/llm_embedder) |
| [BAAI/bge-reranker-v2-m3](https://huggingface.co/BAAI/bge-reranker-v2-m3) | 多语言 | 轻量级的跨编码器模型,具有强大的多语言能力,易于部署,推理速度快 | |
| [BAAI/bge-reranker-v2-gemma](https://huggingface.co/BAAI/bge-reranker-v2-gemma) | 多语言 | 适用于多语言环境的跨编码器模型,在英语和多语言能力上表现出色 | |
| [BAAI/bge-reranker-v2-minicpm-layerwise](https://huggingface.co/BAAI/bge-reranker-v2-minicpm-layerwise) | 多语言 | 适用于多语言环境的跨编码器模型,在英语和中文能力上表现出色,允许自由选择输出层,以加速推理 | |
| [BAAI/bge-reranker-v2.5-gemma2-lightweight](https://huggingface.co/BAAI/bge-reranker-v2.5-gemma2-lightweight) | 多语言 | 适用于多语言环境的跨编码器模型,在英语和中文能力上表现出色,允许自由选择层、压缩比和压缩层以加速推理 | |
| [BAAI/bge-reranker-large](https://huggingface.co/BAAI/bge-reranker-large) | 中文和英语 | 更加准确但效率较低的跨编码器模型 | |
| [BAAI/bge-reranker-base](https://huggingface.co/BAAI/bge-reranker-base) | 中文和英语 | 更加准确但效率较低的跨编码器模型 | |
| [BAAI/bge-large-en-v1.5](https://huggingface.co/BAAI/bge-large-en-v1.5) | 英语 | 版本1.5,具有更合理的相似度分布 | `表示这个句子用于检索相关段落:` |
| [BAAI/bge-base-en-v1.5](https://huggingface.co/BAAI/bge-base-en-v1.5) | 英语 | 版本1.5,具有更合理的相似度分布 | `表示这个句子用于检索相关段落:` |
| [BAAI/bge-small-en-v1.5](https://huggingface.co/BAAI/bge-small-en-v1.5) | 英语 | 版本1.5,具有更合理的相似度分布 | `表示这个句子用于检索相关段落:` |
| [BAAI/bge-large-zh-v1.5](https://huggingface.co/BAAI/bge-large-zh-v1.5) | 中文 | 版本1.5,具有更合理的相似度分布 | `为这个句子生成表示以用于检索相关文章:` |
| [BAAI/bge-base-zh-v1.5](https://huggingface.co/BAAI/bge-base-zh-v1.5) | 中文 | 版本1.5,具有更合理的相似度分布 | `为这个句子生成表示以用于检索相关文章:` |
| [BAAI/bge-small-zh-v1.5](https://huggingface.co/BAAI/bge-small-zh-v1.5) | 中文 | 版本1.5,具有更合理的相似度分布 | `为这个句子生成表示以用于检索相关文章:` |
| [BAAI/bge-large-en](https://huggingface.co/BAAI/bge-large-en) | 英语 | 将文本映射为向量的嵌入模型 | `表示这个句子用于检索相关段落:` |
| [BAAI/bge-base-en](https://huggingface.co/BAAI/bge-base-en) | 英语 | 一个基础规模的模型,但具有与`bge-large-en`类似的能力 | `表示这个句子用于检索相关段落:` |
| [BAAI/bge-small-en](https://huggingface.co/BAAI/bge-small-en) | 英语 | 一个小规模的模型,但具有竞争力的表现 | `表示这个句子用于检索相关段落:` |
| [BAAI/bge-large-zh](https://huggingface.co/BAAI/bge-large-zh) | 中文 | 将文本映射为向量的嵌入模型 | `为这个句子生成表示以用于检索相关文章:` |
| [BAAI/bge-base-zh](https://huggingface.co/BAAI/bge-base-zh) | 中文 | 一个基础规模的模型,但具有与`bge-large-zh`类似的能力 | `为这个句子生成表示以用于检索相关文章:` |
| [BAAI/bge-small-zh](https://huggingface.co/BAAI/bge-small-zh) | 中文 | 一个小规模的模型,但具有竞争力的表现 | `为这个句子生成表示以用于检索相关文章:` |
### 贡献者:
<a href="https://github.com/FlagOpen/FlagEmbedding/graphs/contributors">
<img src="https://yellow-cdn.veclightyear.com/2b54e442/69890b9c-3485-46e8-b05a-37131e3620e3.png" />
</a>
## 引用
如果你觉得这个仓库对你有帮助,请考虑给予一个star :star: 并引用
@misc{bge_m3, title={BGE M3-Embedding: Multi-Lingual, Multi-Functionality, Multi-Granularity Text Embeddings Through Self-Knowledge Distillation}, author={Chen, Jianlv and Xiao, Shitao and Zhang, Peitian and Luo, Kun and Lian, Defu and Liu, Zheng}, year={2023}, eprint={2309.07597}, archivePrefix={arXiv}, primaryClass={cs.CL} }
@misc{cocktail, title={LM-Cocktail: Resilient Tuning of Language Models via Model Merging}, author={Shitao Xiao and Zheng Liu and Peitian Zhang and Xingrun Xing}, year={2023}, eprint={2311.13534}, archivePrefix={arXiv}, primaryClass={cs.CL} }
@misc{llm_embedder, title={Retrieve Anything To Augment Large Language Models}, author={Peitian Zhang and Shitao Xiao and Zheng Liu and Zhicheng Dou and Jian-Yun Nie}, year={2023}, eprint={2310.07554}, archivePrefix={arXiv}, primaryClass={cs.IR} }
@misc{bge_embedding,
title={C-Pack: 推动通用中文嵌入的封装资源},
author={肖世涛, 刘征, 张培天, 尼克拉斯·穆恩尼霍夫},
year={2023},
eprint={2309.07597},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
## 许可证
FlagEmbedding 根据 [MIT 许可证](https://github.com/FlagOpen/FlagEmbedding/blob/master/LICENSE) 进行授权。