Когда рецепт дороже самого блюда
Давно не было такого ажиотажа вокруг реранкеров. В мае 2026 года команда исследователей (без шума, без пиара) выкатила Ettin Reranker Family — шесть моделей, которые переписали таблицу лидеров MTEB Retrieval. И главное: под капотом не просто веса, а полностью открытая рецептура обучения. Данные, код, конфиги, лосс-функции — всё выложено на GitHub. Никаких «магия, не трогать».
Для тех, кто следит за темой — это не очередной «сделайте реранкер на BERT и назовите новым SOTA». Это настоящий прорыв по двум фронтам: качество ранжирования и воспроизводимость.
Что под капотом? ModernBERT + дистилляция + трюк с данными
Основа Ettin — архитектура CrossEncoder на базе ModernBERT (all-ModernBERT-v2). Разработчики взяли самую свежую версию encoder-only модели от Answer.AI и Lightning AI, которая уже показала себя в задачах классификации, и адаптировали её для реранкинга. Если коротко: ModernBERT в 2-3 раза быстрее vanilla BERT на той же задаче, при этом выдаёт более качественные представления.
Но главная фишка Ettin — открытый рецепт обучения. Команда использовала:
- Аугментированный датасет из 10 миллионов пар (запрос-документ) на основе MS MARCO, FiQA, NQ и синтетических hard negatives, сгенерированных LLaMA-4.
- Дистилляцию с ансамбля из трёх «учителей» (включая собственный Ettin-Large в качестве teacher).
- Новый loss — ListMLE++, который лучше обычного CrossEntropy работает при ранжировании списков.
Ettin расшифровывается как «Encoded Text Transformer with Improved Negative-weighted loss». Никакой мифологии.
Шесть голов гидры: обзор семейства
Семейство включает шесть моделей разного размера и специализации:
| Модель | Параметров | MTEB Retrieval (nDCG@10) | Скорость (док/сек, A10G) |
|---|---|---|---|
| Ettin-Tiny | 25M | 52.3 | 820 |
| Ettin-Small | 55M | 56.1 | 480 |
| Ettin-Base | 125M | 60.4 | 230 |
| Ettin-Large | 355M | 63.8 | 95 |
| Ettin-Base (int8) | 125M | 59.8 | 510 |
| Ettin-Large (int8) | 355M | 63.1 | 210 |
Цифры по MTEB — среднее по 6 датасетам (Trec-Covid, NFCorpus, NQ, HotpotQA, FiQA, ArguAna). Ettin-Large на 1.2 пункта обходит лучший закрытый реранкер Cohere Rerank 3.5, а Ettin-Base сравним с проприетарным Jina Reranker v2.
Сравнение с альтернативами: ультиматум проприетарщикам
Давайте честно: реранкеры Cohere и Jina — чёрные ящики. Вы не знаете, на каких данных они обучены, нет гарантии, что завтра цена не вырастет в три раза. BGE-Reranker (BAAI) — open-source, но он застрял на уровне BERT-large 2024 года и не тянет современные списки из 100+ документов.
Ettin кладёт их всех на лопатки:
- vs Cohere Rerank 3.5 — Ettin-Large быстрее на 30% (за счёт ModernBERT) и дешевле (можно запустить локально). Единственный минус: нет встроенной поддержки многоязычности, но команда обещает в июне 2026.
- vs BGE-Reranker-v2 — Ettin-Base превосходит BGE-Reranker-Large на 4% MTEB, при этом занимает в 2 раза меньше памяти.
- vs Jina Reranker v2 (proprietary) — Ettin-Large на том же уровне качества, но вы контролируете инфраструктуру.
Но есть нюанс: Ettin пока плохо справляется с очень длинными документами (>2048 токенов). ModernBERT поддерживает 8192, но обучение шло на отрезках до 1024 токенов. Если у вас юридические контракты на 10 страниц — придётся чанковать или ждать обновления.
Тем, кто выбирает реранкер для RAG, советую присмотреться к нашему разбору Cross-Encoders — там объясняется, почему качественный реранкер важнее эмбеддинга.
Интеграция с Sentence Transformers: одна строка кода
На момент релиза модели уже доступны в Hugging Face Transformers и в библиотеке Sentence Transformers v5.5.0. Последняя версия добавила нативную поддержку ModernBERT и новый класс CrossEncoderReranker, который автоматически подгружает нужные веса.
Вот пример, как запустить реранкинг за 30 секунд:
from sentence_transformers import CrossEncoder
model = CrossEncoder("ettin-ai/Ettin-Large")
pairs = [
("Как установить Python на Mac?", "Установка Python на macOS через brew"),
("Как установить Python на Mac?", "Python 3.12 вышел в октябре, скачать с python.org"),
("Как установить Python на Mac?", "Лучший дистрибутив для Data Science - Anaconda")
]
scores = model.predict(pairs)
# [0.87, 0.45, 0.23]
Для пакетной обработки используйте model.predict(pairs, batch_size=64, show_progress_bar=True). На A10G Ettin-Large обрабатывает ~200 пар в секунду.
Как не надо делать реранкинг, если хотите рекордов
Первая ошибка — не фильтровать запросы. Ettin, как и любой CrossEncoder, медленнее биэнкодера. Не стоит скармливать ему все 10 000 документов. Оптимальный пайплайн:
- Быстрый биэнкодер (например, GTR-t5-large) отсеивает до топ-200.
- Ettin реранкит эти 200 с максимальным качеством.
Вторая ошибка — игнорировать квантование. int8-версии Ettin теряют менее 1% качества, но ускоряются в 2-3 раза. Используйте их на CPU.
Третья ошибка — не использовать аугментацию данных при дообучении. Если у вас специфическая доменная область (медицина, юриспруденция), возьмите рецепт Ettin: Zero-Shot Transferable Adapter как раз об этом — как дообучить модель без потери общих знаний.
Кому подойдёт Ettin?
- Командам, строящим RAG в продакшн — Ettin даёт 5-10% прироста recall@5 по сравнению с BGE и при этом полностью под вашим контролем. Для продакшн-нагрузки берите Ettin-Base int8.
- Исследователям реранкинга — открытая рецептура позволяет экспериментировать с loss, данными и архитектурой. При этом можно загрузить готовые веса и не тратить GPU-часы.
- Стартапам с ограниченным бюджетом — Ettin-Tiny на CPU обрабатывает 1000 документов за 2 секунды. Для MVP — идеально.
- Тем, кто бесится от цен Cohere — это ваша альтернатива. Бесплатно, открыто, без rate limit.
Тем, кто думает, что реранкеры не нужны — рекомендую прочитать сводку по реранкерам в RAG. Спойлер: без реранкера теряете до 30% качества ответа.
Смотрим в будущее: что дальше?
Команда Ettin обещает многоязычные версии к концу июня 2026, а также вариант для длинных контекстов (на базе ModernBERT-8192). Уже сейчас модели лежат на HuggingFace, рецепт обучения — в открытом GitHub-репозитории. Если вы строите поисковую систему или RAG-агента, попробуйте Ettin. Хотя бы ради того, чтобы понять, насколько ваш текущий пайплайн плох.