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