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
|
|||
|
|
}
|
|||
|
|
```
|