中文翻译暂不可用,显示俄语原文。

Что такое LambdaMART и как он используется для reranking в RAG?

Краткий тезис

LambdaMART — это алгоритм learning-to-rank (LTR) на основе градиентного бустинга решающих деревьев, который оптимизирует метрику NDCG (Cumulative Gain). В RAG он применяется как второй этап reranking после быстрого retrieval: сначала дешёвый поиск (bi-encoder или sparse retrieval) выдаёт top-k (например, 100 документов), затем LambdaMART (или cross-encoder) переранжирует их с учётом множества признаков. LambdaMART значительно быстрее cross-encoder, но требует обучения на размеченных данных и инженерного выделения признаков.


1. Термин: Learning-to-Rank (LTR)

Learning-to-Rank — это класс методов машинного обучения, предназначенных для построения модели ранжирования объектов (документов) по релевантности запросу. Выделяют три подхода:

ПодходИдеяПримеры
PointwiseКаждому документу присваивается абсолютная оценка релевантности (регрессия или классификация)RankNet (как pointwise), линейная регрессия
PairwiseМодель учится правильно упорядочивать пары документов (какой из двух релевантнее)RankNet (pairwise), RankSVM, LambdaRank
ListwiseМодель оптимизирует метрику качества всего списка (NDCG, MAP)LambdaMART, ListNet, ListMLE

LambdaMART относится к listwise-подходу, так как напрямую оптимизирует NDCG, учитывая все документы в списке для одного запроса.


2. Что такое LambdaMART

LambdaMART — это комбинация двух идей:

  • LambdaRank — функция потерь, которая для каждой пары документов вычисляет «лямбду» — величину и направление изменения скоров, чтобы максимизировать NDCG.
  • MART (Multiple Additive Regression Trees) — Regression Trees|градиентный бустинг решающих деревьев (GBRT), который на каждой итерации строит дерево, предсказывающее эти лямбды.

Ключевое отличие от обычного градиентного бустинга: градиенты заменяются на лямбды, которые учитывают не только ошибку предсказания, но и изменение метрики качества (NDCG) при перестановке документов.


3. Как работает LambdaMART

3.1. Лямбда-функция

Для каждой пары документов (i, j) одного запроса вычисляется:

λ_ij = -ΔNDCG_ij * (1 / (1 + exp(s_i - s_j)))

где:

  • s_i, s_j — текущие скоры (предсказания модели) для документов i и j;
  • ΔNDCG_ij — изменение NDCG, если поменять местами i и j (положительное, если i релевантнее j, иначе отрицательное);
  • сигмоид 1/(1+exp(...)) — аппроксимация вероятности того, что i должен быть выше j.

Итоговая лямбда для документа i: λ_i = Σ_j λ_ij (сумма по всем парам с участием i).

3.2. Алгоритм

  1. Инициализация: все скоры = 0 (или среднее значение).
  2. Для каждой итерации t:
    • Вычислить лямбды для всех документов всех запросов.
    • Построить решающее дерево (обычно с ограниченной глубиной, например 6), предсказывающее лямбды по признакам документов.
    • Обновить модель: s_i += learning_rate * tree_prediction_i.
  3. После T деревьев получаем финальную модель, которая выдаёт скор релевантности для любого документа.

3.3. Оптимизация NDCG

NDCG (Normalized Discounted Cumulative Gain) — метрика, учитывающая позицию релевантных документов в списке. Чем выше релевантный документ, тем больше его вклад. LambdaMART напрямую максимизирует NDCG, так как лямбды зависят от ΔNDCG.


4. Использование LambdaMART для reranking в RAG

4.1. Двухэтапная архитектура

Запрос пользователя
       ↓
[Этап 1: Retrieval] (bi-encoder, BM25, гибридный поиск)
       ↓ top-k (например, 100)
[Этап 2: Reranker] (LambdaMART или cross-encoder)
       ↓ top-n (например, 5-10)
[LLM + контекст → ответ]
  • Первый этап — быстрый, дешёвый, выдаёт много кандидатов.
  • Второй этап — более точный, но дорогой. LambdaMART позволяет обрабатывать сотни документов за миллисекунды (в отличие от cross-encoder, который требует попарного сравнения с запросом).

4.2. Признаки для LambdaMART

Для reranking в RAG используются разнообразные признаки:

КатегорияПримеры признаков
СемантическиеCosine similarity между эмбеддингом запроса и документа (bi-encoder), BM25 score, TF-IDF similarity
ПозиционныеРанг документа в выдаче первого этапа, номер чанка в исходном документе
МетаданныеДата документа, длина текста, наличие ключевых слов из запроса
СтатистическиеЧастота терминов запроса в документе, IDF терминов
ВзаимодействиеCross-encoder score (если используется как один из признаков)

4.3. Обучение модели

Для обучения LambdaMART нужен датасет, где для каждого запроса есть список документов с оценками релевантности (например, 0/1/2/3 или graded relevance). Формат данных:

QueryID   Feature1   Feature2   ...   Target
Q1        0.8        0.3        ...   2
Q1        0.5        0.7        ...   1
Q2        0.9        0.1        ...   3
...

Популярная библиотека — LightGBM (LGBMRanker). Пример кода:

import lightgbm as lgb
import numpy as np

# X_train: матрица признаков (n_samples, n_features)
# y_train: целевые оценки релевантности (int)
# group_train: количество документов на каждый запрос (list)

