108 lines
3.5 KiB
Markdown
108 lines
3.5 KiB
Markdown
---
|
||
language:
|
||
- ru
|
||
license: apache-2.0
|
||
tags:
|
||
- sentence-transformers
|
||
- feature-extraction
|
||
- sentence-similarity
|
||
- legal
|
||
- russian
|
||
- bge-m3
|
||
pipeline_tag: sentence-similarity
|
||
library_name: sentence-transformers
|
||
base_model: BAAI/bge-m3
|
||
---
|
||
|
||
# BGE-M3 Russian Legal Documents
|
||
|
||
Это модель для получения эмбеддингов русских юридических документов, дообученная на датасете из трех категорий: судебные решения, федеральные законы и региональные законы.
|
||
|
||
## Модель
|
||
|
||
- **Базовая модель**: BAAI/bge-m3
|
||
- **Размерность эмбеддингов**: 1024
|
||
- **Max sequence length**: 512 токенов
|
||
- **Язык**: Русский
|
||
- **Задача**: Semantic search на юридических документах
|
||
|
||
## Метрики качества
|
||
|
||
### Результаты на тестовой выборке
|
||
|
||
| Метрика | Значение |
|
||
|---------|----------|
|
||
| **Recall@1** | 76.9% |
|
||
| **Recall@5** | 92.9% |
|
||
| **Recall@10** | 95.5% |
|
||
|
||
### Результаты по типам документов (validation set)
|
||
|
||
| Датасет | Recall@1 | Recall@5 | Recall@10 |
|
||
|---------|----------|----------|-----------|
|
||
| **court_law** (судебные решения) | 67.5% | 87.9% | 92.6% |
|
||
| **other_law** (федеральные законы) | 85.1% | 96.7% | 97.4% |
|
||
| **reg_law** (региональные законы) | 75.6% | 96.9% | 98.8% |
|
||
|
||
## Датасет для обучения
|
||
|
||
- **Размер**: 26,734 уникальных пар (query, document)
|
||
- **Дедупликация**: Да (70% удалено по chunk_text)
|
||
- **Категории**:
|
||
- court_law: 14,046 примеров
|
||
- other_law: 3,823 примеров
|
||
- reg_law: 8,865 примеров
|
||
|
||
## Использование
|
||
|
||
### Установка
|
||
|
||
```bash
|
||
pip install sentence-transformers
|
||
```
|
||
|
||
### Получение эмбеддингов
|
||
|
||
**ВАЖНО**: Модель обучена с префиксами BGE-M3. Используйте их при инференсе!
|
||
|
||
```python
|
||
from sentence_transformers import SentenceTransformer
|
||
|
||
# Загрузка модели
|
||
model = SentenceTransformer("Roflmax/bge-m3-russian-legal")
|
||
|
||
# Для запросов используйте префикс
|
||
query = "Represent this sentence for searching relevant passages: Какое наказание за управление в состоянии опьянения?"
|
||
query_embedding = model.encode(query)
|
||
|
||
# Для документов префикс пустой (просто текст)
|
||
documents = [
|
||
"Статья 264 УК РФ. Нарушение правил дорожного движения...",
|
||
"КоАП РФ статья 12.8. Управление транспортным средством..."
|
||
]
|
||
doc_embeddings = model.encode(documents)
|
||
|
||
# Поиск похожих документов
|
||
from sklearn.metrics.pairwise import cosine_similarity
|
||
similarities = cosine_similarity([query_embedding], doc_embeddings)[0]
|
||
|
||
# Топ-5 результатов
|
||
top_indices = similarities.argsort()[-5:][::-1]
|
||
for idx in top_indices:
|
||
print(f"Document {idx}: similarity={similarities[idx]:.4f}")
|
||
```
|
||
|
||
## Параметры обучения
|
||
|
||
- **Loss function**: MultipleNegativesRankingLoss (scale=20.0)
|
||
- **Epochs**: 3
|
||
- **Batch size**: 64
|
||
- **Learning rate**: 2e-5
|
||
- **Warmup ratio**: 0.1
|
||
- **Precision**: bfloat16
|
||
- **Best model selection**: eval_avg_recall@5
|
||
|
||
## Лицензия
|
||
|
||
Apache 2.0
|