/ Модель

Характеристики

Контекст
8 192 токена
Параметры
9 млрд
Размер весов
37 ГБ
Лицензия
Gemma
Архитектура
cost_wise_gemma · dense
Опубликована
25 июл 2024

bge-reranker-v2.5-gemma2-lightweight

ЭмбеддингиТекст → embedding10 профессий

Мультиязычный реранкер BAAI на базе Gemma 2 9B оценивает релевантность запросов и текстовых фрагментов для повторного ранжирования поиска.

149 тыс.скачиваний за 30 дней56лайковвеса обновлены6 сен 2024

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Тесты пользователейпока нет

Никто ещё не опубликовал тест этой модели. Соберите бенчмарк из своих задач — результат появится здесь.

  1. Добавьте модель в бенчмарк

    Вместе с другими моделями категории «Эмбеддинги» — сравнение идёт внутри одной категории.

  2. Опишите свои задачи

    Напишите запросы, при необходимости приложите файлы и эталонные ответы.

  3. Запустите и опубликуйте

    Модели ответят на каждую задачу, судья оценит ответы. Опубликованный результат появится на этой странице.

Публичные оценки

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

BAAI/bge-reranker-v2.5-gemma2-lightweight — мультиязычная модель-реранкер от BAAI, построенная на Gemma 2 9B. Она принимает запрос и текстовый фрагмент и оценивает их релевантность; оценку можно преобразовать в диапазон [0, 1] с помощью сигмоиды. Модель также поддерживает сравнение смысла двух фрагментов или запросов и выявление противоречия между аргументами.

Для снижения вычислительных затрат применяются сжатие токенов и сокращение слоёв, по отдельности или вместе. В README сообщается о результатах уровня SOTA на наборах BEIR и MIRACL; для одной конфигурации указана экономия 60% FLOPs. Метаданные указывают 9 млрд параметров и контекст 8192 токена. Модель предназначена для повторного ранжирования результатов поиска и оценки семантической релевантности в многоязычных сценариях.

Лицензия — Gemma. Доступность весов в safetensors подтверждена метаданными. README не приводит конкретный перечень поддерживаемых языков и не описывает ограничения качества; использование требует учитывать лицензионные условия Gemma и вычислительные потребности модели.

Сценарии применения

  • повторное ранжирование документов по запросу
  • оценка релевантности фрагментов для поиска по базе знаний
  • проверка, содержит ли текст ответ на запрос
  • сравнение смысловой близости двух текстов
  • выявление противоречия между аргументами

Ограничения

Конкретный список поддерживаемых языков и детальные ограничения качества в доступных материалах не приведены. Для работы требуются ресурсы, соответствующие модели на 9 млрд параметров, хотя сжатие токенов и сокращение слоёв могут снизить вычислительную нагрузку.

Для каких профессий подходит10

Разделы каталога профессий, в задачах которых используется эта модель

Все профессии

Также подходит для

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

Reranker

More details please refer to our Github: FlagEmbedding.

Different from embedding model, reranker uses question and document as input and directly output similarity instead of embedding. You can get a relevance score by inputting query and passage to the reranker. And the score can be mapped to a float value in [0,1] by sigmoid function.

Here, we introduce a lightweight reranker bge-reranker-v2.5-gemma2-lightweight, which is a multilingual model trained based on gemma2-9b. By integrating token compression capabilities and layerwise reduction, the model can maintain outstanding performance while saving significant resources.

Our model primarily demonstrates the following capabilities:

  • Lightweight: The model can be made lightweight through token compression, layerwise reduction, or a combination of both.
  • Outstanding performance: The model has achieved new state-of-the-art (SOTA) performance on both BEIR and MIRACL.

We will release a technical report about lightweight reranker soon with more details.


You can use bge-reranker-v2.5-gemma2-lightweight with the following different prompts:

  • Predict whether passage B contains an answer to query A.
  • Predict whether passages A and B have the same meaning.
  • Predict whether queries A and B are asking the same thing.
  • Predict whether argument A and counterargument B express contradictory opinions.

Model List

