Files
bge-m3-russian-legal/BGE_M3_EXPERIMENTS_RESULTS.md
ModelHub XC 361fe56caf 初始化项目,由ModelHub XC社区提供模型
Model: Roflmax/bge-m3-russian-legal
Source: Original Platform
2026-05-14 18:00:56 +08:00

9.5 KiB
Raw Permalink Blame History

Результаты экспериментов с 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: "" (пустой)
  • 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:

Загрузка и использование

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/ - Эксперимент 1
  • models/bge-m3-exp2-no-duplicates-no-prefixes-v2/ - Эксперимент 2
  • models/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 лучших чекпоинта

Итоговые рекомендации

  1. Используйте датасет без дубликатов для обучения
  2. Включайте префиксы BGE-M3 для консистентности
  3. Мониторьте Recall@5 как основную метрику
  4. Оптимизируйте датасет перед обучением - дедупликация критична
  5. Используйте validation set для выбора лучшей модели

Статус: Все эксперименты завершены
Лучшая модель: models/bge-m3-exp3-no-duplicates-with-prefixes/final/
Загружена на HF: https://huggingface.co/Roflmax/bge-m3-russian-legal