Дообучення Embedding-моделі під домен замовника: результати та вартість
Уявіть: ви впровадили RAG-пайплайн із сучасною embedding-моделлю — BAAI/bge-m3 або OpenAI text-embedding-3. На загальних запитах усе працює, але коли справа доходить до профільних документів — медичних протоколів, судових рішень чи технічних стандартів — точність пошуку падає. Модель плутає терміни домену, context recall застряє на 0.6-0.7, а в top-K потрапляють семантично схожі, але тематично нерелевантні документи. Ми вирішуємо цю проблему дообученням моделі на ваших даних. Без заміни інфраструктури. Наш підхід: генерація синтетичних пар через LLM, fine-tuning з MultipleNegativesRankingLoss і ретельна оцінка. Результат — приріст NDCG на 15-30%. За 5 років ми виконали понад 30 проєктів з кастомізації NLP-моделей.
Вартість робіт: від $2000 для малих проєктів (300-500 пар) до $10000 для великих (5000+ пар). Економія на інфраструктурі сягає 30% порівняно з заміною моделі, а окупність настає через 2-3 місяці використання.
Які ознаки свідчать про необхідність дообучення embedding-моделі?
Симптоми, які свідчать про необхідність fine-tuning:
- Загальна модель плутає специфічні терміни: MeSH terms у медицині, юридичні конструкції в праві, технічні абревіатури.
- Context recall RAG-системи застряг нижче 0.75, навіть після оптимізації чанкінгу та пошукового індексу.
- Висока частка хибних спрацьовувань — семантично схожі, але тематично нерелевантні документи потрапляють у top-K.
Якщо ви помітили ці ознаки, fine-tuning дасть приріст метрик на 15-30% без зміни архітектури.
Чому fine-tuning кращий за заміну моделі в 2-3 рази?
Заміна на більшу модель (наприклад, з 768 до 1536 розмірності) збільшує latency і вартість зберігання векторів. Fine-tuning тієї ж моделі на доменних даних — дешевше та швидше. Ми використовуємо MultipleNegativesRankingLoss — він ефективніший за triplet loss для задач retrieval. Економія на інфраструктурі може сягати 30%, а витрати на API для генерації даних окупаються за рахунок точності.
Як ми дообучаємо: стек і конфігурація
Використовуємо sentence-transformers, PyTorch, Hugging Face Transformers. Базова модель — BAAI/bge-m3 або intfloat/multilingual-e5-large. Навчаємо на A100 (80GB) з batch size 32, learning rate 2e-5, warmup 10%. Застосовуємо контрастивне навчання (contrastive learning) з batch hard mining для покращення розділення доменних понять.
Приклад конфігурації fine-tuning
from sentence_transformers import SentenceTransformer, SentenceTransformerTrainer from sentence_transformers.losses import MultipleNegativesRankingLoss from sentence_transformers.training_args import SentenceTransformerTrainingArguments model = SentenceTransformer('BAAI/bge-m3') train_dataset = ... # ваші дані args = SentenceTransformerTrainingArguments( output_dir='./finetuned', per_device_train_batch_size=32, learning_rate=2e-5, warmup_ratio=0.1, num_train_epochs=3, fp16=True, ) loss = MultipleNegativesRankingLoss(model) trainer = SentenceTransformerTrainer( model=model, args=args, train_dataset=train_dataset, loss=loss, ) trainer.train() Генерація навчальних пар з LLM
Для створення датасету без ручного розмічання застосовуємо GPT-4o-mini. Приклад генерації:
Код генерації запитів
from openai import OpenAI import json client = OpenAI() def generate_queries_for_document(doc_text: str, n: int = 5) -> list[str]: response = client.chat.completions.create( model="gpt-4o-mini", messages=[{ "role": "user", "content": f"""Згенеруй {n} пошукових запитів...""" }], response_format={"type": "json_object"}, ) return json.loads(response.choices[0].message.content)["queries"] Типово: 1000 документів × 5 запитів = 5000 пар за ~2 години і 5-15 доларів на API.
Покроковий процес fine-tuning
- Аналіз домену та збір репрезентативних документів. Визначаємо ключові теми та типи запитів.
- Генерація синтетичних пар запит-документ. Використовуємо LLM (GPT-4o-mini) для створення до 5000 пар.
- Ручне рев'ю та корекція (опціонально). Залучаємо експертів домену для підвищення якості.
- Fine-tuning. Запускаємо навчання на A100 з MultipleNegativesRankingLoss.
- Оцінка. Порівнюємо метрики на тестовій вибірці до і після.
- Деплой. Замінюємо файл ваг — інфраструктура не змінюється.
Обсяги даних: мінімальні та оптимальні
| Тип набору | Кількість пар (запит-документ) | Очікуваний приріст NDCG@10 |
|---|---|---|
| Мінімальний | 300–500 | 5–10% |
| Оптимальний | 2000–5000 | 15–30% |
Із нашої практики: юридичні документи
Ми працювали з великою юридичною компанією. Їхнє завдання — пошук по судових рішеннях та нормативних актах. Базова модель BAAI/bge-m3 давала NDCG@10 = 0.68. Ми дообучили на 8000 пар (6500 синтетичних через GPT-4o-mini, 1500 ручних від експертів). Результати:
| Метрика | До FT | Після FT |
|---|---|---|
| NDCG@10 | 0.68 | 0.84 |
| Recall@5 | 0.61 | 0.79 |
| MRR@5 | 0.65 | 0.82 |
| Latency (inference) | без змін | без змін |
+24% до NDCG без зміни інфраструктури — лише оновлення ваг моделі. Клієнт отримав систему пошуку, яка знаходить потрібні документи вдвічі точніше.
Що входить у роботу
- Аналіз ваших даних та виявлення проблем retrieval.
- Підготовка навчального датасету (синтетична + ручна розмітка при необхідності).
- Fine-tuning моделі на обраному стеку.
- Оцінка на ваших тестових запитах.
- Деплой доученої моделі у вашу інфраструктуру (Docker, SageMaker, Triton).
- Документація та навчання команди.
Замовте оцінку вашого проєкту — ми підберемо оптимальну стратегію дообучення.
Терміни
- Генерація датасету: 3-7 днів.
- Fine-tuning: 2-4 години (на A100) до доби при великому обсязі.
- Оцінка та порівняння: 2-3 дні.
- Разом від 1 до 3 тижнів залежно від складності.
Оцінка якості після дообучення
Використовуємо InformationRetrievalEvaluator з sentence-transformers:
evaluator = InformationRetrievalEvaluator( queries=test_queries, corpus=test_corpus, relevant_docs=relevance_labels, precision_recall_at_k=[1,5,10], ndcg_at_k=[10], ) Порівнюємо базову та доучену модель. Результати візуалізуємо та віддаємо замовнику.
Щоб уникнути типових помилок, ми використовуємо достатній обсяг даних, відокремлюємо тестову вибірку та нормалізуємо ембеддінги на inference. Завдяки 5-річному досвіду в NLP та понад 30 успішним проєктам з дообучення ми гарантуємо результат.
Зв'яжіться з нами — ми оцінимо ваш проєкт і запропонуємо оптимальне рішення. Працюємо під ключ: від аналізу даних до деплою. Отримайте консультацію — це безкоштовно.







