项目介绍:bge-reranker-v2.5-gemma2-lightweight
项目概述
bge-reranker-v2.5-gemma2-lightweight是一个多语言的轻量级模型,被用来重新排列文本的相关性。这种模型不同于传统的嵌入模型,它以问题和文档为输入,直接输出相似度得分,而不是生成嵌入向量。通过输入查询和文段,用户可以获得一个相关性得分,该得分可以通过sigmoid函数映射到[0,1]的浮点值范围内。
模型特性
该模型基于gemma2-9b模型进行训练,成功地整合了令牌压缩功能和层级减少技术,从而在节省大量资源的同时仍保持出色的性能。具体来说,bge-reranker-v2.5-gemma2-lightweight模型具有以下特点:
- 轻量级:通过令牌压缩、层级减少或两者结合,该模型可以变得更为轻量。
- 优异的性能:在BEIR和MIRACL数据集上,该模型达到了新的技术水平(SOTA)。
使用场景
该模型支持用户根据具体场景和资源需求选择使用不同的模型配置。它特别适合以下操作:
- 预测题材B是否包含对查询A的答案。
- 判断段落A和B是否具有相同的意义。
- 判断两个查询A和B是否询问相同的内容。
- 预测论点A和反论点B是否表达矛盾的观点。
模型列表
模型名称 | 基础模型 | 语言 | 压缩层 | 压缩比 | 压缩比例 | 特征 |
---|---|---|---|---|---|---|
bge-reranker-base | xlm-roberta-base | 中文和英文 | - | - | - | 轻量级,易于部署和快速推断 |
bge-reranker-large | xlm-roberta-large | 中文和英文 | - | - | - | 轻量级,易于部署和快速推断 |
bge-reranker-v2-m3 | bge-m3 | 多语言 | - | - | - | 具备强大的多语言能力,易于部署和快速推断 |
bge-reranker-v2-gemma | gemma-2b | 多语言 | - | - | - | 适用于多语言环境,优秀的英文和多语言能力 |
bge-reranker-v2-minicpm-layerwise | MiniCPM-2B-dpo-bf16 | 多语言 | 8-40 | - | - | 多语言背景下,英文和中文能力强,支持选择输出层,加快推断速度 |
bge-reranker-v2.5-gemma2-lightweight | google/gemma-2-9b | 多语言 | 8-42 | 1, 2, 4, 8 | [8, 16, 24, 32, 40] | 多语言环境下表现优异, 英文和中文能力出色,支持选择层、压缩比例和压缩层以加速推断 |
用户可以根据自己的具体场景和资源自行选择合适的模型。如果处理多语言任务,可以使用bge-reranker-v2-m3、bge-reranker-v2-gemma,以及bge-reranker-v2.5-gemma2-lightweight。如果任务涉及中文或英文,可以使用bge-reranker-v2-m3和bge-reranker-v2-minicpm-layerwise。如果需要更高效率,可以使用低层的bge-reranker-v2-m3和bge-reranker-v2-minicpm-layerwise。如果需要更好的性能,建议采用bge-reranker-v2-minicpm-layerwise和bge-reranker-v2-gemma模型。
使用方法
使用FlagEmbedding
通过以下命令安装和运行:
git clone https://github.com/FlagOpen/FlagEmbedding.git
cd FlagEmbedding
pip install -e .
Python示例代码:
from FlagEmbedding import LightWeightFlagLLMReranker
reranker = LightWeightFlagLLMReranker('BAAI/bge-reranker-v2.5-gemma2-lightweight', use_fp16=True)
score = reranker.compute_score(['query', 'passage'], cutoff_layers=[28], compress_ratio=2, compress_layer=[24, 40])
print(score)
scores = reranker.compute_score([['what is panda?', 'hi'], ['what is panda?', 'The giant panda (Ailuropoda melanoleuca), sometimes called a panda bear or simply panda, is a bear species endemic to China.']], cutoff_layers=[28], compress_ratio=2, compress_layer=[24, 40])
print(scores)
使用Huggingface transformers
除了FlagEmbedding工具外,也可以使用Huggingface transformers进行模型操作:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
# 定义函数和示例代码以便于快速使用
# ... 省略部分代码
tokenizer = AutoTokenizer.from_pretrained('BAAI/bge-reranker-v2.5-gemma2-lightweight', trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained('BAAI/bge-reranker-v2.5-gemma2-lightweight', trust_remote_code=True)
# ... 省略部分代码
pairs = [['what is panda?', 'hi'], ['what is panda?', 'The giant panda (Ailuropoda melanoleuca), sometimes called a panda bear or simply panda, is a bear species endemic to China.']]
with torch.no_grad():
inputs, query_lengths, prompt_lengths = get_inputs(pairs, tokenizer)
outputs = model(**inputs,
return_dict=True,
cutoff_layers=[28],
compress_ratio=2,
compress_layer=[24, 40],
query_lengths=query_lengths,
prompt_lengths=prompt_lengths)
scores = [last_logit_pool(logit, atten_mask).cpu().float().tolist() for logit, atten_mask in zip(outputs.logits, outputs.attention_masks)]
print(scores)
性能评估
bge-reranker-v2.5-gemma2-lightweight模型在BEIR和MIRACL数据集上表现优异。节省60% Flops的配置为:compress_ratios=2
,compress_layer=[8]
,cutoff_layers=[25]
。
BEIR评估结果
- 模型在各种语言任务中都取得了优异的表现,尤其是在英语和中英文混合任务中。
MIRACL评估结果
- 平均成绩显示该模型在nDCG@10评分中具有出色的性能,超过了多个基准模型。
通过详细的评估结果可以看出,bge-reranker-v2.5-gemma2-lightweight能够在多语言情况下保持卓越的表现,是学习和工业应用中的理想选择。未来我们会发布关于该轻量级模型的技术报告,为用户提供更多技术细节和使用建议。