File size: 6,343 Bytes
873e89c
efe8268
 
24096c1
 
 
 
 
 
 
73edc86
24096c1
 
 
 
 
b3c2c48
 
 
7e7867c
b3c2c48
 
 
 
 
7e7867c
4127514
873e89c
 
24096c1
873e89c
24096c1
 
873e89c
24096c1
873e89c
 
24096c1
873e89c
24096c1
873e89c
24096c1
 
 
873e89c
24096c1
873e89c
24096c1
 
873e89c
6698ac0
873e89c
24096c1
 
 
 
 
 
 
 
873e89c
24096c1
 
 
873e89c
24096c1
 
 
 
 
 
 
 
873e89c
 
24096c1
c2628ab
873e89c
24096c1
0927c23
24096c1
873e89c
24096c1
 
873e89c
24096c1
 
 
 
 
 
 
761ee1c
24096c1
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
---
language:
- ru
library_name: sentence-transformers
tags:
- sentence-transformers
- text-classification
- transformers
- rubert
- cross-encoder
- reranker
- msmarco
datasets:
- unicamp-dl/mmarco
base_model: DeepPavlov/rubert-base-cased
widget:
- text: >-
    как часто нужно ходить к стоматологу? [SEP] Дядя Женя работает врачем
    стоматологом.
  example_title: Example 1
- text: >-
    как часто нужно ходить к стоматологу? [SEP] Минимальный обязательный срок
    посещения зубного врача – раз в год, но специалисты рекомендуют делать это
    чаще – раз в полгода, а ещё лучше – раз в квартал. При таком сроке легко
    отследить любые начинающиеся проблемы и исправить их сразу же.
  example_title: Example 2
license: mit
---

# DiTy/cross-encoder-russian-msmarco

This is a [sentence-transformers](https://www.SBERT.net) model based on a pre-trained [DeepPavlov/rubert-base-cased](https://huggingface.co/DeepPavlov/rubert-base-cased) and finetuned with [MS-MARCO Russian passage ranking dataset](https://huggingface.co/datasets/unicamp-dl/mmarco).
The model can be used for Information Retrieval in the Russian language: Given a query, encode the query will all possible passages (e.g. retrieved with ElasticSearch). Then sort the passages in a decreasing order. See [SBERT.net Retrieve & Re-rank](https://www.sbert.net/examples/applications/retrieve_rerank/README.html) for more details.

<!--- Describe your model here -->


## Usage (Sentence-Transformers)

Using this model becomes easy when you have [sentence-transformers](https://www.SBERT.net) installed:

```
pip install -U sentence-transformers
```

Then you can use the model like this:

```python
from sentence_transformers import CrossEncoder

reranker_model = CrossEncoder('DiTy/cross-encoder-russian-msmarco', max_length=512, device='cuda')

query = ["как часто нужно ходить к стоматологу?"]
documents = [
    "Минимальный обязательный срок посещения зубного врача – раз в год, но специалисты рекомендуют делать это чаще – раз в полгода, а ещё лучше – раз в квартал. При таком сроке легко отследить любые начинающиеся проблемы и исправить их сразу же.",
    "Основная причина заключается в истончении поверхностного слоя зуба — эмали, которая защищает зуб от механических, химических и температурных воздействий. Под эмалью расположен дентин, который более мягкий по своей структуре и пронизан множеством канальцев. При повреждении эмали происходит оголение дентинных канальцев. Раздражение с них начинает передаваться на нервные окончания в зубе и возникают болевые ощущения. Чаще всего дентин оголяется в придесневой области зубов, поскольку эмаль там наиболее тонкая и стирается быстрее.",
    "Стоматолог, также известный как стоматолог-хирург, является медицинским работником, который специализируется на стоматологии, отрасли медицины, специализирующейся на зубах, деснах и полости рта.",
    "Дядя Женя работает врачем стоматологом",
    "Плоды малины употребляют как свежими, так и замороженными или используют для приготовления варенья, желе, мармелада, соков, а также ягодного пюре. Малиновые вина, наливки, настойки, ликёры обладают высокими вкусовыми качествами.",
]

predict_result = reranker_model.predict([[query[0], documents[0]]])
print(predict_result)
# `array([0.88126713], dtype=float32)`

rank_result = reranker_model.rank(query[0], documents)
print(rank_result)
# `[{'corpus_id': 0, 'score': 0.88126713},
#  {'corpus_id': 2, 'score': 0.001042091},
#  {'corpus_id': 3, 'score': 0.0010417715},
#  {'corpus_id': 1, 'score': 0.0010344835},
#  {'corpus_id': 4, 'score': 0.0010244923}]`
```


## Usage (HuggingFace Transformers)
Without [sentence-transformers](https://www.SBERT.net), you can use the model like this: First, you pass your input through the transformer model, then you need to get the logits from the model.

```python
import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification

model = AutoModelForSequenceClassification.from_pretrained('DiTy/cross-encoder-russian-msmarco')
tokenizer = AutoTokenizer.from_pretrained('DiTy/cross-encoder-russian-msmarco')

features = tokenizer(["как часто нужно ходить к стоматологу?", "как часто нужно ходить к стоматологу?"], ["Минимальный обязательный срок посещения зубного врача – раз в год, но специалисты рекомендуют делать это чаще – раз в полгода, а ещё лучше – раз в квартал. При таком сроке легко отследить любые начинающиеся проблемы и исправить их сразу же.", "Дядя Женя работает врачем стоматологом"], padding=True, truncation=True, return_tensors='pt')
 
model.eval()
with torch.no_grad():
    scores = model(**features).logits
    print(scores)
# `tensor([[ 1.6871],
#        [-6.8700]])`
```