84 lines
3.6 KiB
Markdown
84 lines
3.6 KiB
Markdown
---
|
||
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
|
||
}
|
||
``` |