Бенчмарк 7 эмбеддингов и 4 реранкеров на корпусе судебной практики

Страницы:  1

Ответить
 

Professor Seleznov


Привет, Хабр. Это мой первый пост здесь, поэтому пара слов о себе.
Я практикующий юрист, 8+ лет практики, последние годы - в производственном секторе. Веду договорную работу (поставка, подряд, услуги), сопровождаю сделки, закрываю претензионку и представляю компанию в арбитражных судах и спорах по защите прав потребителей - на стороне производителя и поставщика. К коду пришёл через вайбкодинг: захотелось автоматизировать некоторые процессы, начал ковыряться в VS Code, Trae, Cursor и Claude Code, втянулся - и теперь это параллельное хобби рядом с основной практикой.
Последние несколько месяцев пилю IP Agent - телеграм-бота, который по запросу находит релевантную судебную практику и даёт прогноз по размеру компенсации в делах об интеллектуальной собственности. Работает на RAG-пайплайне.
Когда строишь поиск по узкому домену, рано или поздно встаёт вопрос: какой эмбеддинг брать и нужен ли вообще реранкер. Готовых ответов под русскую судебную практику я не нашёл, поэтому собрал свой бенчмарк. В посте - что меряли, как меряли, что получилось и что в итоге поставил в бота.
TL;DR
  • Топ-3 эмбеддинга на этом корпусе — OpenAI text‑embedding-3-largeVoyage voyage-3 и локальная deepvk/USER2-base. Между собой статистически неотличимы.
  • USER2-base — главная находка теста. Локальная бесплатная русская модель играет в одной лиге с OpenAI и Voyage. Меняет экономику для пет‑проектов и снимает санкционные риски.
  • Эффект реранкера сильно зависит от качества эмбеддинга. На сильных эмбеддингах прирост в пределах погрешности. На слабых (Yandex, Cohere) хороший реранкер даёт +9-12 пунктов nDCG.
  • Из четырёх протестированных реранкеров рабочие — jina‑reranker‑v3 и bge‑reranker‑v2-m3. Mxbai на этом корпусе значимо ухудшает результат, mmarco на русском нейтрален.
  • В бота поставлю связку USER2-base + jina‑reranker‑v3. Если jina не пойдёт по железу — bge.
Зачем тестировал
Корпус у меня узкий: 858 актов Суда по интеллектуальным правам плюс 4 часть ГК РФ. Общие бенчмарки эмбеддингов на русском есть (ruMTEB от Сбера), но специализированного под судебную практику я не встречал. На общих задачах одна модель может побеждать, а на юридических текстах внезапно проигрывать - архитектуры разные, логика близости векторов у каждой своя.
Хотелось ответить на три вопроса:
  • Какой эмбеддинг лучше работает на этом корпусе.
  • Помогает ли вообще реранкер и какой именно.
  • Можно ли обойтись локальной связкой без коммерческих API (вопрос экономики и санкционных рисков).
Что тестировал
Эмбеддинги:
  • OpenAI text-embedding-3-large
  • Voyage voyage-3
  • Cohere embed-v4
  • e5-small (локальная, бесплатная)
  • GigaEmbeddings (Сбер)
  • Yandex Embeddings
  • deepvk/USER2-base (локальная, всё чаще мелькает в юр-ИИ сообществе)
Реранкеры:
  • cross-encoder/mmarco-mMiniLMv2-L12-H384-v1 - обучен на английском MS MARCO
  • bge-reranker-v2-m3 - мультиязычный от BAAI, 568M параметров
  • jina-reranker-v3 - листвайз-архитектура, 0.6B параметров
  • mxbai-rerank-base-v2 - на базе Qwen-2.5, 0.5B параметров
  • raw без реранкера как baseline
Пайплайн: одна база, одни настройки, менялись только эмбеддинг и реранкер. Эмбеддинг возвращает топ-30 кандидатов по косинусному сходству, реранкер пересортировывает, в финальный топ-5 уходят пять лучших уникальных дел.
API-модели тестировались в марте 2026, цены и время индексации - на эту дату.
Вопросы и разметка
30 вопросов разной сложности: от типовых (компенсация за контрафакт на маркетплейсе) до специфичных (товарные знаки, патенты, доменные споры, авторское право в соцсетях).
Шкала оценок для каждой пары «вопрос-дело»:
  • 0 — нерелевантно. Другой объект права, другой тип спора, нормы не пересекаются.
  • 1 — частично релевантно. Совпадает что‑то одно: объект, норма или тип спора.
  • 2 — точное попадание. Совпадают все ключевые элементы.
