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