Вибір та налаштування 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% за вашими метриками.







