Глубокое обучение (Deep learning. DL) - это современное решение многих проблем машинного обучения, таких как компьютерное зрение или недостатки естественного языка, и превосходит альтернативные методы. Последние тенденции включают применение методов DL в рекомендательных системах. Многие крупные компании, такие как AirBnB, Facebook, Google, Home Depot, LinkedIn и Pinterest, делятся своим опытом использования DL для рекомендательных систем.
Недавно NVIDIA и команда RAPIDS.AI выиграли три соревнования с использованием DL: ACM RecSys2021 Challenge, SIGIR eCom Data Challenge и ACM WSDM2021 Booking.com Challenge.
Область рекомендательных систем сложна. В этом посте я сосредоточусь на архитектуре нейронной сети и ее компонентах, таких как эмбеддинг и полностью связанные слои, рекуррентные ячейки нейронной сети (LSTM или GRU) и блоки трансформеров. Я расскажу о популярных сетевых архитектурах, таких как Wide и Deep от Google и Deep Learning Recommender Model (DLRM) от Facebook.
Преимущества рекомендательных систем DL
Существует множество различных методов разработки рекомендательных систем, таких как ассоциативные правила, фильтрация на основе контента или коллаборативная фильтрация, матричная факторизация или обучение линейной либо древовидной модели для прогнозирования вероятности взаимодействия.
Каковы преимущества использования нейронных сетей? В целом, DL-модели достигают более высокой точности. Во-первых, DL может использовать дополнительные данные. Многие традиционные методы машинного обучения теряют свою эффективность при увеличении объема данных. Однако если увеличить пропускную способность нейронных сетей, модель может повысить производительность за счет большего количества данных.
Во-вторых, нейронные сети обладают гибкой конструкцией. Например, вы можете обучить DL-модель нескольким задачам (многозадачное обучение), таким как "добавит ли пользователь товар в корзину?", "начнет ли он оформление заказа с этим товаром?" или "купит ли он этот товар?". Каждая задача помогает модели извлекать информацию из данных, и они могут поддерживать друг друга.
Другие подходы к проектированию включают добавление мультимодальных данных в рекомендательную модель. Это можно сделать, обрабатывая изображения товара с помощью конволюционной нейронной сети или его описание с помощью модели NLP. Нейронные сети используются во многих областях. Вы можете перенести новые разработки, такие как оптимизаторы или новые слои, в рекомендательные системы.
Наконец, DL-фреймворки хорошо оптимизированы под обработку от терабайтов до петабайтов данных для всех видов доменов. Вот как можно проектировать нейронные сети для рекомендательных систем.
Основной строительный блок: эмбеддинг-слои
Эмбеддинг-слои представляют категории с плотными векторами. Эта техника популярна в NLP для встраивания слов с плотным представлением. Слова с похожим значением имеют похожий эмбеддинг-вектор.
Эту же технику можно применить к рекомендательным системам. Самая тривиальная рекомендательная система основана на пользователях и объектах-продуктах (айтемах): Какие продукты вы должны рекомендовать пользователю? У вас есть идентификаторы пользователей и идентификаторы айтемов. Слова - это пользователи и айтемы, поэтому вы используете две эмбеддинг-таблицы (рис. 1).
Вычислите dot-продукт между эмбеддингом пользователя и айтема, чтобы получить окончательный результат - вероятность того, что пользователь взаимодействует с элементом. В качестве последнего шага можно применить сигмоидную функцию активации для преобразования результата в вероятность между 0 и 1.
Этот метод эквивалентен матричной факторизации или методу наименьших чередующихся квадратов (Alternating Least Squares. ALS).
Более глубокие модели с полносвязными слоями
Производительность нейронных сетей основана на глубоких архитектурах с несколькими нелинейными слоями. Вы можете расширить предыдущую модель, подавая выход эмбеддинг-слоев через несколько полносвязных слоев с активациями ReLU.
Выбор дизайна заключается в том, как объединить два эмбеддинг-вектора. Можно либо объединить только эмбеддинг-векторы, либо поэлементно умножить векторы друг на друга, по аналогии с dot-продуктом. За выводом следуют несколько скрытых слоев.
Добавление информации о метаданных в нейронную сеть
До сих пор в качестве входных данных вы использовали только идентификатор пользователя и идентификатор продукта, но зачастую в вашем распоряжении имеется гораздо больше информации. Дополнительной информацией о пользователе может быть пол, возраст, город (адрес), время с момента последнего посещения или кредитная карта, использованная для оплаты. У продукта-товара обычно есть бренд, цена, категории или количество, проданное за последние 7 дней. Эта сопутствующая информация может помочь модели более успешно выполнять обобщение. Модифицируйте нейронную сеть, чтобы использовать дополнительные характеристики в качестве входных данных.
Популярные архитектуры
Эмбеддинг-слои и полностью связанные слои являются основными компонентами для понимании некоторых из последних опубликованных архитектур нейронных сетей. В этом посте я рассматриваю архитектуры Wide и Deep от Google от 2016 года и DLRM от Facebook от 2019 года.
Wide и Deep от Google
Google's Wide и Deep содержит два компонента:
Широкая часть структуры для запоминания общих комбинаций признаков.
Глубокая - для обобщения редких или ненаблюдаемых комбинаций признаков.
Инновация заключается в том, что оба компонента обучаются одновременно. Это возможно, поскольку нейронные сети являются гибкими. Глубокая часть подает категориальные признаки через эмбеддинг-слои и конкатенирует выходной сигнал с числовыми входными признаками. Конкатенированный вектор проходит через несколько полностью связанных слоев.
Вам это кажется знакомым? Да, это предыдущая конструкция нейронной сети. Новый компонент - это широкая часть, которая является просто линейной комбинацией входных признаков с аналогичной линейной/логистической регрессией. Выходные данные каждой части суммируются для получения окончательного значения прогноза.
DLRM от Facebook
DLRM от Facebook имеет структуру, аналогичную архитектуре нейронной сети с метаданными, но обладает некоторыми специфическими отличиями. Датасет может содержать несколько категориальных признаков. DLRM требует, чтобы все категориальные вводы передавались через эмбеддинг-слой с одинаковой размерностью. Позже я остановлюсь на том, почему это важно
Далее непрерывные вводы конкатенируются и подаются через несколько полностью связанных слоев, называемых нижним многослойным перцептроном (Multilayer Perceptron. MLP). Последний слой нижнего MLP имеет ту же размерность, что и векторы эмбеддинг-слоя.
DLRM использует новый комбинированный слой. Он применяет поэлементное умножение между всеми парами эмбеддинг-векторов и выходом нижнего MLP. По этой причине каждый вектор имеет одинаковую размерность. Полученные векторы конкатенируются и подаются через другой набор полностью связанных слоев (верхний MLP).
Рекомендательные системы на основе сессий
Когда я анализировал различные DL-архитектуры для рекомендательных систем, то предполагал, что входные данные имеют табличную структуру и игнорировал характер взаимодействия с пользователем. Однако при посещении сайта пользователь осуществляет несколько взаимодействий в течение одной сессии. Например, он посещает магазин и просматривает несколько страниц товаров. Можно ли использовать последовательность взаимодействий пользователя в качестве исходных данных чтобы выявить закономерности?
В одной сессии пользователь просматривает несколько пар джинсов подряд, и вы должны порекомендовать ему другую пару джинсов. В другой сессии тот же пользователь просматривает несколько пар обуви подряд, и вы должны порекомендовать ему другую пару обуви. Такова интуитивная основа систем рекомендаций на основе сеансов.
К счастью, к области рекомендательных систем можно применить некоторые методы из НЛП. Взаимодействия пользователя имеют последовательную структуру.
Последовательность может быть обработана с помощью рекуррентной нейронной сети (Recurrent Neural Network. RNN) или архитектуры на основе трансформера в качестве слоя последовательности. Вы представляете идентификаторы элементов с помощью эммбеддинг-векторов и подаете выходные данные через слой последовательности. Скрытое представление слоя последовательности может быть добавлено в качестве входа в архитектуру глубокого обучения.
Другие варианты
Поскольку я посвятил эту статью теории применения DL в рекомендательных системах, то не затронул многие другие проблемы. Здесь я их вкратце описал, чтобы предоставить вводную информацию:
Процесс эмбеддинга таблиц может превысить объем памяти CPU или GPU. Поскольку онлайн-сервис может иметь миллионы пользователей, эмбеддинг-таблица может достигать нескольких терабайт. NVIDIA предоставляет фреймворк HugeCTR для масштабирования эмбеддинг-таблиц больше, чем позволяет память CPU или GPU.
Максимизируйте использование GPU во время обучения. Рекомендательные системы на основе DL имеют неглубокую сетевую архитектуру с несколькими полностью связанными слоями. Загрузчик данных иногда является узким местом в обучающих паплайнах. Для борьбы с этим NVIDIA разработала высоко оптимизированный загрузчик данных на GPU для TensorFlow и PyTorch.
Генерация рекомендаций требует оценки пар "пользователь-айтем". Наихудший сценарий - предсказать вероятность полностью для всех доступных продуктов и затем выбрать лучшие из них. На практике это невыполнимо, и кандидаты генерируются с помощью низкозатратной модели, такой как приближенный поиск ближайших соседей.
Резюме
Этот пост познакомил вас с рекомендательными системами на основе DL. Я начал с базовой матричной факторизации на основе двух входов и рассмотрел новейшую архитектуру на основе сессий с использованием слоев трансформера.
Вы можете обработать последовательность, используя либо рекуррентную нейронную сеть (RNN), либо архитектуру на основе трансформера в качестве уровня последовательности. Представьте идентификаторы айтемов с помощью эмбеддинг-векторов и подайте выходной сигнал через слой последовательности. Добавьте скрытое представление слоя последовательности в качестве входа в архитектуру DL.
Хотите узнать больше о рекомендательных системах? NVIDIA Merlin - это фреймворк с открытым исходным кодом для ускорения рекомендательных систем сквозной обработки на GPU. NVIDIA постоянно разрабатывает новые ресурсы для легкого обучения и деплоя рекомендательных систем на базе DL. Вот некоторые ресурсы, которые могут помочь:
Примеры в репозитории NVIDIA/NVTabular GitHub
Deep Learning Recommender Summit 29 июля, где NVIDIA и приглашенные докладчики расскажут о своем опыте деплоя рекомендательных систем и преодолении трудностей
А подробнее исследовать тему рекомендательных систем мы продолжим на бесплатном открытом уроке «Рекомендательная система: как рекомендовать визуально похожие товары». Вы узнаете, как сделать векторное представление изображений. Мы поработаем с нейросетями компьютерного зрения, поищем похожие по фото объекты — украшения, предметы одежды. Обсудим, как это технически организовать для целей рекомендательной системы.
В результате урока вы узнаете, как работать с глубокими нейросетями компьютерного зрения, как готовить изображения для обработки, как сделать рекомендательную систему на основе похожих изображений.