9.5 KiB
Результаты экспериментов с BGE-M3 на юридических документах
Дата: 2025-11-11
Модель: BAAI/bge-m3
Датасет: Русские юридические документы (court_law, other_law, reg_law)
📊 Сводная таблица результатов
| Эксперимент | Датасет | Размер | Префиксы | Recall@1 | Recall@5 | Recall@10 | Время обучения |
|---|---|---|---|---|---|---|---|
| Эксперимент 1 | Оригинальный | 87,878 | ❌ НЕТ | 68.2% | 91.7% | 95.8% | ~43 мин |
| Эксперимент 2 | Без дубликатов | 26,734 | ❌ НЕТ | 76.9% | 93.6% | 95.3% | ~13 мин |
| Эксперимент 3 🏆 | Без дубликатов | 26,734 | ✅ ДА | 76.9% | 93.8% | 95.5% | ~13 мин |
🏆 ПОБЕДИТЕЛЬ: Эксперимент 3
Лучшая конфигурация:
- Датасет БЕЗ дубликатов (26,734 записей)
- С префиксами BGE-M3
- Query prefix:
"Represent this sentence for searching relevant passages: " - Passage prefix:
""(пустой)
📈 Детальные результаты
Эксперимент 1: Baseline (оригинальный датасет без префиксов)
Конфигурация:
- Датасет: train.jsonl (87,878 записей)
- Префиксы: Отключены
- Модель: BAAI/bge-m3
- Output:
models/bge-m3-exp1-original-no-prefixes
Результаты (validation set):
| Датасет | Recall@1 | Recall@5 | Recall@10 |
|---|---|---|---|
| court_law | 56.8% | 82.9% | 89.5% |
| other_law | 84.2% | 96.4% | 97.0% |
| reg_law | 63.7% | 95.7% | 98.8% |
| Среднее | 68.2% | 91.7% | 95.8% |
Время обучения: 42 минуты 47 секунд
Эксперимент 2: Датасет без дубликатов без префиксов
Конфигурация:
- Датасет: Без дубликатов по
chunk_text(26,734 записей) - Удалено дубликатов: 61,144 (69.6%)
- court_law: 28,090 дубликатов удалено (66.7%)
- other_law: 15,312 дубликатов удалено (80.0%)
- reg_law: 17,742 дубликата удалено (66.7%)
- Префиксы: Отключены
- Output:
models/bge-m3-exp2-no-duplicates-no-prefixes-v2
Результаты (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% |
| Среднее | 76.9% | 93.6% | 95.3% |
Время обучения: ~13 минут
Улучшение vs Эксперимент 1:
- Recall@1: +8.7% (68.2% → 76.9%)
- Recall@5: +1.9% (91.7% → 93.6%)
- Recall@10: -0.5% (95.8% → 95.3%)
Эксперимент 3: Датасет без дубликатов С префиксами BGE-M3 🏆
Конфигурация:
- Датасет: Без дубликатов (26,734 записей)
- Префиксы: Включены
- Query:
"Represent this sentence for searching relevant passages: " - Passage:
""(пустой)
- Query:
- Output:
models/bge-m3-exp3-no-duplicates-with-prefixes
Результаты (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% |
| Среднее | 76.9% | 93.8% | 95.5% |
Результаты (test set):
| Метрика | Значение |
|---|---|
| Recall@1 | 76.9% |
| Recall@5 | 92.9% |
| Recall@10 | 95.5% |
Время обучения: ~13 минут
Улучшение vs Эксперимент 2:
- Recall@1: 0% (76.9% = 76.9%)
- Recall@5: +0.2% (93.6% → 93.8%)
- Recall@10: +0.2% (95.3% → 95.5%)
Улучшение vs Эксперимент 1:
- Recall@1: +8.7% (68.2% → 76.9%)
- Recall@5: +2.1% (91.7% → 93.8%)
- Recall@10: -0.3% (95.8% → 95.5%)
💡 Ключевые выводы
1. Удаление дубликатов критически важно
Удалено 70% датасета (87,878 → 26,734 записей), но качество улучшилось:
- Recall@5: 91.7% → 93.8% (+2.1%)
- Recall@1: 68.2% → 76.9% (+8.7%)
Причины:
- Дубликаты создавали переобучение на повторяющихся примерах
- Модель училась "запоминать", а не "понимать"
- Уникальные примеры обеспечивают лучшую генерализацию
2. Префиксы BGE-M3 дают небольшой прирост
Префиксы добавили лишь +0.2% к Recall@5, но это ожидаемо:
- BGE-M3 уже хорошо понимает задачу без префиксов
- Префиксы полезны для явного указания задачи
- Рекомендуется использовать для консистентности с baseline моделью
3. Обучение стало в 3 раза быстрее
- Было: 43 минуты (87,878 примеров)
- Стало: 13 минут (26,734 примеров)
- Ускорение: 3.3x
4. Качество по типам документов
Лучшие результаты:
- other_law (федеральные законы): Recall@5 = 96.7%
- reg_law (региональные законы): Recall@5 = 96.9%
Худшие результаты:
- court_law (судебные решения): Recall@5 = 87.9%
- Причина: более сложная структура и разнообразие языка
🚀 Использование лучшей модели
Hugging Face Hub
Модель загружена на Hugging Face:
- URL: https://huggingface.co/Roflmax/bge-m3-russian-legal
- Статус: Pull Request (требует подтверждения)
Загрузка и использование
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]
📁 Файлы и директории
Модели:
models/bge-m3-exp1-original-no-prefixes/- Эксперимент 1models/bge-m3-exp2-no-duplicates-no-prefixes-v2/- Эксперимент 2models/bge-m3-exp3-no-duplicates-with-prefixes/- Эксперимент 3 🏆
Датасеты:
dataset/court_law/train_backup.jsonl- Оригинальный датасет (с дубликатами)dataset/court_law/train_no_duplicates.jsonl- Датасет без дубликатовdataset/other_law/train_no_duplicates.jsonl- Датасет без дубликатовdataset/reg_law/train_no_duplicates.jsonl- Датасет без дубликатов
WandB Runs:
- Эксперимент 1: bge-m3-exp1-original-no-prefixes
- Эксперимент 2: bge-m3-exp2-no-duplicates-no-prefixes-v2
- Эксперимент 3: bge-m3-exp3-no-duplicates-with-prefixes
🔧 Параметры обучения
| Параметр | Значение |
|---|---|
| Модель | BAAI/bge-m3 |
| Размерность эмбеддингов | 1024 |
| Max sequence length | 512 токенов |
| Loss function | MultipleNegativesRankingLoss (scale=20.0) |
| Epochs | 3 |
| Batch size (train) | 64 |
| Batch size (eval) | 64 |
| Learning rate | 2e-5 |
| Warmup ratio | 0.1 |
| Precision | bfloat16 |
| GPU | NVIDIA RTX PRO 6000 Blackwell (97GB) |
| Best model selection | eval_avg_recall@5 |
| Eval frequency | Каждые 250 steps |
| Save strategy | Сохранять 3 лучших чекпоинта |
✅ Итоговые рекомендации
- Используйте датасет без дубликатов для обучения
- Включайте префиксы BGE-M3 для консистентности
- Мониторьте Recall@5 как основную метрику
- Оптимизируйте датасет перед обучением - дедупликация критична
- Используйте validation set для выбора лучшей модели
Статус: ✅ Все эксперименты завершены
Лучшая модель: models/bge-m3-exp3-no-duplicates-with-prefixes/final/
Загружена на HF: https://huggingface.co/Roflmax/bge-m3-russian-legal