# Reranker
## Usage
和embedding模型不同，Reranker使用问题和文档作为输入，直接输出相似度而不是嵌入。
您可以通过输入查询语句和段落文本到reranker来获得相关性评分。
reranker是基于交叉熵损失函数进行优化的，因此相关分数不局限于特定的范围。

### 使用 FlagEmbedding
1. 确认环境配置完成，请参考[环境配置](../../README.md#环境配置)
2. 计算相关性得分(相关度越高得分越高):
```python
from FlagEmbedding import FlagReranker
reranker = FlagReranker('BAAI/bge-reranker-large', use_fp16=True) # Setting use_fp16 to True speeds up computation with a slight performance degradation

score = reranker.compute_score(['query', 'passage'])
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.']])
print(scores)
```

### 使用 Huggingface transformers
```python
import torch
from transformers import AutoModelForSequenceClassification, AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained('BAAI/bge-reranker-large')
model = AutoModelForSequenceClassification.from_pretrained('BAAI/bge-reranker-large')
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 = tokenizer(pairs, padding=True, truncation=True, return_tensors='pt', max_length=512)
    scores = model(**inputs, return_dict=True).logits.view(-1, ).float()
    print(scores)
```

## 微调
可以跟着这个[用例](../../examples/reranker/)来微调reranker。

reranker采用了[xlm-roberta-base](https://huggingface.co/xlm-roberta-base)进行初始化，并且我们使用了混合的多语言数据集来进行训练
- 中文: 788,491 文本对来自[T2ranking](https://huggingface.co/datasets/THUIR/T2Ranking), [MMmarco](https://github.com/unicamp-dl/mMARCO), [dulreader](https://github.com/baidu/DuReader), [Cmedqa-v2](https://github.com/zhangsheng93/cMedQA2), 和 [nli-zh](https://huggingface.co/datasets/shibing624/nli_zh)
- 英语: 933,090文本对来自[msmarco](https://huggingface.co/datasets/sentence-transformers/embedding-training-data), [nq](https://huggingface.co/datasets/sentence-transformers/embedding-training-data), [hotpotqa](https://huggingface.co/datasets/sentence-transformers/embedding-training-data), 和 [NLI](https://github.com/princeton-nlp/SimCSE)
- 其他: 97,458文本对来自[Mr.TyDi](https://github.com/castorini/mr.tydi) (包括阿拉伯语、孟加拉语、英语、芬兰语、印度尼西亚语、日语、韩语、俄语、斯瓦希里语、泰卢固语、泰语)

为了加强交叉语言相关性功能，我们基于[MMarco](https://github.com/unicamp-dl/mMARCO)构造了两个交叉语言检索的数据集。
特别地，我们对10万个英文queries进行抽样以检索中文段落，同时对10万个中文queries进行抽样以检索英文段落。数据集发布于[Shitao/bge-reranker-data](https://huggingface.co/datasets/Shitao/bge-reranker-data)。
当前，模型主要支持中英文，并且可能会看到其他低资源语言的性能下降。

## Evaluation
您可以使用我们的[c-mteb script](../../C_MTEB#evaluate-reranker)进行reranker验证。

## Acknowledgement
部分代码基于[Reranker](https://github.com/luyug/Reranker)进行的开发。