ModelBase modelLanguagelayerwisecompress ratiocompress layersfeature
BAAI/bge-reranker-basexlm-roberta-baseChinese and English---Lightweight reranker model, easy to deploy, with fast inference.
BAAI/bge-reranker-largexlm-roberta-largeChinese and English---Lightweight reranker model, easy to deploy, with fast inference.
BAAI/bge-reranker-v2-m3bge-m3Multilingual---Lightweight reranker model, possesses strong multilingual capabilities, easy to deploy, with fast inference.
BAAI/bge-reranker-v2-gemmagemma-2bMultilingual---Suitable for multilingual contexts, performs well in both English proficiency and multilingual capabilities.
BAAI/bge-reranker-v2-minicpm-layerwiseMiniCPM-2B-dpo-bf16Multilingual8-40--Suitable for multilingual contexts, performs well in both English and Chinese proficiency, allows freedom to select layers for output, facilitating accelerated inference.
BAAI/bge-reranker-v2.5-gemma2-lightweightgoogle/gemma-2-9bMultilingual8-421, 2, 4, 8[8, 16, 24, 32, 40]Suitable for multilingual contexts, performs well in both English and Chinese proficiency, allows freedom to select layers, compress ratio and compress layers for output, facilitating accelerated inference.

You can select the model according your senario and resource.

Usage

Using FlagEmbedding

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

For LLM-based lightweight reranker

from FlagEmbedding import LightWeightFlagLLMReranker
reranker = LightWeightFlagLLMReranker('BAAI/bge-reranker-v2.5-gemma2-lightweight', use_fp16=True) # Setting use_fp16 to True speeds up computation with a slight performance degradation

score = reranker.compute_score(['query', 'passage'], cutoff_layers=[28], compress_ratio=2, compress_layer=[24, 40]) # Adjusting 'cutoff_layers' to pick which layers are used for computing the score.
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)

Using Huggingface transformers

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

def last_logit_pool(logits: torch.Tensor,
                    attention_mask: torch.Tensor) -> torch.Tensor:
    left_padding = (attention_mask[:, -1].sum() == attention_mask.shape[0])
    if left_padding:
        return logits[:, -1]
    else:
        sequence_lengths = attention_mask.sum(dim=1) - 1
        batch_size = logits.shape[0]
        return torch.stack([logits[i, sequence_lengths[i]] for i in range(batch_size)], dim=0)

def get_inputs(pairs, tokenizer, prompt=None, max_length=1024):
    if prompt is None:
        prompt = "Predict whether passage B contains an answer to query A."
    sep = "\n"
    prompt_inputs = tokenizer(prompt,
                              return_tensors=None,
                              add_special_tokens=False)['input_ids']
    sep_inputs = tokenizer(sep,
                           return_tensors=None,
                           add_special_tokens=False)['input_ids']
    inputs = []
    query_lengths = []
    prompt_lengths = []
    for query, passage in pairs:
        query_inputs = tokenizer(f'A: {query}',
                                 return_tensors=None,
                                 add_special_tokens=False,
                                 max_length=max_length * 3 // 4,
                                 truncation=True)
        passage_inputs = tokenizer(f'B: {passage}',
                                   return_tensors=None,
                                   add_special_tokens=False,
                                   max_length=max_length,
                                   truncation=True)
        item = tokenizer.prepare_for_model(
            [tokenizer.bos_token_id] + query_inputs['input_ids'],
            sep_inputs + passage_inputs['input_ids'],
            truncation='only_second',
            max_length=max_length,
            padding=False,
            return_attention_mask=False,
            return_token_type_ids=False,
            add_special_tokens=False
        )
        item['input_ids'] = item['input_ids'] + sep_inputs + prompt_inputs
        item['attention_mask'] = [1] * len(item['input_ids'])
        inputs.append(item)
        query_lengths.append(len([tokenizer.bos_token_id] + query_inputs['input_ids'] + sep_inputs))
        prompt_lengths.append(len(sep_inputs + prompt_inputs))
        
    return tokenizer.pad(
            inputs,
            padding=True,
            max_length=max_length + len(sep_inputs) + len(prompt_inputs),
            pad_to_multiple_of=8,
            return_tensors='pt',
    ), query_lengths, prompt_lengths

tokenizer = AutoTokenizer.from_pretrained('BAAI/bge-reranker-v2.5-gemma2-lightweight', trust_remote_code=True)
tokenizer.padding_side = 'right'
model = AutoModelForCausalLM.from_pretrained('BAAI/bge-reranker-v2.5-gemma2-lightweight', trust_remote_code=True)
model = model.to('cuda')
model.eval()

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)
    inputs = inputs.to(model.device)
    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 = []
    for i in range(len(outputs.logits)):
        logits = last_logit_pool(outputs.logits[i], outputs.attention_masks[i])
        scores.append(logits.cpu().float().tolist())
    print(scores)

