Головна▸Статті▸Рекомендації та пошук

Learning to Rank

Продакшн-системи learning to rank для пошуку - pairwise та listwise функції втрат, feature engineering для ранжування та онлайн-оцінка.

mysimulator teamОновлено 2026-01≈ 5 хв читання▶ Open the simulation

Learning to Rank (LTR) використовує машинне навчання для впорядкування результатів пошуку за релевантністю. На відміну від класифікації чи регресії, LTR оптимізує порядок елементів безпосередньо. Це основа пошукових систем, рекомендаційних систем та будь-якого застосування, де показ найкращих елементів першими має значення.

Де це використовується

LTR необхідний всюди, де порядок результатів впливає на досвід користувача:

Продукти: Elasticsearch LTR, Solr LTR, TensorFlow Ranking, XGBoost rankers.

Типові дані

Аспект Типові значення
Запитів на день 10K-1B
Кандидатів на запит 100-10,000
Фіч на елемент 50-500
Мітки релевантності Бінарні, градації (0-4), або клік-дані
Розмір тренувального набору 100K-100M пар запит-елемент

Джерела даних: - Логи запитів з кліками та конверсіями - Людські оцінки релевантності - Implicit feedback (час на сторінці, скроли) - Фічі елементів (текст, категорії, популярність) - Фічі запитів (терми, інтент, контекст)

Що ви робите на практиці

  1. Визначте успіх - Що робить ранжування хорошим? CTR? Конверсії?
  2. Зберіть тренувальні дані - Клік-логи, людські мітки, або обидва
  3. Згенеруйте кандидатів - Початковий ретривал (BM25, embedding search)
  4. Витягніть фічі - Query-item, query-only, item-only фічі
  5. Оберіть підхід - Pointwise, pairwise, або listwise
  6. Натренуйте ранкер - Оптимізуйте метрику ранжування
  7. Оцініть offline - NDCG, MAP, MRR на held-out даних
  8. A/B тест online - Порівняйте з бейзлайном на реальному трафіку
  9. Моніторте та ітеруйте - Відстежуйте метрики, оновлюйте моделі

Спочатку бейзлайн

Почніть з BM25 або простого скорінгу перед ML ранжуванням:

# BM25 бейзлайн
from rank_bm25 import BM25Okapi

tokenized_docs = [doc.split() for doc in documents]
bm25 = BM25Okapi(tokenized_docs)
scores = bm25.get_scores(query.split())
ranked_docs = sorted(zip(documents, scores), key=lambda x: -x[1])

Чому спочатку бейзлайн: - Встановлює floor продуктивності - Швидко реалізувати - Часто напрочуд конкурентний - Допомагає зрозуміти де ML допомагає найбільше

Переходьте до ML ранжування коли обмеження бейзлайну очевидні (персоналізація, складна релевантність).

Підходи до ранжування

Підхід Тип Loss Плюси Мінуси
Pointwise Регресія/класифікація релевантності Простий, швидкий Ігнорує структуру списку
Pairwise Порівнює пари (який кращий?) Природний для кліків Не оптимізує метрику списку
Listwise Оптимізує метрику рівня списку Найкраща відповідність метриці Складний, повільніший

Поширені моделі:

Модель Тип Примітки
LambdaMART Pairwise/listwise Індустріальний стандарт, gradient boosting
LambdaRank Pairwise На основі нейронних мереж
ListNet Listwise Розподіл ймовірностей над перестановками
RankNet Pairwise Нейронне pairwise порівняння
BERT-based Різні Cross-encoder для реранкінгу

Приклад LambdaMART з LightGBM:

import lightgbm as lgb

train_data = lgb.Dataset(
    X_train, y_train,
    group=query_groups,  # Кількість елементів на запит
)

params = {
    'objective': 'lambdarank',
    'metric': 'ndcg',
    'ndcg_eval_at': [5, 10],
    'num_leaves': 31,
    'learning_rate': 0.05
}

model = lgb.train(params, train_data, num_boost_round=100)

Feature Engineering

Фічі ранжування поділяються на три категорії:

Категорія Приклади
Query фічі Довжина запиту, інтент запиту, частота запиту
Item фічі Популярність, новизна, категорія, ціна
Query-item фічі BM25 score, embedding similarity, історія кліків

Поширені фічі: - Text match scores (BM25, TF-IDF) - Семантична схожість (embedding dot product) - Сигнали популярності (перегляди, кліки, покупки) - Свіжість (вік контенту) - Сигнали якості (рейтинги, відгуки) - Персоналізація (історія користувача з елементом/категорією) - Фічі position bias (для дебіасінгу)

