Навчання рекомендаційних моделей: Two-Tower, ALS, negative sampling

Помилка random split — одна з найчастіших причин провалу рекомендаційної системи в продакшні. Ми займаємося навчанням рекомендаційних моделей, які працюють в реальних умовах, а не на перетренованих метриках. Типовий випадок: клієнт з e-commerce використовував випадковий поділ, отримав NDCG@10 = 0.65

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1440
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    997
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1264
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    712
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1002

Помилка random split — одна з найчастіших причин провалу рекомендаційної системи в продакшні. Ми займаємося навчанням рекомендаційних моделей, які працюють в реальних умовах, а не на перетренованих метриках. Типовий випадок: клієнт з e-commerce використовував випадковий поділ, отримав NDCG@10 = 0.65, але після впровадження модель показувала 0.4. Після переходу на temporal split метрики впали, зате A/B тест дав +5% до виручки. Клієнт зазначив: «Випадковий поділ давав завищені метрики — часовий split виявився єдино чесним». Наш стек: PyTorch, Hugging Face Transformers, Faiss для ANN пошуку, ONNX Runtime для інференсу. Досвід команди — понад 5 років у ML і 50+ впроваджених рекомендаційних систем в e-commerce, медіа та fintech. Використовуємо Weights & Biases для трекінгу експериментів і MLflow для управління моделями. Замовте попередній аналіз даних — ми оцінимо вашу задачу і запропонуємо оптимальне рішення.

Проблеми, які вирішуємо

Неправильна генерація негативних прикладів

Якщо брати uniform sampling з усіх товарів, модель не навчиться відрізняти популярне від релевантного. Ми використовуємо popularity-based та hard negative mining (наприклад, товари, які модель вже помилково ранжує високо). Hard negative sampling покращує Recall@20 в 1.3 рази порівняно з uniform.

Холодний старт для нових користувачів і товарів

Без контентних ознак модель видає нульові передбачення. Ми додаємо side information (категорію, текст опису, зображення) через ембендінги.

Temporal bias

Реальні сценарії — це послідовність дій. Якщо перемішати дані випадково, модель «побачить» майбутнє під час навчання. Temporal split з відкладеними за часом val/test — обов'язкова умова.

Як ми це робимо: розгорнутий кейс

Серед наших проектів — інтернет-магазин з 5M взаємодій і 200K товарів. Ми побудували Two-Tower модель з об'єднанням через HNSW індекс. Пайплайн включав:

  • передобробку логів: дедуплікація, фільтрація ботів, зважування взаємодій (покупка > перегляд);
  • negative sampling 4:1 з урахуванням популярності; часовий split: 28 днів на train, 7 на val, 7 на test;
  • Two-Tower: user tower — шар ембендінгів + Dense(256), item tower — те ж + L2 нормалізація. Loss — Weighted BCE з логарифмом позитивних ваг;
  • навчання 20 епох з early stopping за NDCG@10, використовуючи AdamW (LR=1e-3). На GPU A100 — 45 хвилин;
  • деплой через Triton Inference Server з ONNX моделлю. Latency p99 — 12 мс.

Результат: lift за NDCG@10 на 22% відносно ALS-бейзлайну, онлайн A/B тест показав +8% до додавань у кошик.

Чому важливий правильний negative sampling?

Негативні приклади задають межу прийняття рішень. Якщо всі негативні — це випадкові десяткові товари, модель легко їх відрізнить. Але на практиці потрібно розрізняти майже релевантні — наприклад, темний диван vs чорний диван. Hard negative sampling (з top-100 невзаємодіяних) дає більш robust навчання. У нас це реалізовано через кеш з ембендінгами та онлайн-вибірку.

Що дає часовий поділ?

Оцінка моделі на часовому спліті — єдиний спосіб отримати чесні метрики. Випадковий поділ може «зазирнути» в майбутнє, завищуючи результати. NDCG@10 на temporal split корелює з онлайн-результатами A/B тестів: розбіжність <15%.

Порівняння архітектур моделей

Модель Якість (NDCG@10) Час навчання (5M) Інференс latency Особливості
ALS (матрична факторизація) 0.42 30 хв (CPU) <1 мс Простий baseline, не використовує side info
Two-Tower (Dense 256) 0.53 45 хв (A100) 3–12 мс Гнучка, cold start через ознаки
BERT4Rec (трансформер) 0.58 4 год (A100) 50 мс Тільки послідовності, немає холодного старту

Порівняно з ALS, Two-Tower дає приріст в 1.2 рази за NDCG@10 при співставному часі інференсу.

Порівняння стратегій negative sampling

Стратегія Якість (Recall@20) Швидкість навчання Складність реалізації
Uniform 0.48 Висока Низька
Popularity-based 0.55 Середня Середня
Hard negative (online) 0.61 Низька (через перерахунок ембендінгів) Висока

На практиці комбінуємо popularity-based та hard negatives: 80% популярних, 20% хард-негативів. Це дає баланс якості та швидкості.

Процес роботи

  1. Аналітика: вивчаємо логи взаємодій, виявляємо вузькі місця (sparsity, cold start, imbalance).
  2. Проектування: вибираємо архітектуру, функцію втрат, стратегію negative sampling.
  3. Реалізація: пишемо pipeline на PyTorch + Hugging Face, інтегруємо з вашою системою логування.
  4. Тестування: offline метрики (NDCG, recall@k) + онлайн A/B тест на 2-4 тижні.
  5. Деплой: контейнеризація, моніторинг (дрейф даних, latency), документація.

Терміни та вартість

Терміни: від 2 тижнів (baseline + доопрацювання) до 2 місяців (full pipeline з кастомною архітектурою). Вартість обговорюється індивідуально після аналізу даних. Наші клієнти відзначають економію на інфраструктурі до 40% і зниження витрат на підтримку до 30% завдяки оптимізації пайплайну.

Що входить в роботу

  • Підготовлений датасет для повторного навчання
  • Baseline (ALS або Two-Tower) зі звітом за метриками
  • Навчена фінальна модель (PyTorch/ONNX)
  • Документація по відтворенню pipeline
  • Код пайплайнів (препроцесинг, навчання, інференс)
  • Методичка по донавчанню на нових даних
  • Консультація по інструментам NDCG та Temporal Split

Отримайте консультацію спеціаліста — ми обговоримо ваш проект і запропонуємо оптимальне рішення.