Бенчмарк 7 эмбеддингов и 4 реранкеров на корпусе судебной практики. embeddings.. embeddings. nDCG.. embeddings. nDCG. rag.. embeddings. nDCG. rag. Reranker.. embeddings. nDCG. rag. Reranker. USER2-base.. embeddings. nDCG. rag. Reranker. USER2-base. информационный поиск.. embeddings. nDCG. rag. Reranker. USER2-base. информационный поиск. эмбеддинги.. embeddings. nDCG. rag. Reranker. USER2-base. информационный поиск. эмбеддинги. юридический ии.

Это мой первый пост здесь, поэтому пара слов о себе.

Я практикующий юрист, 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 от Сбера), но специализированного под судебную практику я не встречал. На общих задачах одна модель может побеждать, а на юридических текстах внезапно проигрывать – архитектуры разные, логика близости векторов у каждой своя.

Хотелось ответить на три вопроса:

  1. Какой эмбеддинг лучше работает на этом корпусе.

  2. Помогает ли вообще реранкер и какой именно.

  3. Можно ли обойтись локальной связкой без коммерческих 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 вопросах большинство попарных сравнений между моделями физически нельзя различить статистически — выборка маленькая, доверительные интервалы широкие. Это пилотный замер, не финальная истина. Где сравнения значимы — я об этом пишу отдельно. Где нет — так и пишу, что разница в пределах погрешности.

Результаты по эмбеддингам

Бенчмарк 7 эмбеддингов и 4 реранкеров на корпусе судебной практики - 1
  1. Лидеры на этом корпусе – OpenAI, Voyage и USER2-base. На честной разметке тройка статистически неотличима друг от друга: разница на 30 вопросах попадает в доверительный интервал. То есть однозначного лидера на моей выборке нет, все трое в топ-группе. Топ-3 уверенно обходит Yandex и часть моделей средней группы. Остальные пары пересекаются в доверительных интервалах – утверждать разницу между ними на этой выборке нельзя.

  2. USER2-base – главная находка теста. Локальная, бесплатная, русскоязычная модель от deepvk играет в одной лиге с OpenAI ($2.84 на индексацию моего корпуса) и Voyage ($0.63). Для юридического RAG на русском это меняет экономику: можно работать локально, без API, без санкционных рисков, с качеством на уровне топовых коммерческих моделей.

  3. Гибрид двух эмбеддингов расширяет покрытие. Прогнал oracle-анализ: в пуле 321 «идеальное» дело (с оценкой 2). Для каждой модели посчитал, какую долю этих дел она находит в сырой выдаче топ-20. Для гибридов – топ-20 одной модели объединял с топ-20 (или топ-50) другой и смотрел совместное покрытие.

▪️ Только OpenAI: 33%
▪️ Гибрид OpenAI + USER2-base: 49%

Прирост 16 процентных пунктов. Логика простая: разные эмбеддинги по-разному «понимают» текст и поэтому находят немного разные дела. У каждой модели свои слепые пятна, объединение двух моделей с разной архитектурой их закрывает взаимно. Эффект воспроизводится у всех проверенных гибридов.

Важная оговорка: oracle-анализ меряет «попало ли нужное дело в корзину кандидатов вообще». До пользователя доходит топ-5 после ранжирования. Если ранжирование плохое – широкий гибридный пул не спасает: релевантные дела застрянут на 10-15 позициях. Чтобы по-хорошему померять эффект гибрида в боевом пайплайне, надо использовать что-то вроде Reciprocal Rank Fusion и считать nDCG, а не покрытие. Это отдельный тест, до которого пока не доехал. Так что гибрид пока скорее идея, чем готовое решение.

Результаты по реранкерам

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

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 | Иван Кундиль. Там же выкладываю промежуточные находки, которые до полноценного поста не дотягивают.

Автор: KunDeal

Источник