Load model in local

  1. make sure gemma_config.py and gemma_model.py from BAAI/bge-reranker-v2.5-gemma2-lightweight in your local path.
  2. modify the following part of config.json:
"auto_map": {
    "AutoConfig": "gemma_config.CostWiseGemmaConfig",
    "AutoModel": "gemma_model.CostWiseGemmaModel",
    "AutoModelForCausalLM": "gemma_model.CostWiseGemmaForCausalLM"
  },

Evaluation

The configuration of saving 60% Flops is: compress_ratios=2, compress_layer=[8], cutoff_layers=[25].

  • BEIR:
BEIRbge-large-en-v1.5Bge-rearanker v2 m3jina-reranker-v2-base-multilingualbge-reranker-v2-gemmabge-reranker-v2.5-gemma2-lightweightbge-reranker-v2.5-gemma2-lightweight
Save Flops----60%0
ArguAna63.5437.752.2378.6886.0486.16
ClimateFEVER36.4937.9934.6539.0748.4148.48
CQA42.2338.2440.2145.8549.1848.9
DBPedia44.1648.1549.3149.9251.9852.11
FEVER87.1790.1592.4490.1594.7194.69
FiQA201844.9749.3245.8849.3260.4860.95
HotpotQA74.1184.5181.8186.1587.8487.89
MSMARCO42.4847.7947.8348.0747.2347.26
NFCorpus38.1234.8537.7339.7341.441.64
NQ55.0469.3767.3572.675.3775.58
QuoraRetrieval89.0689.1387.8190.3791.2591.18
SCIDOCS22.6218.2520.2121.6523.7123.87
SciFact74.6473.0876.9377.2280.580.38
Touche202025.0835.6832.4535.6830.6431.09
TRECCOVID74.8983.3980.8985.5184.2684.85
Mean54.3155.3656.5260.7163.163.67
BEIRe5-mistral-7b-instructbge-reranker-v2-gemmabge-reranker-v2.5-gemma-lightweightbge-reranker-v2.5-gemma-lightweight
Save Flops--60%0
ArguAna61.879.0586.0286.58
ClimateFEVER38.3737.6647.2747.13
CQA42.9746.1649.0649.53
DBPedia48.8450.7752.4552.87
FEVER87.8291.3694.8595.19
FiQA201856.5850.9658.8161.19
HotpotQA75.7286.9988.4988.82
MSMARCO43.0648.3547.6547.4
NFCorpus38.5839.2542.2842.17
NQ63.5673.447576.28
QuoraRetrieval89.5990.4491.0991.18
SCIDOCS16.320.7722.222.69
SciFact76.2677.7879.9480.98
Touche202026.2435.7928.6931.17
TRECCOVID87.0788.1386.6187.36
Mean56.8561.1363.3664.04
  • MIRACL:
MIRACL (dev, nDCG@10)Average (18)save flopsarbnenesfafifrhiidjakoruswtethzhdeyo
bge-m3 (Dense)69.2-78.480.056.956.160.978.658.359.556.172.869.970.178.786.282.662.756.781.8
jina-reranker-v2-base-multilingual69.6-73.481.958.958.660.577.256.162.759.672.774.067.178.185.881.263.058.284.2
bge-reranker-v2-m374.4-81.784.663.564.465.782.463.768.562.780.073.876.982.389.485.365.262.787.4
bge-reranker-v2-gemma75.0-82.385.066.665.365.582.665.469.461.279.775.178.381.889.686.166.864.085.9
bge-reranker-v2.5-gemma2-lightweight77.160%82.587.868.667.667.582.868.571.463.882.875.979.884.890.888.169.965.889.6
bge-reranker-v2.5-gemma-lightweight77.3082.887.669.367.867.483.368.571.363.883.675.780.185.190.888.769.965.689.8

Citation

If you find this repository useful, please consider giving a star and citation

@misc{li2023making,
      title={Making Large Language Models A Better Foundation For Dense Retrieval}, 
      author={Chaofan Li and Zheng Liu and Shitao Xiao and Yingxia Shao},
      year={2023},
      eprint={2312.15503},
      archivePrefix={arXiv},
      primaryClass={cs.CL}
}
@misc{chen2024bge,
      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}
}

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм

Можно запустить

Подбираем GPU…

Класс архитектуры
CostWiseGemmaForCausalLM
Ревизия весов
fabc9f6

0 моделей