Facebook опубликовали нейросетевую рекомендательную систему (DLRM) на PyTorch и Caffe2. DLRM работает достаточно быстро, чтобы использовать его в компании, и выдает state-of-the-art результаты. DLRM объединяет в себе принципы коллаборативной фильтрации и подходов предиктивной аналитики.
С развитием глубокого обучения нейросетевые модели для рекомендации товаров обрели популярность. Несмотря на это, этот тип моделей отличается от стандартных нейросетевых архитектур тем, что обрабатывают категориальные данные. Характеристики для рекомендательных систем чаще представлены в виде категориальных данных. Для стандартной нейронной сети работа с такими разреженными данными чаще неэффективна. Чтобы спровоцировать исследования в области, Facebook опубликовали свою state-of-the-art рекомендательную модель (DLRM) на PyTorch.
Внутри DLRM модели
В DLRM категориальные характеристики обрабатываются с использованием векторных представлений. В свою очередь, численные характеристики проходят через многослойный перцептрон (MLP). Затем напрямую вычисляются второстепенные взаимодействия характеристик. В итоге, результаты обрабатываются в многослойном перцептроне и передаются в функцию сигмоиды, чтобы получить вероятность клика для товаров.
Рекомендательная система обрабатывает численные (плотные) и категориальные (разреженные) данные, которые описывают пользователей и продукты.
DLRM как базовая модель
Открытая реализация DRLM может использоваться как базовая модель для сравнения:
- скорости работы конкурирующего алгоритма;
- влияние модификаций DRLM на точность предсказаний модели
Рекомендательная система имеет две реализации на Python: на PyTorch и на Caffe2. Вариация этой реализации доступна и на C++ (с помощью Glow). Эти имплементации позволяют выявить различия между нейросетевыми фреймворками, чтобы затем собрать лучшее из фреймворков в один.
DLRM поддерживает генерацию случайных и синтетических данных для обучения. Возможность генерировать синтетические данные позволяет не публиковать реальные данные, на которых была обучена модель, а смоделировать распределения реальных данных. Генерация синтетических данных также позволяет тестировать работу модели с памятью.
Более подробно архитектура модели обсуждается в оригинальной статье.