Как выбрать модель эмбеддингов для поиска и RAG
Практика3 минРедакция Innovialabs
Коротко
Выбирайте модель эмбеддингов не по общему рейтингу, а по результатам на своих документах и вопросах: соберите небольшой тестовый набор, прогоните 2–4 кандидата и сравните, как часто нужный фрагмент попадает в топ выдачи.
Главное правило
Модель эмбеддингов превращает текст в вектор, и от неё зависит, найдёт ли поиск нужный фрагмент. Публичные рейтинги полезны, чтобы составить короткий список, но итоговый выбор делается на ваших данных: ваших языках, терминах и формулировках вопросов.
Если сотрудники и клиенты пишут на русском и узбекском, а документы частично на английском, это нужно проверять отдельно — общий балл модели об этом ничего не скажет.
Критерии выбора
Мультиязычность
- Для русского выбор широкий: большинство мультиязычных моделей с ним справляются.
- Узбекский — язык с меньшим объёмом обучающих данных. Качество у разных моделей заметно отличается, особенно на латинице с апострофами (o‘, g‘) и при смешении латиницы и кириллицы.
- Важен кросс-языковой поиск: вопрос на узбекском должен находить ответ в русском документе, если такая задача есть.
Размерность вектора
Размерность влияет на объём индекса, память и скорость поиска. Больше — не всегда лучше. Некоторые модели позволяют укорачивать вектор с умеренной потерей качества — это удобно для больших индексов.
Максимальная длина входа
Если чанки длиннее лимита модели, текст обрезается молча. Сверьте размер чанков с лимитом.
Стоимость и хостинг
| Вариант | Плюсы | Минусы |
|---|---|---|
| API-модель | Быстрый старт, не нужно железо | Данные уходят провайдеру, оплата за объём, зависимость от сервиса |
| Открытая модель на своём сервере | Данные остаются у вас, нет платы за запрос | Нужны сервер (часто с GPU), настройка и поддержка |
Учитывайте не только индексацию, но и каждый пользовательский запрос — его тоже нужно векторизовать.
Асимметричный поиск
Многие модели ожидают разные префиксы или режимы для запроса и документа. Если их не использовать, качество падает. Читайте карточку модели.
Как сделать бенчмарк на своих данных
- Соберите набор: 50–100 реальных вопросов и для каждого — правильный фрагмент или документ. Включите вопросы на всех языках пользователей.
- Зафиксируйте разбиение: одинаковые чанки для всех моделей, иначе сравнение нечестное.
- Проиндексируйте документы каждой моделью-кандидатом.
- Посчитайте метрики:
- Recall@k — доля вопросов, где правильный фрагмент оказался в топ-k;
- MRR — насколько высоко в выдаче стоит правильный фрагмент.
- Разбейте результаты по языкам — модель может быть сильной на русском и слабой на узбекском.
- Посмотрите глазами провалы: часто там видна системная проблема, например термины или аббревиатуры.
Минимальный расчёт Recall@k:
def recall_at_k(results, gold, k=5):
hits = sum(1 for q, ids in results.items() if gold[q] in ids[:k])
return hits / len(results)
Что ещё улучшает поиск, кроме модели
- Гибридный поиск с полнотекстовым индексом — для артикулов, номеров и редких терминов.
- Реранкер поверх top-k кандидатов.
- Обогащение чанков заголовками разделов.
Иногда эти шаги дают больше, чем смена модели.
Частые ошибки
- Выбор по рейтингу без проверки на своих языках.
- Смешивание векторов разных моделей в одном индексе — они несовместимы.
- Игнорирование префиксов запроса и документа.
- Тест только на «удобных» вопросах, написанных разработчиками.