File size: 3,962 Bytes
a9fd75b 7d6748a a9fd75b 7d6748a a9fd75b 7d6748a 5b619b1 0ce9706 5b619b1 9122358 5b619b1 e0e9b1d 7d6748a f056e20 7d6748a a839720 7d6748a a839720 7d6748a a839720 7d6748a d2e9205 7d6748a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
---
license: apache-2.0
language:
- vi
library_name: transformers
pipeline_tag: text-classification
tags:
- transformers
- cross-encoder
- rerank
datasets:
- unicamp-dl/mmarco
widget:
- text: tỉnh nào có diện tích lớn nhất việt nam
output:
- label: >-
nghệ an có diện tích lớn nhất việt nam
score: 0.9999
- label: >-
bắc ninh có diện tích nhỏ nhất việt nam
score: 0.1705
---
# Reranker
* [Usage](#usage)
* [Using FlagEmbedding](#using-flagembedding)
* [Using Huggingface transformers](#using-huggingface-transformers)
* [Fine tune](#fine-tune)
* [Data format](#data-format)
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.
## Usage
### Using FlagEmbedding
```
pip install -U FlagEmbedding
```
Get relevance scores (higher scores indicate more relevance):
```python
from FlagEmbedding import FlagReranker
reranker = FlagReranker('namdp/bge-reranker-vietnamese',
use_fp16=True) # Setting use_fp16 to True speeds up computation with a slight performance degradation
score = reranker.compute_score(['tỉnh nào có diện tích lớn nhất việt nam', 'nghệ an có diện tích lớn nhất việt nam'])
print(score) # 11.140625
# You can map the scores into 0-1 by set "normalize=True", which will apply sigmoid function to the score
score = reranker.compute_score(['tỉnh nào có diện tích lớn nhất việt nam', 'nghệ an có diện tích lớn nhất việt nam'],
normalize=True)
print(score) # 0.9999854895214452
scores = reranker.compute_score(
[
['tỉnh nào có diện tích lớn nhất việt nam', 'nghệ an có diện tích lớn nhất việt nam'],
['tỉnh nào có diện tích lớn nhất việt nam', 'bắc ninh có diện tích nhỏ nhất việt nam']
]
)
print(scores) # [11.140625, -1.58203125]
# You can map the scores into 0-1 by set "normalize=True", which will apply sigmoid function to the score
scores = reranker.compute_score(
[
['tỉnh nào có diện tích lớn nhất việt nam', 'nghệ an có diện tích lớn nhất việt nam'],
['tỉnh nào có diện tích lớn nhất việt nam', 'bắc ninh có diện tích nhỏ nhất việt nam']
],
normalize=True
)
print(scores) # [0.99998548952144523, 0.17050799982688053]
```
### Using Huggingface transformers
```
pip install -U transformers
```
Get relevance scores (higher scores indicate more relevance):
```python
import torch
from transformers import AutoModelForSequenceClassification, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('namdp/bge-reranker-vietnamese')
model = AutoModelForSequenceClassification.from_pretrained('namdp/bge-reranker-vietnamese')
model.eval()
pairs = [
['tỉnh nào có diện tích lớn nhất việt nam', 'nghệ an có diện tích lớn nhất việt nam'],
['tỉnh nào có diện tích lớn nhất việt nam', 'bắc ninh có diện tích nhỏ nhất việt nam']
],
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)
```
## Fine-tune
### Data Format
Train data should be a json file, where each line is a dict like this:
```
{"query": str, "pos": List[str], "neg": List[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. |