model = lgb.LGBMRanker(
    objective="lambdarank",
    metric="ndcg",
    ndcg_eval_at=[5, 10],
    boosting_type="gbdt",
    num_leaves=31,
    learning_rate=0.1,
    n_estimators=100
)

model.fit(
    X_train, y_train,
    group=group_train,
    eval_set=[(X_val, y_val)],
    eval_group=[group_val],
    eval_metric="ndcg"
)

5. Сравнение LambdaMART и cross-encoder для reranking

ХарактеристикаLambdaMARTCross-encoder
СкоростьОчень быстрый (инференс ~1 мс на 100 документов)Медленный (каждая пара запрос-документ требует прогона через трансформер)
КачествоХорошее, но уступает cross-encoder на сложных семантических задачахЛучшее, так как учитывает глубокое взаимодействие запроса и документа
ОбучениеТребует размеченных данных с ранжированными спискамиМожно обучать на парах (релевантный/нерелевантный)
ПризнакиНужно инженерно выделять признакиРаботает напрямую с текстом
ИнтерпретируемостьВысокая (важность признаков, SHAP)Низкая (чёрный ящик)
МасштабированиеЛегко добавлять новые признакиТрудно комбинировать с другими сигналами

Когда выбирать LambdaMART

  • Нужна низкая задержка (latency < 50 мс на этап reranking).
  • Есть много разнородных признаков (BM25, эмбеддинги, метаданные).
  • Требуется интерпретируемость (почему документ поднялся/опустился).

Когда выбирать cross-encoder

  • Качество важнее скорости (например, оффлайн-анализ).
  • Нет возможности выделять признаки.
  • Мало данных для обучения LambdaMART.

6. Преимущества LambdaMART в RAG

  • Скорость: инференс на сотнях документов занимает миллисекунды, что критично для real-time RAG.
  • Гибкость: можно комбинировать любые признаки — от BM25 до эмбеддингов последней LLM.
  • Интерпретируемость: анализ важности признаков помогает понять, какие сигналы наиболее полезны для ранжирования.
  • Оптимизация под метрику: LambdaMART напрямую максимизирует NDCG, что хорошо коррелирует с пользовательским опытом (первые результаты — самые релевантные).

7. Ограничения LambdaMART

  • Требовательность к данным: нужны размеченные списки документов для каждого запроса (хотя бы 3-5 уровней релевантности). Сбор таких данных дорог.
  • Feature engineering: качество модели сильно зависит от того, насколько хорошо выделены признаки. Плохие признаки → плохое ранжирование.
  • Не учитывает глубокое семантическое взаимодействие: в отличие от cross-encoder, LambdaMART не «читает» текст пары запрос-документ вместе, а использует только заранее вычисленные признаки.
  • Чувствительность к распределению данных: модель может переобучаться на специфические признаки, если датасет мал.

8. Практический пример: обучение LambdaMART для reranking

Задача

У нас есть 10 000 запросов, для каждого — 50 документов с оценками релевантности (0 — нерелевантен, 1 — частично, 2 — полностью). Нужно обучить модель, которая переранжирует top-50 от первого этапа.

Шаги

  1. Подготовка данных: для каждого документа вычисляем признаки (cosine similarity, BM25, длина, позиция в первом этапе).
  2. Формирование групп: группируем документы по QueryID.
  3. Обучение (LightGBM, как в коде выше).
  4. Оценка: NDCG@5, NDCG@10 на валидации.
  5. Инференс: на новых запросах получаем скоры для top-50, сортируем по убыванию.

Ожидаемый результат

  • NDCG@10 улучшается с 0.65 (baseline — только cosine similarity) до 0.78 после обучения LambdaMART.
  • Время reranking 50 документов — 2 мс (против 500 мс для cross-encoder).

9. Альтернативы LambdaMART


Пет-проект для закрепления

Задача: Обучить LambdaMART для reranking в RAG на синтетических данных.

Инструменты: Python, LightGBM, pandas, numpy, sentence-transformers (для эмбеддингов), rank_bm25.

Шаги:

  1. Сгенерировать 500 запросов и 10 000 документов (например, новостные заголовки).
  2. Для каждого запроса отобрать 20 документов (10 релевантных, 10 нерелевантных) с помощью BM25 + случайного шума.
  3. Вычислить признаки:
    • cosine similarity между эмбеддингами (all-MiniLM-L6-v2);
    • BM25 score;
    • длину документа;
    • позицию в BM25-выдаче.
  4. Создать датасет с QueryID, признаками, target (0/1).
  5. Обучить LGBMRanker с objective='lambdarank', оценить NDCG@5.
  6. Сравнить с baseline (только cosine similarity).

Ожидаемый результат: Модель показывает NDCG@5 > 0.8, а baseline — около 0.6. Вы сможете проанализировать важность признаков и понять, как LambdaMART улучшает ранжирование.


Связь с другими вопросами

ВопросТема
5Оффлайн-метрики (NDCG, MRR) — то, что оптимизирует LambdaMART
6Общее понятие reranking, место LambdaMART
7Скорость LambdaMART как способ снизить задержку
10Альтернативный подход к улучшению retrieval
15Признаки для LambdaMART могут включать sparse и dense скоры
20Fine-tuning bi-encoder улучшает признаки для LambdaMART

Навигация