Views
No views yet
BAAI/bge-reranker-v2-m3.| Model | Base model | Language | layerwise | feature |
|---|---|---|---|---|
| BAAI/bge-reranker-base | xlm-roberta-base | Chinese and English | - | Lightweight reranker model, easy to deploy, with fast inference. |
| BAAI/bge-reranker-large | xlm-roberta-large | Chinese and English | - | Lightweight reranker model, easy to deploy, with fast inference. |
| BAAI/bge-reranker-v2-m3 | bge-m3 | Multilingual | - | Lightweight reranker model, possesses strong multilingual capabilities, easy to deploy, with fast inference. |
| BAAI/bge-reranker-v2-gemma | gemma-2b | Multilingual | - | Suitable for multilingual contexts, performs well in both English proficiency and multilingual capabilities. |
| BAAI/bge-reranker-v2-minicpm-layerwise | MiniCPM-2B-dpo-bf16 | Multilingual | 8-40 | Suitable for multilingual contexts, performs well in both English and Chinese proficiency, allows freedom to select layers for output, facilitating accelerated inference. |
pip install -U FlagEmbedding1from FlagEmbedding import FlagReranker
2reranker = FlagReranker('BAAI/bge-reranker-v2-m3', use_fp16=True) # Setting use_fp16 to True speeds up computation with a slight performance degradation
3
4score = reranker.compute_score(['query', 'passage'])
5print(score) # -5.65234375
6
7# You can map the scores into 0-1 by set "normalize=True", which will apply sigmoid function to the score
8score = reranker.compute_score(['query', 'passage'], normalize=True)
9print(score) # 0.003497010252573502
10
11scores = 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.']])
12print(scores) # [-8.1875, 5.26171875]
13
14# You can map the scores into 0-1 by set "normalize=True", which will apply sigmoid function to the score
15scores = 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.']], normalize=True)
16print(scores) # [0.00027803096387751553, 0.9948403768236574]1from FlagEmbedding import FlagLLMReranker
2reranker = FlagLLMReranker('BAAI/bge-reranker-v2-gemma', use_fp16=True) # Setting use_fp16 to True speeds up computation with a slight performance degradation
3# reranker = FlagLLMReranker('BAAI/bge-reranker-v2-gemma', use_bf16=True) # You can also set use_bf16=True to speed up computation with a slight performance degradation
4
5score = reranker.compute_score(['query', 'passage'])
6print(score)
7
8scores = 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.']])
9print(scores)1from FlagEmbedding import LayerWiseFlagLLMReranker
2reranker = LayerWiseFlagLLMReranker('BAAI/bge-reranker-v2-minicpm-layerwise', use_fp16=True) # Setting use_fp16 to True speeds up computation with a slight performance degradation
3# reranker = LayerWiseFlagLLMReranker('BAAI/bge-reranker-v2-minicpm-layerwise', use_bf16=True) # You can also set use_bf16=True to speed up computation with a slight performance degradation
4
5score = reranker.compute_score(['query', 'passage'], cutoff_layers=[28]) # Adjusting 'cutoff_layers' to pick which layers are used for computing the score.
6print(score)
7
8scores = 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])
9print(scores)1import torch
2from transformers import AutoModelForSequenceClassification, AutoTokenizer
3
4tokenizer = AutoTokenizer.from_pretrained('BAAI/bge-reranker-v2-m3')
5model = AutoModelForSequenceClassification.from_pretrained('BAAI/bge-reranker-v2-m3')
6model.eval()
7
8pairs = [['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.']]
9with torch.no_grad():
10 inputs = tokenizer(pairs, padding=True, truncation=True, return_tensors='pt', max_length=512)
11 scores = model(**inputs, return_dict=True).logits.view(-1, ).float()
12 print(scores)1import torch
2from transformers import AutoModelForCausalLM, AutoTokenizer
3
4def get_inputs(pairs, tokenizer, prompt=None, max_length=1024):
5 if prompt is None:
6 prompt = "Given a query A and a passage B, determine whether the passage contains an answer to the query by providing a prediction of either 'Yes' or 'No'."
7 sep = "\n"
8 prompt_inputs = tokenizer(prompt,
9 return_tensors=None,
10 add_special_tokens=False)['input_ids']
11 sep_inputs = tokenizer(sep,
12 return_tensors=None,
13 add_special_tokens=False)['input_ids']
14 inputs = []
15 for query, passage in pairs:
16 query_inputs = tokenizer(f'A: {query}',
17 return_tensors=None,
18 add_special_tokens=False,
19 max_length=max_length * 3 // 4,
20 truncation=True)
21 passage_inputs = tokenizer(f'B: {passage}',
22 return_tensors=None,
23 add_special_tokens=False,
24 max_length=max_length,
25 truncation=True)
26 item = tokenizer.prepare_for_model(
27 [tokenizer.bos_token_id] + query_inputs['input_ids'],
28 sep_inputs + passage_inputs['input_ids'],
29 truncation='only_second',
30 max_length=max_length,
31 padding=False,
32 return_attention_mask=False,
33 return_token_type_ids=False,
34 add_special_tokens=False
35 )
36 item['input_ids'] = item['input_ids'] + sep_inputs + prompt_inputs
37 item['attention_mask'] = [1] * len(item['input_ids'])
38 inputs.append(item)
39 return tokenizer.pad(
40 inputs,
41 padding=True,
42 max_length=max_length + len(sep_inputs) + len(prompt_inputs),
43 pad_to_multiple_of=8,
44 return_tensors='pt',
45 )
46
47tokenizer = AutoTokenizer.from_pretrained('BAAI/bge-reranker-v2-gemma')
48model = AutoModelForCausalLM.from_pretrained('BAAI/bge-reranker-v2-gemma')
49yes_loc = tokenizer('Yes', add_special_tokens=False)['input_ids'][0]
50model.eval()
51
52pairs = [['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.']]
53with torch.no_grad():
54 inputs = get_inputs(pairs, tokenizer)
55 scores = model(**inputs, return_dict=True).logits[:, -1, yes_loc].view(-1, ).float()
56 print(scores)1import torch
2from transformers import AutoModelForCausalLM, AutoTokenizer
3
4def get_inputs(pairs, tokenizer, prompt=None, max_length=1024):
5 if prompt is None:
6 prompt = "Given a query A and a passage B, determine whether the passage contains an answer to the query by providing a prediction of either 'Yes' or 'No'."
7 sep = "\n"
8 prompt_inputs = tokenizer(prompt,
9 return_tensors=None,
10 add_special_tokens=False)['input_ids']
11 sep_inputs = tokenizer(sep,
12 return_tensors=None,
13 add_special_tokens=False)['input_ids']
14 inputs = []
15 for query, passage in pairs:
16 query_inputs = tokenizer(f'A: {query}',
17 return_tensors=None,
18 add_special_tokens=False,
19 max_length=max_length * 3 // 4,
20 truncation=True)
21 passage_inputs = tokenizer(f'B: {passage}',
22 return_tensors=None,
23 add_special_tokens=False,
24 max_length=max_length,
25 truncation=True)
26 item = tokenizer.prepare_for_model(
27 [tokenizer.bos_token_id] + query_inputs['input_ids'],
28 sep_inputs + passage_inputs['input_ids'],
29 truncation='only_second',
30 max_length=max_length,
31 padding=False,
32 return_attention_mask=False,
33 return_token_type_ids=False,
34 add_special_tokens=False
35 )
36 item['input_ids'] = item['input_ids'] + sep_inputs + prompt_inputs
37 item['attention_mask'] = [1] * len(item['input_ids'])
38 inputs.append(item)
39 return tokenizer.pad(
40 inputs,
41 padding=True,
42 max_length=max_length + len(sep_inputs) + len(prompt_inputs),
43 pad_to_multiple_of=8,
44 return_tensors='pt',
45 )
46
47tokenizer = AutoTokenizer.from_pretrained('BAAI/bge-reranker-v2-minicpm-layerwise', trust_remote_code=True)
48model = AutoModelForCausalLM.from_pretrained('BAAI/bge-reranker-v2-minicpm-layerwise', trust_remote_code=True, torch_dtype=torch.bfloat16)
49model = model.to('cuda')
50model.eval()
51
52pairs = [['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.']]
53with torch.no_grad():
54 inputs = get_inputs(pairs, tokenizer).to(model.device)
55 all_scores = model(**inputs, return_dict=True, cutoff_layers=[28])
56 all_scores = [scores[:, -1].view(-1, ).float() for scores in all_scores[0]]
57 print(all_scores){"query": str, "pos": List[str], "neg":List[str], "prompt": str}query is the query, and pos is a list of positive texts, neg is a list of negative texts, prompt indicates the relationship between query and texts. If you have no negative texts for a query, you can random sample some from the entire corpus as the negatives.1torchrun --nproc_per_node {number of gpus} \
2-m FlagEmbedding.llm_reranker.finetune_for_instruction.run \
3--output_dir {path to save model} \
4--model_name_or_path google/gemma-2b \
5--train_data ./toy_finetune_data.jsonl \
6--learning_rate 2e-4 \
7--num_train_epochs 1 \
8--per_device_train_batch_size 1 \
9--gradient_accumulation_steps 16 \
10--dataloader_drop_last True \
11--query_max_len 512 \
12--passage_max_len 512 \
13--train_group_size 16 \
14--logging_steps 1 \
15--save_steps 2000 \
16--save_total_limit 50 \
17--ddp_find_unused_parameters False \
18--gradient_checkpointing \
19--deepspeed stage1.json \
20--warmup_ratio 0.1 \
21--bf16 \
22--use_lora True \
23--lora_rank 32 \
24--lora_alpha 64 \
25--use_flash_attn True \
26--target_modules q_proj k_proj v_proj o_proj1torchrun --nproc_per_node {number of gpus} \
2-m FlagEmbedding.llm_reranker.finetune_for_layerwise.run \
3--output_dir {path to save model} \
4--model_name_or_path openbmb/MiniCPM-2B-dpo-bf16 \
5--train_data ./toy_finetune_data.jsonl \
6--learning_rate 2e-4 \
7--num_train_epochs 1 \
8--per_device_train_batch_size 1 \
9--gradient_accumulation_steps 16 \
10--dataloader_drop_last True \
11--query_max_len 512 \
12--passage_max_len 512 \
13--train_group_size 16 \
14--logging_steps 1 \
15--save_steps 2000 \
16--save_total_limit 50 \
17--ddp_find_unused_parameters False \
18--gradient_checkpointing \
19--deepspeed stage1.json \
20--warmup_ratio 0.1 \
21--bf16 \
22--use_lora True \
23--lora_rank 32 \
24--lora_alpha 64 \
25--use_flash_attn True \
26--target_modules q_proj k_proj v_proj o_proj \
27--start_layer 8 \
28--head_multi True \
29--head_type simple \
30--lora_extra_parameters linear_head




1@misc{li2023making,
2 title={Making Large Language Models A Better Foundation For Dense Retrieval},
3 author={Chaofan Li and Zheng Liu and Shitao Xiao and Yingxia Shao},
4 year={2023},
5 eprint={2312.15503},
6 archivePrefix={arXiv},
7 primaryClass={cs.CL}
8}
9@misc{chen2024bge,
10 title={BGE M3-Embedding: Multi-Lingual, Multi-Functionality, Multi-Granularity Text Embeddings Through Self-Knowledge Distillation},
11 author={Jianlv Chen and Shitao Xiao and Peitian Zhang and Kun Luo and Defu Lian and Zheng Liu},
12 year={2024},
13 eprint={2402.03216},
14 archivePrefix={arXiv},
15 primaryClass={cs.CL}
16}