Размечал на уровне сырой выдачи. Брал топ-20 от каждой из семи моделей, объединял с дедупликацией - получился пул из 2751 пары. То есть каждое дело, которое хоть одна модель подняла достаточно высоко в raw, попало в разметку. Это важно: если размечать только то, что отдал реранкер, неразмеченные дела автоматически считаются нулями и метрики сырой выдачи систематически занижаются. Поэтому разметка идёт до реранкинга, а не после.
Разметку делал через NotebookLM: один вопрос - один блокнот - тексты всех дел, которые нашли модели - ИИ оценивает строго по документам в блокноте. 30 блокнотов с индивидуальным промтом под каждый. Подготовка была скриптовая: один скрипт извлекал текст из PDF судебных дел и раскладывал по папкам под каждый из 30 вопросов, второй парсил ответы NotebookLM и собирал итоговый CSV. Вручную я бы такое делал недели. Около 80 случайных пар проверил руками - согласие приемлемое.
Сразу про потенциальное смещение: NotebookLM - это Gemini под капотом. Теоретически разметка от Gemini может слегка благоволить эмбеддингам, обученным на близкой логике. Прямого Gemini-эмбеддинга в тесте нет, так что эффект если и есть, то размытый, но это надо иметь в виду.
Метрики
nDCG@5 — основная метрика. Учитывает не только релевантность, но и порядок: дело на 1-м месте идёт с полным весом, ниже — меньше. Нормируется на идеальный случай. Число от 0 до 1.
MRR — насколько высоко модель ставит первое полезное дело. Если первое релевантное на 1-й позиции — 1 балл, на 2-й — 0.5, на 3-й — 0.33.
В посте показываю в основном nDCG@5: для пользовательского опыта важнее качественный топ-5 в целом, а не первое попадание. MRR даёт ту же картину выводов.
Бутстрэп считал на 2000 итерациях по вопросам, парный (одни и те же вопросы для всех моделей). Сразу оговорюсь про мощность: на 30 вопросах большинство попарных сравнений между моделями физически нельзя различить статистически — выборка маленькая, доверительные интервалы широкие. Это пилотный замер, не финальная истина. Где сравнения значимы — я об этом пишу отдельно. Где нет — так и пишу, что разница в пределах погрешности.
Результаты по эмбеддингам
pic
  • Лидеры на этом корпусе - OpenAI, Voyage и USER2-base. На честной разметке тройка статистически неотличима друг от друга: разница на 30 вопросах попадает в доверительный интервал. То есть однозначного лидера на моей выборке нет, все трое в топ-группе. Топ-3 уверенно обходит Yandex и часть моделей средней группы. Остальные пары пересекаются в доверительных интервалах - утверждать разницу между ними на этой выборке нельзя.
  • USER2-base - главная находка теста. Локальная, бесплатная, русскоязычная модель от deepvk играет в одной лиге с OpenAI ($2.84 на индексацию моего корпуса) и Voyage ($0.63). Для юридического RAG на русском это меняет экономику: можно работать локально, без API, без санкционных рисков, с качеством на уровне топовых коммерческих моделей.
  • Гибрид двух эмбеддингов расширяет покрытие. Прогнал oracle-анализ: в пуле 321 «идеальное» дело (с оценкой 2). Для каждой модели посчитал, какую долю этих дел она находит в сырой выдаче топ-20. Для гибридов - топ-20 одной модели объединял с топ-20 (или топ-50) другой и смотрел совместное покрытие.
▪️ Только OpenAI: 33%
▪️ Гибрид OpenAI + USER2-base: 49%
Прирост 16 процентных пунктов. Логика простая: разные эмбеддинги по-разному «понимают» текст и поэтому находят немного разные дела. У каждой модели свои слепые пятна, объединение двух моделей с разной архитектурой их закрывает взаимно. Эффект воспроизводится у всех проверенных гибридов.
Важная оговорка: oracle-анализ меряет «попало ли нужное дело в корзину кандидатов вообще». До пользователя доходит топ-5 после ранжирования. Если ранжирование плохое - широкий гибридный пул не спасает: релевантные дела застрянут на 10-15 позициях. Чтобы по-хорошему померять эффект гибрида в боевом пайплайне, надо использовать что-то вроде Reciprocal Rank Fusion и считать nDCG, а не покрытие. Это отдельный тест, до которого пока не доехал. Так что гибрид пока скорее идея, чем готовое решение.
Результаты по реранкерам
pic
1. Не каждый реранкер подходит для русского юридического корпуса. Mxbai на моём корпусе значимо ухудшил результаты на большинстве эмбеддингов. Английский mmarco на русском ожидаемо нейтрален - прирост от него на честной разметке статистически незначим ни на одной модели, для OpenAI и Voyage Δ nDCG даже отрицательная (хотя в пределах погрешности). Mmarco обучен на английском MS MARCO без юридической специфики, и от него и не ждали чудес. Но если он у вас стоит по умолчанию (а у меня стоял) - это повод задуматься. Работают только bge и jina, и среди них jina в среднем чуть лучше.
2. Эффект реранкера зависит от качества эмбеддинга. На сильных эмбеддингах (OpenAI, Voyage, USER2-base) приросты в пределах погрешности - на 30 вопросах математически невозможно отличить от нуля. На слабых эффект ощутимый и статистически значимый:
  • Yandex (raw 0.630) → bge 0.755 (+12.5 пункта)
  • Cohere (raw 0.700) → jina 0.793 (+9.3 пункта)
