Lightgbm lambdaMART для обучения ранжированию

Введение

LambdaMART – это улучшенная древовидная версия LambdaRank, основанная на RankNet. Было доказано, что усиленные деревья, особенно LambdaMART, очень успешны в решении реальных задач обучения ранжированию.

RankNet, LambdaRank и LambdaMART оказались очень успешными алгоритмами для решения реальных задач ранжирования. Например, ансамбль рейтинговых агентств LambdaMART выиграл трек 1 на Yahoo! 2010! Учимся ранжировать вызов.

В настоящее время существует две популярные общедоступные реализации LambdaMART: одна предоставляется библиотекой RankLib, являющейся частью проекта Lemur, и реализация LightGBM, предоставляемая Microsoft.

Мотивация

Хотя в Интернете уже доступно множество сообщений, объясняющих классификацию и регрессию LightGBM, мне удалось найти лишь несколько сообщений, касающихся LGBMRanker. В этом посте я покажу, как мы можем использовать LightGBM для обучения наших моделей обучения по рангу, а также некоторые ловушки, в которые мы можем попасть при обучении нашей модели, и, конечно же, как выбраться. из тех.

Выполнение

1. Импорт необходимых библиотек

2. Загрузка данных

Итак, представьте, что у меня есть фиктивные данные, хранящиеся в файле с именем dummy_ltr_data.csv со следующими столбцами: query, product_id, 8 функций и столбец для relevance.

3. Разделение данных на обучение и тестирование

Обратите внимание, что я разделю данные на основе запроса (qid), а не на основе случайного разделения на основе строк. Однако вы, конечно, можете выбирать запросы для обучения и тестирования случайным образом.

У фиктивных данных, которые я использую, есть 100 запросов. Итак, я сразу разделю 80% для поезда и 20% для теста на основе уникальных запросов (qid).

4. Подготовка данных для LightGBM

Прежде чем мы перейдем к обучению модели LightGBM LambdaMART на наших фиктивных данных, нам нужно будет разделить данные на функции и метку релевантности, которые по существу называются (X_train ,y_train) для обучающего набора и (X_test, y_test) для тестового набора.

В дополнение к этому нам также понадобится group как для обучения, так и для тестового набора (оценочный набор). group по сути представляет собой массив numpy, который в основном связывает запросы с функциями во время обучения.

Например, если у вас есть набор данных из 100 документов с group = [10, 20, 40, 10, 10, 10], это означает, что у вас есть 6 групп, где первые 10 записей находятся в первой группе, записи 11–30 — во второй группе, записи 31–70 — в третья группа и др.

5. Обучение модели LightGBM LambdaMART

В отличие от RankLib, где у вас есть зависимость от файлов java и jar, LambdaMART от LightGBM довольно легко обучить. Все, что нам нужно сделать, это подключить правильный набор параметров.

Хотя большинство параметров очень хорошо задокументированы на официальном сайте LightGBM, здесь я расскажу о некоторых, которых нет.

Во-первых, единственный objective, который доступен для ранжирования в LightGBM, — это lambdarank, аLambdaMART — это расширенная древовидная версия LambdaRank. Таким образом, цель lambdarank вместе с gbdt boosting_type — это то, чем является LambdaMART.

Во-вторых, цели ранжирования в LightGBM используют label_gain_ для хранения прироста каждого значения метки. По умолчанию label_gain_[i] = (1 << i) - 1. Таким образом, усиление метки по умолчанию работает только с максимальным значением метки 31.. Поэтому, если значение вашей метки превышает 31 , вам нужно будет указать собственное label_gain .

В-третьих, в методе fit при установке параметров eval_set и eval_group, если вы хотите оценить свою модель только на тестовом наборе, вам нужно будет передать только (X_test, y_test) и qids_test в параметры eval_set и eval_group соответственно.

5. Важность функции

Еще одна веская причина использовать LambdaMART от LightGBM — это встроенная поддержка важности функций. Все, что требуется, — это одна строка кода, чтобы посмотреть на важность функции.

Обратите внимание, что на графике показаны только 5 функций, потому что важность остальных функций равна 0. Мы также можем проверить это с помощью еще одной строки кода, ranker.feature_importances_, которая вернет оценку важности каждой функции.

Заключение

Я широко использовал RankLib и LightGBM для обучения ранжированию моделей и могу с уверенностью сказать, что LightGBM сделал мою жизнь проще. Мало того, что LightGBM имеет лучшую реализацию LambdaMART, чем RankLib, но также имеет простой в использовании scikit-learn подобный API, стандартную поддержку важности функций, графиков и SHAPзначения, список бесконечен.

В следующем посте я расскажу о настройке гиперпараметров для обучения ранжированию с помощью поиска по сетке и современной байесовской системе оптимизации для настройки гиперпараметров под названием Optuna. Я также расскажу о некоторых важных гиперпараметрах, на которые следует обратить особое внимание при настройке гиперпараметров в LightGBM для обучения ранжированию.

Кредиты и источники

  1. https://lightgbm.readthedocs.io/en/latest/pythonapi/lightgbm.LGBMRanker.html#

Подпишитесь на DDIntel Здесь.

Присоединяйтесь к нашей сети здесь: https://datadriveninvestor.com/collaborate