# FlagEmbedding
智源开源库FlagEmbedding，专注于检索增强llm领域。

## 已适配模型
- **Embedding Model**: [BGE Embedding](./FlagEmbedding/baai_general_embedding)
- **Reranker Model**: [BGE Reranker](./FlagEmbedding/reranker/)

## 环境配置
-v 路径、docker_name和imageID根据实际情况修改
**注意**：bitsandbytes库功能不全，暂不支持量化相关

### Docker（方法一）
```bash
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-ubuntu20.04-dtk24.04.1-py3.10
docker run -it -v /path/your_code_data/:/path/your_code_data/ -v /opt/hyhal/:/opt/hyhal/:ro --shm-size=80G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name docker_name imageID bash

cd /your_code_path/FlagEmbedding_pytorch
pip install -e .
pip install peft
pip install faiss-1.7.2_dtk24.04_gitb7348e7df780-py3-none-any.whl

export LD_LIBRARY_PATH=/path/of/site-packages/faiss/:$LD_LIBRARY_PATH
```

### Dockerfile（方法二）
```bash
cd docker
docker build --no-cache -t FlagEmbedding:latest .
docker run -it -v /path/your_code_data/:/path/your_code_data/ -v /opt/hyhal/:/opt/hyhal/:ro --shm-size=80G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name docker_name imageID bash

cd /your_code_path/FlagEmbedding_pytorch
pip install -e .
pip install peft
pip install faiss-1.7.2_dtk24.04_gitb7348e7df780-py3-none-any.whl

export LD_LIBRARY_PATH=/path/of/site-packages/faiss/:$LD_LIBRARY_PATH
```

### Anaconda（方法三）
关于本项目DCU显卡所需的特殊深度学习库可从[光合](https://developer.hpccube.com/tool/)开发者社区下载安装。
```bash
DTK驱动: dtk24.04.1
python: python3.10
torch: 2.1.0
```
`Tips：以上dtk驱动、python、torch等DCU相关工具版本需要严格一一对应`

其它非深度学习库安装方式如下：
```bash
cd /your_code_path/FlagEmbedding_pytorch
pip install -e .
pip install peft
pip install faiss-1.7.2_dtk24.04_gitb7348e7df780-py3-none-any.whl

export LD_LIBRARY_PATH=/path/of/site-packages/faiss/:$LD_LIBRARY_PATH
```

## 已经适配的项目
### [BGE Reranker](./FlagEmbedding/reranker)
- 交叉编码器将对查询和答案实时计算相关性分数，这比向量模型(即双编码器)更准确，但比向量模型更耗时。
因此，它可以用来对嵌入模型返回的前k个文档重新排序。
我们在多语言数据上训练了交叉编码器，数据格式与向量模型相同，因此您可以根据我们的[示例](./examples/reranker)轻松地对其进行微调。
更多细节请参考[这里](./FlagEmbedding/reranker/README.md)

- 我们提供了新版的交叉编码器，支持更多的语言以及更长的长度。使用的数据格式与向量模型类似，但是新增了prompt用于微调以及推理。您可以使用特定的层进行推理或使用完整的层进行推理，您可以根根据我们的[示例](./FlagEmbedding/llm_reranker#fine-tune)轻松地对其进行微调。
更多细节请参考[llm_reranker/README.md](./examples/llm_reranker/README.md)

### [BGE Embedding](./FlagEmbedding/baai_general_embedding)
BGE Embedding是一个通用向量模型。 我们使用[retromae](https://github.com/staoxiao/RetroMAE)对模型进行预训练，再用对比学习在大规模成对数据上训练模型。
**你可以按照我们的[示例](./examples/finetune)在本地数据上微调嵌入模型。**
我们还提供了一个[预训练示例](./examples/pretrain)。
请注意，预训练的目标是重构文本，预训练后的模型无法直接用于相似度计算，需要进行微调之后才可以用于相似度计算。
更多关于bge的训练情况请参阅[论文](https://arxiv.org/pdf/2309.07597.pdf)和[代码](./baai_general_embedding/README.md).

**注意BGE使用CLS的表征作为整个句子的表示，如果使用了错误的方式(如mean pooling)会导致效果很差。**

### 精度
暂无

## 应用场景
### 算法类别
检索增强

### 热点应用行业
广媒,教育,政府

## 预训练权重
通过[SCNet AIModels](http://113.200.138.88:18080/aimodels)下载预训练模型:

### BGE Embedding
- [bge-large-zh-v1.5](http://113.200.138.88:18080/aimodels/bge-large-zh-v1.5)
- [bge-base-zh-v1.5](http://113.200.138.88:18080/aimodels/baai/bge-base-zh-v1.5)
- [bge-small-zh-v1.5](http://113.200.138.88:18080/aimodels/baai/bge-small-zh-v1.5)
- [bge-large-en-v1.5](http://113.200.138.88:18080/aimodels/bge-large-en-v1.5)
- [bge-base-en-v1.5](http://113.200.138.88:18080/aimodels/bge-base-en-v1.5)
- [bge-small-en-v1.5](http://113.200.138.88:18080/aimodels/bge-small-en-v1.5)

### BGE Reranker
- [bge-reranker-base](http://113.200.138.88:18080/aimodels/bge-reranker-base)
- [bge-reranker-large](http://113.200.138.88:18080/aimodels/bge-reranker-large)
- [bge-reranker-v2-m3](http://113.200.138.88:18080/aimodels/baai/bge-reranker-v2-m3)
- [bge-reranker-v2-gemma](http://113.200.138.88:18080/aimodels/baai/bge-reranker-v2-gemma)
- [bge-reranker-v2-minicpm-layerwise](http://113.200.138.88:18080/aimodels/baai/bge-reranker-v2-minicpm-layerwise)

## 源码仓库及问题反馈
- https://developer.hpccube.com/codes/modelzoo/flagembedding_pytorch

## 参考资料
- https://github.com/FlagOpen/FlagEmbedding
