Поиск идеального матча: тестируем локальные Cross-Encoder модели против NVIDIA Reranker в HR-домене
Семантический поиск по резюме и вакансиям давно стал стандартом в HRTech. Обычно это работает по двухкупольной схеме (Bi-encoders): мы быстро кодируем тексты в векторные представления (эмбеддинги) и ищем кандидатов по косинусному сходству.
Но косинусное сходство векторов улавливает лишь общие темы и ключевые слова. Для точного сопоставления опыта кандидата требованиям работодателя нужен второй этап — переранжирование (Reranking) с помощью тяжелых Cross-Encoder моделей.
В этом материале мы расскажем о нашем практическом эксперименте: как мы развернули инфраструктуру на удаленном сервере и протестировали несколько популярных кросс-энкодеров на реальных данных сопоставления вакансий и кандидатов против облачного решения NVIDIA Reranker.
Что и как мы сравнивали
Для проведения честного бенчмарка мы выгрузили из рабочей базы данных 95 предложений (Offers), по которым у нас уже были накоплены:
-
matched— реальные эталонные оценки релевантности кандидата вакансии (наш ground truth). -
matchedBatch— оценки, выставленные облачной моделью NVIDIA Reranker (rerank-qa-mistral-4b).
Выборка была сбалансирована: 50% предложений имели высокие оценки соответствия (≥ 0.7), и 50% — низкие.
Метрики качества
Для оценки качества работы моделей использовались две классические статистические метрики:
-
Корреляция Спирмена (Spearman's Rho) — ключевая метрика для поиска и ранжирования. Она оценивает монотонность взаимосвязи (насколько хорошо модель сохраняет правильный относительный порядок кандидатов в выдаче).
-
Корреляция Пирсона (Pearson's r) — оценивает линейную зависимость между скором модели и эталоном.
Участники тестирования
Мы выбрали 5 популярных моделей для сравнения:
-
WpythonW/RUbert-tiny_custom_cross-encoder— ультра-легковесный отечественный кросс-энкодер на базе RuBERT-tiny. -
DiTy/cross-encoder-russian-msmarco— классический русскоязычный реранкер на базе RuBERT-base. -
BAAI/bge-reranker-base— популярный азиатский мультипликативный реранкер среднего размера. -
BAAI/bge-reranker-large— тяжелая версия BGE для высокоточного ранжирования. -
s-nlp/ruRoberta-large-paraphrase-v1— кросс-энкодер от SberDevices для оценки парафраз.
Результаты бенчмарка
Вот какие цифры мы получили по итогам запусков на тестовой выборке:
| Модель | Spearman (vs True Matched) | Pearson (vs True Matched) | Spearman (vs Nvidia) | Pearson (vs Nvidia) | Статус / Примечание |
|---|---|---|---|---|---|
| Nvidia (rerank-qa-mistral-4b) | 0.3505 | 0.2519 | 1.0000 | 1.0000 | Победитель (Baseline) |
WpythonW/RUbert-tiny_custom_cross-encoder | 0.2561 | 0.0242 | -0.0559 | -0.1393 | Лучшая среди локальных по ранжированию |
BAAI/bge-reranker-large | 0.1051 | 0.3183 | 0.0729 | 0.0717 | Высокая линейная точность |
BAAI/bge-reranker-base | 0.0394 | 0.1248 | -0.0711 | -0.0923 | Слабая корреляция |
DiTy/cross-encoder-russian-msmarco | — | — | — | — | Ошибка: Нет ONNX версии в репозитории |
s-nlp/ruRoberta-large-paraphrase-v1 | — | — | — | — | Ошибка: Не поддерживается TEI как реранкер |
Главные инсайды и грабли
1. Облачный гигант по-прежнему впереди
Модель Nvidia Reranker на базе архитектуры Mistral показала наилучшую ранговую корреляцию Спирмена (0.3505). Она точнее всего распределяет кандидатов сверху вниз, отправляя неподходящих в подвал выдачи.
2. Феномен RUbert-tiny
Малыш RUbert-tiny_custom_cross-encoder приятно удивил. При минимальном размере и времени инференса (около 230 мс на пару на CPU) он выдал корреляцию Спирмена 0.2561.
Однако обратите внимание на его корреляцию Пирсона (0.0242). Это значит, что модель отлично справляется с бинарным разделением ("хороший кандидат" / "плохой кандидат"), но абсолютно не умеет выстраивать плавную и линейную шкалу оценок.
3. Нюансы Hugging Face TEI на CPU
Если вы решите развернуть TEI на процессорах (CPU) без использования видеокарт, вас ждут два ограничения:
-
Требование ONNX формата: Веб-сервер TEI в CPU-режиме требует наличия предобученных ONNX-файлов (
model.onnx) прямо в репозитории модели на Hugging Face. Именно поэтому упала модельDiTy— у неё в репозитории были только PyTorch веса, и TEI не смог их инициализировать. -
Специфика архитектуры: Модель
s-nlp/ruRoberta-large-paraphrase-v1упала с ошибкойmodel is not a re-ranker model. TEI строго проверяет конфигурационные файлы (config.json) и ожидает увидеть стандартную структуру sequence classification с одним выходным лейблом.
Резюме
Если вам нужна максимальная точность ранжирования "из коробки" и бюджет позволяет — облачный Nvidia Reranker остается лучшим выбором.
Если же вы строите независимый и экономичный контур на собственных CPU-серверах:
- Для быстрого отсева мусора на первом этапе идеально подойдет компактный RUbert-tiny.
- Для более тонкой оценки и построения скоринговых карт стоит смотреть в сторону BAAI/bge-reranker-large, предварительно прогрев кэш его ONNX-весов.