Введение:
В сегодняшнем быстро меняющемся цифровом ландшафте возможность предоставлять релевантные и персонализированные рекомендации имеет решающее значение для предприятий в различных областях. Будь то ранжирование результатов поиска, предложение продуктов или рекомендация контента, расширенные алгоритмы ранжирования играют ключевую роль в предоставлении пользователям индивидуального опыта. Одним из таких алгоритмов, получивших значительную популярность, является LambdaMART, мощный и универсальный подход к машинному обучению для ранжирования задач. В этом сообщении блога мы исследуем увлекательный мир LambdaMART и то, как его можно эффективно реализовать с помощью LightGBM, высокопроизводительного фреймворка для повышения градиента. Мы углубимся во внутреннюю работу LambdaMART, обсудим его преимущества и продемонстрируем, как скорость и точность LightGBM делают его идеальным выбором для решения крупномасштабных задач ранжирования. Итак, являетесь ли вы специалистом по данным, стремящимся расширить свои знания в области продвинутых алгоритмов ранжирования, или просто заинтригованы технологией, обеспечивающей персонализированные рекомендации, давайте погрузимся в захватывающую сферу LambdaMART с LightGBM.
Понимание концепции ранжирования:
Ранжирование — это фундаментальная концепция, играющая решающую роль в различных областях, от поисковых систем и систем рекомендаций до платформ электронной коммерции. По своей сути ранжирование включает в себя организацию и представление информации пользователям персонализированным и соответствующим образом. Когда мы ищем что-то в Интернете или просматриваем каталог товаров, мы ожидаем, что наиболее релевантные результаты появятся вверху. Алгоритмы ранжирования делают это возможным, учитывая различные факторы, такие как пользовательские предпочтения, релевантность и контекстную информацию. Эти алгоритмы используют методы машинного обучения для анализа данных, изучения закономерностей и определения оптимального порядка представления элементов. Понимая концепцию ранжирования, мы можем открыть мощные инструменты и стратегии для улучшения взаимодействия с пользователем, улучшения поиска информации и, в конечном итоге, достижения лучших результатов в широком диапазоне приложений.
Введение в LambdaMART:
LambdaMART — это мощный алгоритм, который произвел революцию в области обучения для ранжирования. Разработанный на основе повышения градиента и LambdaRank, LambdaMART сочетает в себе сильные стороны обоих подходов для создания высокоточных и эффективных моделей ранжирования. Благодаря способности обрабатывать крупномасштабные наборы данных и напрямую оптимизировать показатели ранжирования, LambdaMART стал популярным выбором для решения сложных задач ранжирования. Используя ансамблевое обучение и деревья решений, LambdaMART учится принимать обоснованные решения об относительном порядке элементов, что позволяет создавать персонализированные и контекстуально релевантные рейтинги. Будь то страницы результатов поисковых систем, рекомендательные системы или другие приложения ранжирования, понимание LambdaMART открывает мир возможностей для профессионалов, стремящихся улучшить поиск информации и взаимодействие с пользователем.
Импорт библиотеки
import snowflake.connector import csv import pandas as pd from google.cloud import bigquery from sklearn.model_selection import train_test_split
Подготовка данных:
Перед применением LambdaMART крайне важно понять требования к данным, характерные для этого алгоритма. Для эффективного обучения модели ранжирования набор данных необходимо тщательно отформатировать, чтобы учесть нюансы задачи ранжирования. Функции играют жизненно важную роль в LambdaMART, поскольку они предоставляют ценную информацию о ранжируемых элементах. Эти функции могут включать в себя различные атрибуты, такие как текстовые, категориальные или числовые характеристики элементов. Не менее важны метки релевантности, которые указывают на качество или желательность каждого элемента по отношению к запросу. Эти метки служат основой для обучения модели изучению базовых шаблонов ранжирования. Кроме того, структура запроса очень важна для LambdaMART, поскольку она помогает группировать связанные элементы вместе, позволяя алгоритму фиксировать контекст и намерения, лежащие в основе ранжирования. Тщательно изучив требования к данным и соответствующим образом отформатировав обучающие данные с соответствующими функциями, метками и структурами запросов, специалисты-практики могут убедиться, что LambdaMART производит точные и значимые ранжирования, соответствующие конкретной задаче ранжирования.
#Reading data file into data data = pd.read_csv("data.csv") data.head()
Здесь у меня есть несколько категориальных столбцов. Мне нужно одно горячее кодирование столбцов
# columns to encode columns_to_encode = ['device_type', 'language', 'currency','is_internal_trip', 'country', 'destination_country'] # Perform one-hot encoding encoded_cols = [] for column in columns_to_encode: encoded = pd.get_dummies(data[column], prefix=column) encoded_cols.append(encoded) # Drop the original columns from the DataFrame data.drop(columns_to_encode, axis=1, inplace=True) # Concatenate the encoded columns with the original DataFrame data = pd.concat([data] + encoded_cols, axis=1) train_df = data[:80000] # first 80% validation_df = data[20000:] # remaining 20% # here I am taking 1st 80000 entries for train but you can use train_test_split qids_train = train_df.groupby("query_id")["query_id"].count().to_numpy() X_train = train_df.drop(["query_id", "interaction_action_number"], axis=1) y_train = train_df["interaction_action_number"] qids_validation = validation_df.groupby("query_id")["query_id"].count().to_numpy() X_validation = validation_df.drop(["query_id", "interaction_action_number"], axis=1) y_validation = validation_df["interaction_action_number"]
Данный код отвечает за подготовку наборов данных для обучения и проверки для алгоритма LambdaMART. Вот разбивка каждого шага:
Группировка по идентификатору запроса:
train_df
DataFrame группируется по столбцу 'query_id' с использованием функцииgroupby()
.- Функция
count()
применяется к сгруппированному кадру данных для определения количества экземпляров для каждого запроса. - Метод
to_numpy()
преобразует значения счетчика в массив NumPy. - Полученный массив присваивается переменной
qids_train
, представляющей идентификаторы запросов в обучающем наборе данных.
Подготовка данных для обучения:
X_train
DataFrame создается путем удаления столбцов «query_id» и «interaction_action_number» изtrain_df
.- Остальные столбцы в
X_train
содержат функции, используемые для обучения модели LambdaMART. - Столбец «interaction_action_number» в
train_df
назначается переменнойy_train
, представляющей метки релевантности для обучающих данных.
Группировка по идентификатору запроса (набор проверки):
- Как и в обучающем наборе,
validation_df
DataFrame группируется по столбцу 'query_id', и рассчитывается количество экземпляров для каждого запроса. - Полученные значения счетчика преобразуются в массив NumPy и присваиваются переменной
qids_validation
.
Подготовка данных для проверки:
X_validation
DataFrame создается путем исключения столбцов «query_id» и «interaction_action_number» изvalidation_df
.- Остальные столбцы в
X_validation
содержат функции, используемые для оценки модели LambdaMART. - Столбец «interaction_action_number» в
validation_df
назначается переменнойy_validation
, представляющей метки релевантности для данных проверки.
Выполняя эти шаги, код разделяет идентификаторы запросов, функции и метки релевантности как для обучающего, так и для проверочного набора данных. Затем эти наборы данных можно использовать для эффективного обучения и оценки модели LambdaMART.
Обучение модели LambdaMART:
Теперь мы готовы обучить нашу модель LambdaMART с помощью LightGBM. Вот пример фрагмента кода для демонстрации процесса обучения:
model = lgb.LGBMRanker( objective="lambdarank", metric="ndcg", ) model.fit( X=X_train, y=y_train, group=qids_train, eval_set=[(X_validation, y_validation)], eval_group=[qids_validation], eval_at=10, verbose=10, )
мы используем библиотеку LightGBM для создания и обучения модели ранжирования LambdaMART. Вот пошаговое объяснение кода:
Инициализация модели:
Начнем с инициализации модели LambdaMART с помощью класса lgb.LGBMRanker
. Мы указываем цель как «лямбдаранг», а метрику оценки как «ndcg» (нормализованный дисконтированный кумулятивный прирост). Эти настройки указывают на то, что наша модель будет обучена оптимизации цели ранжирования LambdaMART и оценке ее производительности с использованием показателя NDCG.
Обучение моделей:
Далее мы обучаем модель с помощью метода fit
. Мы предоставляем обучающие данные X_train
(матрица признаков) и y_train
(целевые метки) вместе с аргументом group
, представляющим группы запросов. Аргумент group
имеет решающее значение для LambdaMART, поскольку он помогает обрабатывать сгруппированный характер данных. Кроме того, мы указываем данные проверки, используя eval_set
в виде списка, содержащего матрицу признаков проверки X_validation
и метки цели проверки y_validation
. Аргумент eval_group
представляет группы запросов для данных проверки. Мы установили eval_at=10
, чтобы оценить производительность модели на первых 10 позициях. Наконец, для аргумента verbose
установлено значение 10, чтобы отображать прогресс обучения каждые 10 раундов бустинга.
Выполняя этот код, модель будет обучаться с использованием алгоритма LambdaMART, оптимизируя цель LambdaRank и оценивая ее производительность с использованием метрики NDCG. Модель научится ранжировать элементы в обучающих данных на основе предоставленных функций и целевых меток с учетом сгруппированных запросов. Набор проверки будет использоваться для мониторинга производительности модели во время обучения.
Прогнозы модели:
import numpy as np def ndcg(labels, predictions): # Calculate Normalized Discounted Cumulative Gain (NDCG) labels = np.asarray(labels) predictions = np.asarray(predictions) # Sort the predictions in descending order sorted_indices = np.argsort(predictions)[::-1] # Retrieve the corresponding labels sorted_labels = labels[sorted_indices] # Calculate the Discounted Cumulative Gain (DCG) dcg = np.sum((2 ** sorted_labels - 1) / np.log2(np.arange(2, len(labels) + 2))) # Sort the labels in descending order to calculate the ideal DCG ideal_labels = np.sort(labels)[::-1] ideal_dcg = np.sum((2 ** ideal_labels - 1) / np.log2(np.arange(2, len(labels) + 2))) # Calculate NDCG by normalizing DCG by the ideal DCG ndcg = dcg / ideal_dcg if ideal_dcg != 0 else 0 return ndcg pred_validation = model.predict(X_validation, raw_score=False) ndcg(y_validation, pred_validation)
code определяет функцию Python ndcg
, которая вычисляет метрику нормализованного дисконтированного совокупного дохода (NDCG) с учетом набора меток и соответствующих прогнозов. Вот объяснение кода:
- Определение функции: код начинается с определения функции с именем
ndcg
, которая принимает два параметра:labels
иpredictions
. Эти параметры представляют собой наземные метки истинности и прогнозируемые баллы или ранжирование соответственно. - Преобразование входных данных в массивы Numpy: код преобразует входные данные
labels
иpredictions
в массивы NumPy для выполнения эффективных вычислений. - Прогнозы сортировки: код сортирует массив
predictions
в порядке убывания и извлекает соответствующийlabels
на основе отсортированных индексов. - Расчет дисконтированной совокупной прибыли (DCG): код вычисляет DCG путем суммирования дисконтированной прибыли каждого ранжированного элемента по формуле
(2^label - 1) / log2(rank)
. - Вычисление идеального DCG: для расчета идеального DCG код сортирует массив
labels
в порядке убывания и применяет ту же формулу, что и для расчета DCG. - Расчет NDCG: код вычисляет NDCG путем нормализации DCG по идеальному DCG. Если идеальный DCG равен 0 (чтобы избежать деления на ноль), NDCG устанавливается равным 0.
- Возврат значения NDCG: Наконец, функция возвращает вычисленное значение NDCG.
- Чтобы вычислить NDCG для набора проверки, код использует обученную модель для прогнозирования оценок для матрицы признаков проверки
X_validation
. Затем прогнозы передаются вместе с фактическими меткамиy_validation
в функциюndcg
для вычисления значения NDCG. - Вы можете использовать эту функцию для оценки производительности ранжирования вашей модели LambdaMART, сравнивая прогнозируемые оценки с истинными метками и получая значение NDCG.
NDCG (нормализованная дисконтированная совокупная прибыль):
Я использовал NDCG, но никогда не объяснял, что такое NDCG. Нормализованный дисконтированный кумулятивный выигрыш (NDCG) — это широко используемый показатель оценки в поиске информации и машинном обучении, особенно для ранжирования задач. Он измеряет качество ранжированного списка, учитывая как релевантность элементов, так и их позиции в списке. NDCG учитывает ранжированную релевантность каждого элемента, присваивая более высокие баллы более релевантным элементам, которые находятся выше в рейтинге.
NDCG сочетает в себе два важных понятия: дисконтированная совокупная прибыль (DCG) и идеальная дисконтированная совокупная прибыль (IDCG). DCG вычисляет кумулятивный выигрыш, присваивая элементам уменьшающийся вес в зависимости от их положения, в то время как IDCG представляет собой максимально достижимый кумулятивный прирост для идеального ранжирования. Нормализуя DCG с помощью IDCG, NDCG обеспечивает значение от 0 до 1, где 1 указывает на наивысшее качество ранжирования.
NDCG особенно полезен для задач ранжирования, когда релевантность элементов варьируется, а порядок элементов в ранжировании имеет значение. Он обеспечивает всестороннюю оценку способности модели производить ранжирование, которое согласуется с человеческими суждениями о релевантности элемента.
Преимущества НДЦГ:
- Оценка релевантности: NDCG учитывает градуированную релевантность элементов, что позволяет проводить более точную оценку эффективности ранжирования. Он отражает тот факт, что не все соответствующие элементы имеют одинаковый уровень важности или воздействия.
- Чувствительность позиции: NDCG учитывает позицию элементов в рейтинге. Он признает, что элементы, расположенные вверху списка, имеют большее влияние, и придает им больший вес, подчеркивая важность правильного упорядочения.
- Гибкость в оценке: NDCG не навязывает строгие бинарные суждения о релевантности (релевантные или нерелевантные), но допускает различные уровни релевантности. Эта гибкость делает его подходящим для доменов, где релевантность элементов субъективна или имеет несколько уровней.
- Нормализация и сопоставимость: NDCG нормализует DCG по идеальному DCG, предоставляя нормализованную меру, которая позволяет проводить содержательное сравнение различных рейтингов и наборов данных. Эта нормализация позволяет объективно оценивать и сравнивать модели в различных сценариях.
- Стандартизированная метрика: NDCG — хорошо зарекомендовавшая себя и широко принятая метрика в сообществах, занимающихся поиском и ранжированием информации. Он предоставляет исследователям и практикам общий язык для обсуждения и оценки эффективности алгоритмов ранжирования.
Используя NDCG в качестве оценочной метрики в своем блоге, вы можете продемонстрировать надежность и эффективность LambdaMART с LightGBM в создании высококачественных рейтингов. Его релевантность, чувствительность к положению и нормализация делают NDCG ценным инструментом для оценки и сравнения различных алгоритмов и моделей ранжирования.
Заключение:
В этом сообщении блога мы исследовали мощный мир LambdaMART с помощью LightGBM, расширенного алгоритма ранжирования. Мы начали с понимания концепции ранжирования и его значения в различных областях, таких как поисковые системы, системы рекомендаций и платформы электронной коммерции. С введением LambdaMART мы погрузились во внутреннюю работу этого алгоритма и его способность создавать точные и эффективные модели ранжирования.
Подготовка данных для LambdaMART оказалась важным шагом, когда мы обсудили важность функций, меток релевантности и структур запросов в наборе данных. Правильно форматируя обучающие данные и учитывая эти ключевые элементы, специалисты-практики могут гарантировать, что модель учитывает нюансы задачи ранжирования и дает значимые результаты.
Затем мы перешли к реализации LambdaMART с использованием LightGBM, высокопроизводительного фреймворка для повышения градиента. Пошаговый процесс включал установку LightGBM, импорт необходимых библиотек и обучение модели LambdaMART. Мы предоставили фрагменты кода и примеры для иллюстрации реализации, что позволяет специалистам-практикам понять и эффективно применять алгоритм.
Чтобы оценить производительность модели LambdaMART, мы ввели понятие нормализованного дисконтированного кумулятивного выигрыша (NDCG), широко используемого показателя оценки для ранжирования задач. Мы объяснили преимущества NDCG, такие как осведомленность о релевантности, чувствительность к положению, гибкость в оценке, нормализация и сопоставимость. Используя NDCG, специалисты-практики могут оценивать и сравнивать различные алгоритмы ранжирования, демонстрируя эффективность LambdaMART с LightGBM в обеспечении высококачественного ранжирования.
В заключение можно сказать, что LambdaMART с LightGBM раскрывает потенциал передовых алгоритмов ранжирования, позволяя профессионалам улучшать взаимодействие с пользователем, улучшать поиск информации и предоставлять персонализированные рекомендации. Изучив LambdaMART и поняв его реализацию с помощью LightGBM, вы получите мощные инструменты и стратегии, позволяющие преуспеть в области передовых алгоритмов ранжирования.