Поради з feature engineering: - Комбінуйте текстові та behavioral фічі - Включайте position-aware фічі якщо використовуєте клік-дані - Log-трансформуйте count фічі - Створюйте query-specific агрегати (avg price clicked)

Оцінка та метрики

Метрика Що вимірює Діапазон
NDCG@k Якість ранжування з градаційною релевантністю 0-1
MAP Precision на кожному релевантному елементі 0-1
MRR Позиція першого релевантного результату 0-1
Precision@k Частка релевантних у топ k 0-1
Recall@k Частка релевантних елементів у топ k 0-1

NDCG (Normalized Discounted Cumulative Gain):

DCG@k = Σ (2^rel_i - 1) / log2(i + 1)  для i в 1..k
NDCG@k = DCG@k / IDCG@k  (де IDCG - ідеальний DCG)

Offline vs online оцінка: - Offline: Тест на held-out розмічених даних - Online: A/B тест на реальних користувачах - Interleaving: Змішування результатів двох ранкерів

Пастки: - Position bias у клік-даних - Offline метрики можуть не корелювати з online - Потрібен stratified train/test split по запитах

Режими відмов та чеклист налагодження

Чеклист для продакшну

Перед деплоєм: - [ ] Offline метрики значно б'ють бейзлайн - [ ] Затримка моделі прийнятна (p99 < SLA) - [ ] Feature pipeline протестований end-to-end - [ ] A/B тест фреймворк готовий - [ ] Фолбек до бейзлайну якщо модель падає

Після деплою: - [ ] Online метрики відстежуються (CTR, конверсії) - [ ] Свіжість моделі підтримується (розклад ретренінгу) - [ ] Feature drift моніториться - [ ] Edge cases логуються (нуль результатів, повільні запити) - [ ] Position bias корекція застосована якщо використовуються кліки

Масштабування: - [ ] Two-stage ранжування (ретривал → реранкінг) - [ ] Кешування фіч для hot елементів - [ ] Квантизація моделі для latency - [ ] Query сегментація для різних моделей

Two-Stage архітектура ранжування

Більшість продакшн-систем використовують два етапи:

Запит → Candidate Retrieval (1000s) → Екстракція фіч → 
ML Reranker (top 100) → Бізнес-правила → Фінальні результати (10-20)

Етап 1 - Retrieval: - Швидкий, наближений (BM25, ANN) - Високий recall, нижчий precision - Повертає сотні-тисячі

Етап 2 - Reranking: - Повільніший, точний ML модель - Бере top-k з ретривалу - Оптимізує якість ранжування

Інструменти та стек

Категорія Інструменти
Gradient boosting LightGBM, XGBoost, CatBoost
Deep learning TensorFlow Ranking, PyTorch
Інтеграція з пошуком Elasticsearch LTR, Solr LTR
Оцінка RankLib, кастомні метрики
Feature stores Feast, Tecton

Приклад міні-кейсу

Сценарій: E-commerce сайт хоче покращити пошук товарів поза keyword matching.

Підхід: 1. Бейзлайн: Elasticsearch BM25 - NDCG@10: 0.45 2. Збір клік-даних: 2M пошукових сесій за 3 місяці 3. Position debias: Inverse propensity weighting 4. Фічі: BM25, embedding similarity, популярність, ціна, відгуки 5. Модель: LambdaMART через LightGBM 6. Результати: NDCG@10: 0.62 (+38% vs бейзлайн)

Продакшн-архітектура:

Запит → Elasticsearch (top 500) → Feature service → 
LightGBM reranker → Diversity фільтр → Top 50

Результати A/B тесту: - CTR: +8% - Додавання в кошик: +5% - Дохід на пошук: +3%

Ключові уроки: - Click debiasing критичний для якості моделі - Фічі популярності домінували спочатку (потрібна регуляризація) - Real-time фічі (контекст сесії) додали +2% CTR

Пов'язані сторінки

Додаткове читання

Спробуйте наживо

Дослідіть пов'язану модель на практиці: відкрийте Retrieval Evaluation and Reranking Lab і змінюйте параметри під час роботи. Усе лишається у вашому браузері.

▶ Відкрити симуляцію Retrieval Evaluation and Reranking Lab

Що ви знайшли?

Додати кроки відтворення (опційно)