Выбор и настройка Embedding-модели для RAG
Мы часто сталкиваемся с ситуацией, когда RAG-система работает, но retrieval выдает нерелевантные документы. Чаще всего проблема в embedding-модели — она не подходит под язык вашего корпуса или контекст запросов. Смена модели может поднять recall на 10–15% без изменения архитектуры. Закажите аудит вашей системы — мы подберем оптимальную модель и настроим её под ваши данные. Наши инженеры имеют 10 лет опыта в NLP и реализовали более 50 RAG-проектов для Enterprise.
Ошибка в выборе модели может стоить до 40% точности ответов. Мы гарантируем, что после настройки под ваш домен recall вырастет минимум на 10%. Свяжитесь с нами для бесплатного аудита.
Как выбрать Embedding-модель для RAG?
Embedding-модель — один из наиболее критичных компонентов RAG-системы. Качество retrieval напрямую зависит от того, насколько хорошо модель представляет тексты в векторном пространстве. Смена embedding-модели может дать больший прирост recall, чем оптимизация чанкинга или параметров поиска.
Категории embedding-моделей
Проприетарные API-модели:
-
text-embedding-3-large(OpenAI, dim=3072): лучшее качество на большинстве бенчмарков MTEB -
text-embedding-3-small(OpenAI, dim=1536): хорошее соотношение цена/качество -
embed-v3(Cohere): сильный на retrieval задачах, поддерживает input_type параметр
Открытые модели (self-hosted):
-
BAAI/bge-m3(dim=1024): многоязычный, поддерживает dense+sparse+colbert -
BAAI/bge-large-en-v1.5(dim=1024): лучший для английского -
intfloat/multilingual-e5-large(dim=1024): хорошо на русском -
nomic-ai/nomic-embed-text-v1.5(dim=768): матрёшечный (кратные размерности)
Сравнение моделей по MTEB
На задачах Retrieval (BEIR benchmark, усреднённый nDCG@10) актуальные данные с MTEB leaderboard:
| Модель | NDCG@10 (BEIR avg) | Dim | Макс. токены | Тип | Latency p99 |
|---|---|---|---|---|---|
| text-embedding-3-large | 54.9 | 3072 | 8191 | API | 200ms |
| text-embedding-3-small | 51.7 | 1536 | 8191 | API | 100ms |
| cohere embed-v3 | 55.0 | 1024 | 512 | API | 150ms |
| BAAI/bge-m3 | 54.0 | 1024 | 8192 | Open | 80ms (GPU) |
| intfloat/e5-mistral-7b | 56.9 | 4096 | 32768 | Open | 400ms (GPU) |
| nomic-embed-text-v1.5 | 53.5 | 768 | 8192 | Open | 50ms (GPU) |
Для русскоязычных задач картина иная — рекомендуем тестировать на собственном домене. Мы проводим триал на вашем корпусе и предоставляем отчёт с метриками.
Настройка Cohere Embed v3 с input_type
Cohere embed-v3 требует указания input_type — это важно для retrieval. Использование правильного input_type повышает recall на 8–15%:
import cohere co = cohere.Client(api_key="...") def embed_documents(texts: list[str]) -> list[list[float]]: """Для индексации документов""" response = co.embed( texts=texts, model="embed-multilingual-v3.0", input_type="search_document", # Для документов при индексации ) return response.embeddings def embed_query(query: str) -> list[float]: """Для поискового запроса""" response = co.embed( texts=[query], model="embed-multilingual-v3.0", input_type="search_query", # Асимметричная модель — разные типы ) return response.embeddings[0] Self-hosted BGE-M3
BGE-M3 — наиболее универсальная open-source модель: поддерживает dense, sparse (SPLADE) и ColBERT-стиль multi-vector retrieval из одной модели. Экономия на инфраструктуре — одна модель вместо трёх:
from FlagEmbedding import BGEM3FlagModel model = BGEM3FlagModel( "BAAI/bge-m3", use_fp16=True, # Экономия памяти device="cuda", ) # Dense embeddings (для стандартного ANN поиска) dense_embeddings = model.encode( texts, batch_size=32, max_length=8192, return_dense=True, return_sparse=False, return_colbert_vecs=False, )["dense_vecs"] # Sparse embeddings (для BM25-подобного поиска) sparse_embeddings = model.encode( texts, return_dense=False, return_sparse=True, )["lexical_weights"] # dict {token: weight} # Hybrid retrieval score def compute_bge_m3_score(query_dense, doc_dense, query_sparse, doc_sparse, alpha=0.5) -> float: dense_score = np.dot(query_dense, doc_dense) sparse_score = sum( query_sparse.get(token, 0) * doc_sparse.get(token, 0) for token in query_sparse ) return alpha * dense_score + (1 - alpha) * sparse_score Выбор размерности: Matryoshka Embeddings
Nomic Embed и ряд других моделей поддерживают матрёшечные embeddings — можно использовать первые N измерений без переобучения. Это снижает требования к RAM векторной БД в 2× при незначительной (2–5%) потере качества:
from openai import OpenAI client = OpenAI() # text-embedding-3-large с уменьшенной размерностью response = client.embeddings.create( model="text-embedding-3-large", input=texts, dimensions=1536, # Уменьшаем размерность ) Что влияет на качество retrieval?
Кроме выбора модели, важны: препроцессинг текстов, длина чанков, стратегия слияния результатов sparse+dense. Мы учитываем все эти факторы при настройке RAG под ваш домен.
Практический выбор embedding-модели
- Если данные конфиденциальны / on-premise: BGE-M3 или E5-mistral-7b (self-hosted).
- Если нужен лучший русский язык: тестируем BGE-M3, multilingual-e5-large и text-embedding-3-large на своём домене. Универсального победителя нет.
- Если минимальная latency: text-embedding-3-small (API) или nomic-embed-text-v1.5 (self-hosted).
- Если нужен hybrid sparse+dense без двух моделей: BGE-M3 — единственная open-source модель с нативной поддержкой обоих режимов.
Оценка на своём домене
from ragas import evaluate from ragas.metrics import context_recall, context_precision for model_name in ["text-embedding-3-small", "text-embedding-3-large"]: retriever = build_retriever(model_name) scores = evaluate(test_dataset, metrics=[context_recall, context_precision], retriever=retriever) print(f"{model_name}: recall={scores['context_recall']:.3f}, " f"precision={scores['context_precision']:.3f}") Что входит в настройку RAG под ключ
- Анализ вашего корпуса и сценариев использования
- Выбор и тестирование 2–3 embedding-моделей
- Настройка индексации (размер чанков, overlap, векторная БД)
- Интеграция с вашим бэкендом (API, gRPC)
- Документация и обучение вашей команды
- Пост-релизная поддержка 2 недели
Сроки и стоимость
- Настройка embedding-модели и индексация: 2–5 дней
- Сравнительное тестирование 2–3 моделей: 3–5 дней
- Итого: 1–2 недели
- Стоимость рассчитывается индивидуально под проект. Оценим вашу задачу за один рабочий день бесплатно.
Напишите нам, и мы подберём оптимальную модель для вашего RAG. Гарантируем повышение recall минимум на 10% по вашим метрикам.