Логика понятна: OpenAI настолько хорошо ранжирует юридические дела сам, что реранкеру нечего улучшать. На слабом эмбеддинге пространство для улучшения есть, и реранкер реально вытягивает результат. Это означает простую вещь: если у вас уже стоит топовый эмбеддинг, реранкер на 30 вопросах не покажет себя - надо либо набирать больше вопросов, либо сразу ставить эксперимент на слабом эмбеддинге, чтобы увидеть, на что реранкер вообще способен.
3. USER2-base + jina как локальная альтернатива OpenAI. USER2-base в raw даёт 0.773. С jina связка выходит 0.797. Для сравнения: OpenAI без реранкера - 0.809. Разница на этой выборке в пределах погрешности. Нет смысла выбирать OpenAI вместо локальной связки, особенно с учётом отсутствия API-расходов и санкционных рисков.
Время индексации
Цены на индексацию 858 дел - в таблице рейтинга эмбеддингов выше. Отдельно отмечу только время. Большинство моделей укладываются в 7-15 минут на полный корпус (от 0.5 до 1.1 секунды на дело). Выпадает только Yandex Embeddings - из-за жёстких лимитов API реальное время индексации составило около 2.5 часов вместо ожидаемых 15 минут (~11 секунд на дело). Это разовая плата за индекс, дальше на каждый запрос пользователя модель заново считает эмбеддинг вопроса - и это уже постоянные расходы. Для локальных моделей (e5-small, USER2-base) и индексация, и запросы бесплатные.
Что в итоге пошло в бота
Поставлю USER2-base, если позволят ресурсы сервера, плюс jina-reranker-v3. Если jina по железу не пойдёт - оставлю bge. Mmarco убираю, пользы от него нет.
Логика выбора простая:
  • Эмбеддинг — USER2-base. По качеству на одном уровне с OpenAI и Voyage, при этом локальный и бесплатный. Для пет‑проекта, который крутится на скромном сервере, это решает.
  • Реранкер — jina, запасной вариант bge. На сильном эмбеддинге их статистически не видно, но они и не вредят. Если потом я добавлю в индекс другой домен или поменяю эмбеддинг на что‑то послабее, реранкер будет страховать.
Гибрид двух эмбеддингов пока откладываю. Идея рабочая, но прежде чем городить два инстанса в проде, надо проверить через RRF и финальное nDCG, как ранжирование доезжает с расширенной корзиной до топ-5. Это отдельный тест.
Ограничения
  • Выборка 30 вопросов всё ещё маленькая. Большинство попарных сравнений между эмбеддингами и реранкерами остаются в доверительном шуме. На 100 вопросах картина была бы определённее.
  • Разметка через LLM (NotebookLM/Gemini) с выборочной ручной проверкой около 80 пар из 2751. Согласие моих оценок с NotebookLM приемлемое, но это не полная экспертная разметка. Возможно небольшое смещение в пользу моделей, близких по обучению к разметчику.
  • Не тестировал лексический baseline (BM25 / Elasticsearch). На узких доменах с регулярной терминологией он часто конкурирует с дешёвыми эмбеддингами и должен быть в любом честном бенчмарке. Добавлю в следующую итерацию.
  • Гибрид двух эмбеддингов оценивался через oracle-анализ - на уровне покрытия пула кандидатов, а не финального ранжирования. Корректный способ - RRF с замером nDCG@5. Это отдельный тест.
  • Только четыре реранкера. Различные дообученные на юридических данных версии остались за кадром.
  • Один корпус. 858 дел по ИП-праву. На налоговом, банкротном, корпоративном домене порядок моделей может быть другим.
  • Тестировались не все эмбеддинги. Jina, bge, nomic, многоязычный MiniLM остались за кадром.
Часть выводов подтверждена статистически, часть - наблюдения в рамках выборки 30 вопросов. Это первая версия бенчмарка, не финальная истина. Буду благодарен за критику и идеи в комментариях.-Если интересно следить за развитием бота и за подобными замерами - веду канал в телеграме Draft AI | Иван Кундиль. Там же выкладываю промежуточные находки, которые до полноценного поста не дотягивают.-Источник
 
Loading...
Error