File size: 3,708 Bytes
faccfc2
8213f08
 
 
 
 
 
 
faccfc2
8213f08
6035359
 
 
 
 
 
 
faccfc2
8213f08
 
875c568
8213f08
 
 
7a2147c
8213f08
 
 
 
 
2f3f02b
 
8213f08
 
875c568
8213f08
 
 
 
 
 
 
875c568
8213f08
 
 
 
875c568
 
 
8213f08
 
 
 
875c568
 
 
 
 
8213f08
 
875c568
 
 
 
 
 
 
 
 
 
 
 
 
8213f08
 
 
 
 
 
 
 
 
6035359
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
---
pipeline_tag: sentence-similarity
tags:
- sentence-transformers
- feature-extraction
- sentence-similarity
- transformers
language: ru
license: unlicense
widget:
- source_sentence: Кошка ловит мышку
  sentences:
  - Мышка преследуема кошкой
  - Кошка гонится за мышью
  - Кошка ловит кайф
datasets:
- inkoziev/paraphrases
---


# Детектор синонимичности фраз

Это [sentence-transformers](https://www.SBERT.net) модель, предназначенная
для определения синонимичности двух коротких текстов, преимущественно одиночных предложений длиной до 10-15 слов.
Часть обучающего датасета доступна в репозитории [inkoziev/paraphrases](https://huggingface.co/datasets/inkoziev/paraphrases).

Модель вычисляет для текста и вопроса векторы размерностью 312. Косинус угла между этими векторами
дает оценку того, насколько они близки по смыслу. В [проекте диалоговой системы](https://github.com/Koziev/chatbot) 
она используется для определения перефразировок высказыванийи и фактов.

Модель основана на [cointegrated/rubert-tiny2](https://huggingface.co/cointegrated/rubert-tiny2).
Она имеет очень небольшой размер и быстро выполняет инференс даже на CPU.


## Использование с библиотекой Sentence-Transformers

Для удобства установите [sentence-transformers](https://www.SBERT.net):

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

Чтобы определить синонимичность пар предложений, можно использовать такой код:

```
import sentence_transformers

sentences = ["Одна голова - хорошо, а две - лучше",
"пара голов имеет преимущество перед единственной",
"Потерявши голову, по волосам не плачут",]

model = sentence_transformers.SentenceTransformer('inkoziev/sbert_synonymy')
embeddings = model.encode(sentences)

s1 = sentences[0]
v1 = embeddings[0]
for i2 in range(1, 3):
    s = sentence_transformers.util.cos_sim(a=v1, b=embeddings[i2]).item()
    print('text1={} text2={} cossim={}'.format(s1, sentences[i2], s))
```

Результат будет примерно таким:

```
text1=Одна голова - хорошо, а две - лучше  text2=пара голов имеет преимущество перед единственной  cossim=0.8603419065475464
text1=Одна голова - хорошо, а две - лучше  text2=Потерявши голову, по волосам не плачут  cossim=0.013120125979185104
```

## Связанные проекты

Генеративный поэтический перефразировщик доступен в хабе hugginggace: [inkoziev/paraphraser](https://huggingface.co/inkoziev/paraphraser).
Код обучения этой модели доступен в [репозитории на гитхабе](https://github.com/Koziev/paraphraser).


## Контакты и цитирование

```
@MISC{rugpt_chitchat,
    author  = {Ilya Koziev},
    title   = {Paraphrase Detection Model},
    url     = {https://huggingface.co/inkoziev/sbert_synonymy},
    year    = 2022
}
```