У нас новый релиз Рекомендаторов 1.2.0!
Так много изменений со времени нашего последнего выпуска. У нас есть полные тесты Python 3.8–3.11 (около 1800 тестов), повышена производительность многих алгоритмов, проверены ноутбуки и множество других улучшений.
Задача рекомендателей — помочь исследователям, разработчикам и энтузиастам в создании прототипов, экспериментировании и внедрении в производство ряда классических и современных рекомендательных систем.
Recommenders — это проект Linux Foundation of AI and Data.
Этот репозиторий содержит примеры и рекомендации по созданию систем рекомендаций, представленные в виде блокнотов Jupyter. В примерах подробно описаны наши знания по пяти ключевым задачам:
В рекомендателях предусмотрено несколько утилит для поддержки общих задач, таких как загрузка наборов данных в формате, ожидаемом различными алгоритмами, оценка выходных данных модели и разделение данных обучения/тестирования. Включены реализации нескольких современных алгоритмов для самостоятельного изучения и настройки в ваших собственных приложениях. См. документацию по рекомендателям.
Более подробный обзор репозитория можно найти в документах на вики-странице.
Некоторые практические сценарии применения систем рекомендаций см. в разделе «Сценарии».
Мы рекомендуем conda для управления средой и VS Code для разработки. Чтобы установить пакет рекомендаций и запустить пример блокнота в Linux/WSL:
# 1. Install gcc if it is not installed already. On Ubuntu, this could done by using the command
# sudo apt install gcc
# 2. Create and activate a new conda environment
conda create -n < environment_name > python=3.9
conda activate < environment_name >
# 3. Install the core recommenders package. It can run all the CPU notebooks.
pip install recommenders
# 4. create a Jupyter kernel
python -m ipykernel install --user --name < environment_name > --display-name < kernel_name >
# 5. Clone this repo within VSCode or using command line:
git clone https://github.com/recommenders-team/recommenders.git
# 6. Within VSCode:
# a. Open a notebook, e.g., examples/00_quick_start/sar_movielens.ipynb;
# b. Select Jupyter kernel <kernel_name>;
# c. Run the notebook.
Дополнительную информацию о настройке на других платформах (например, Windows и macOS) и различных конфигурациях (например, графическом процессоре, Spark и экспериментальных функциях) см. в Руководстве по установке.
В дополнение к основному пакету также предоставляется несколько дополнительных, в том числе:
[gpu]
: необходим для запуска моделей графических процессоров.[spark]
: необходим для запуска моделей Spark.[dev]
: необходим для разработки репозитория.[all]
: [gpu]
| [spark]
| [dev]
[experimental]
: модели, которые не прошли тщательную проверку и/или могут потребовать дополнительных действий при установке. В таблице ниже перечислены алгоритмы рекомендаций, доступные на данный момент в репозитории. Блокноты связаны в столбце «Пример» как «Быстрое начало», демонстрирующее простой в использовании пример алгоритма, или как «Глубокое погружение», где подробно объясняются математические вычисления и реализация алгоритма.
Алгоритм | Тип | Описание | Пример |
---|---|---|---|
Метод наименьших квадратов (ALS) | Совместная фильтрация | Алгоритм матричной факторизации для явной или неявной обратной связи в больших наборах данных, оптимизированный для масштабируемости и возможностей распределенных вычислений. Он работает в среде PySpark. | Быстрый старт/Глубокое погружение |
Внимательное асинхронное разложение по сингулярным значениям (A2SVD) * | Совместная фильтрация | Последовательный алгоритм, целью которого является уловить как долгосрочные, так и краткосрочные предпочтения пользователя с помощью механизма внимания. Он работает в среде CPU/GPU. | Быстрый старт |
Корнак/байесовский персонализированный рейтинг (BPR) | Совместная фильтрация | Алгоритм матричной факторизации для прогнозирования ранжирования элементов с неявной обратной связью. Он работает в среде процессора. | Глубокое погружение |
Cornac/двусторонний вариационный автоэнкодер (BiVAE) | Совместная фильтрация | Генеративная модель для диадических данных (например, взаимодействия пользователя с элементом). Он работает в среде CPU/GPU. | Глубокое погружение |
Рекомендации по внедрению сверточных последовательностей (Caser) | Совместная фильтрация | Алгоритм, основанный на свертках, целью которого является уловить как общие предпочтения пользователя, так и последовательные закономерности. Он работает в среде CPU/GPU. | Быстрый старт |
Сеть глубоких знаний (DKN) * | Контентная фильтрация | Алгоритм глубокого обучения, включающий граф знаний и встраивание статей для предоставления рекомендаций по новостям или статьям. Он работает в среде CPU/GPU. | Быстрый старт/Глубокое погружение |
Машина экстремально глубокой факторизации (xDeepFM) * | Совместная фильтрация | Алгоритм, основанный на глубоком обучении, для неявной и явной обратной связи с функциями пользователя/элемента. Он работает в среде CPU/GPU. | Быстрый старт |
Встраивание точечного смещения FastAI (FAST) | Совместная фильтрация | Алгоритм общего назначения с встраиваниями и смещениями для пользователей и элементов. Он работает в среде CPU/GPU. | Быстрый старт |
LightFM/машина факторизации | Совместная фильтрация | Алгоритм факторизационной машины как для неявной, так и для явной обратной связи. Он работает в среде процессора. | Быстрый старт |
Дерево повышения LightGBM/градиента * | Контентная фильтрация | Алгоритм Gradient Boosting Tree для быстрого обучения и низкого использования памяти при решении задач, связанных с контентом. Он работает в средах CPU/GPU/PySpark. | Быстрый старт в ЦП / Глубокое погружение в PySpark |
СветGCN | Совместная фильтрация | Алгоритм глубокого обучения, который упрощает разработку GCN для прогнозирования неявной обратной связи. Он работает в среде CPU/GPU. | Глубокое погружение |
ГеоИМЦ * | Совместная фильтрация | Алгоритм завершения матрицы, который учитывает особенности пользователя и элемента с использованием римановой оптимизации сопряженного градиента и следует геометрическому подходу. Он работает в среде процессора. | Быстрый старт |
ГРУ | Совместная фильтрация | Последовательный алгоритм, целью которого является уловить как долгосрочные, так и краткосрочные предпочтения пользователя с помощью рекуррентных нейронных сетей. Он работает в среде CPU/GPU. | Быстрый старт |
Полиномиальный ВАЭ | Совместная фильтрация | Генеративная модель для прогнозирования взаимодействия пользователя и элемента. Он работает в среде CPU/GPU. | Глубокое погружение |
Нейронные рекомендации с долгосрочными и краткосрочными представлениями пользователей (LSTUR) * | Контентная фильтрация | Алгоритм нейронных рекомендаций для рекомендации новостных статей с моделированием долгосрочных и краткосрочных интересов пользователей. Он работает в среде CPU/GPU. | Быстрый старт |
Нейронные рекомендации с внимательным многопредставленным обучением (NAML) * | Контентная фильтрация | Алгоритм нейронных рекомендаций для рекомендации новостных статей с внимательным многопросмотровым обучением. Он работает в среде CPU/GPU. | Быстрый старт |
Нейронная совместная фильтрация (NCF) | Совместная фильтрация | Алгоритм глубокого обучения с повышенной производительностью для неявной обратной связи пользователя/элемента. Он работает в среде CPU/GPU. | Быстрый старт/Глубокое погружение |
Нейронные рекомендации с персонализированным вниманием (NPA) * | Контентная фильтрация | Алгоритм нейронных рекомендаций для рекомендации новостных статей с сетью персонализированного внимания. Он работает в среде CPU/GPU. | Быстрый старт |
Нейронная рекомендация с многоголовым самообслуживанием (NRMS) * | Контентная фильтрация | Нейронный рекомендательный алгоритм для рекомендации новостных статей с многоглавым самообслуживанием. Он работает в среде CPU/GPU. | Быстрый старт |
Рекомендация по следующему пункту (NextItNet) | Совместная фильтрация | Алгоритм, основанный на расширенных свертках и остаточной сети, направленный на захват последовательных шаблонов. Он учитывает как взаимодействие пользователя/элемента, так и его функции. Он работает в среде CPU/GPU. | Быстрый старт |
Ограниченные машины Больцмана (RBM) | Совместная фильтрация | Алгоритм на основе нейронной сети для изучения основного распределения вероятностей для явной или неявной обратной связи от пользователя/элемента. Он работает в среде CPU/GPU. | Быстрый старт/Глубокое погружение |
Риманово низкоранговое пополнение матрицы (RLRMC) * | Совместная фильтрация | Алгоритм матричной факторизации с использованием оптимизации римановых сопряженных градиентов с небольшим потреблением памяти для прогнозирования взаимодействия пользователя и элемента. Он работает в среде процессора. | Быстрый старт |
Простой алгоритм рекомендаций (SAR) * | Совместная фильтрация | Алгоритм на основе сходства для неявной обратной связи с пользователем/предметом. Он работает в среде процессора. | Быстрый старт/Глубокое погружение |
Самостоятельная последовательная рекомендация (SASRec) | Совместная фильтрация | Алгоритм на основе трансформатора для последовательных рекомендаций. Он работает в среде CPU/GPU. | Быстрый старт |
Интегрированный рекомендатель по краткосрочным и долгосрочным предпочтениям (SLi-Rec) * | Совместная фильтрация | Последовательный алгоритм, целью которого является сбор как долгосрочных, так и краткосрочных предпочтений пользователя с использованием механизма внимания, контроллера, учитывающего время, и контроллера, учитывающего контент. Он работает в среде CPU/GPU. | Быстрый старт |
Последовательное моделирование пользователей с учетом множества интересов (SUM) * | Совместная фильтрация | Усовершенствованная модель последовательного пользователя на основе сети памяти, целью которой является учет многочисленных интересов пользователей. Он работает в среде CPU/GPU. | Быстрый старт |
Последовательная рекомендация через персонализированный трансформатор (SSEPT) | Совместная фильтрация | Алгоритм на основе трансформатора для последовательных рекомендаций с внедрением пользователя. Он работает в среде CPU/GPU. | Быстрый старт |
Стандартный ВАЭ | Совместная фильтрация | Генеративная модель для прогнозирования взаимодействия пользователя и элемента. Он работает в среде CPU/GPU. | Глубокое погружение |
Разложение неожиданности/сингулярного значения (SVD) | Совместная фильтрация | Алгоритм матричной факторизации для прогнозирования явной обратной связи по рейтингу в небольших наборах данных. Он работает в среде CPU/GPU. | Глубокое погружение |
Частота термина — обратная частота документов (TF-IDF) | Контентная фильтрация | Простой алгоритм, основанный на сходстве, для рекомендаций на основе контента с наборами текстовых данных. Он работает в среде процессора. | Быстрый старт |
Вовпал Ваббит (VW) * | Контентная фильтрация | Алгоритмы быстрого онлайн-обучения отлично подходят для сценариев, в которых пользовательские функции/контекст постоянно меняются. Он использует процессор для онлайн-обучения. | Глубокое погружение |
Широкий и глубокий | Совместная фильтрация | Алгоритм глубокого обучения, который может запоминать взаимодействие функций и обобщать функции пользователя. Он работает в среде CPU/GPU. | Быстрый старт |
Машина xLearn/факторизации (FM) и FM с учетом поля (FFM) | Совместная фильтрация | Быстрый и эффективный алгоритм прогнозирования меток с учетом функций пользователя/предмета. Он работает в среде CPU/GPU. | Глубокое погружение |
ПРИМЕЧАНИЕ . * указывает на алгоритмы, изобретенные/предоставленные Microsoft.
Независимые или инкубационные алгоритмы и утилиты являются кандидатами для папки contrib. Здесь будут размещаться материалы, которые могут быть нелегко вписаться в основной репозиторий или требовать времени для рефакторинга или доработки кода и добавления необходимых тестов.
Алгоритм | Тип | Описание | Пример |
---|---|---|---|
САРплюс * | Совместная фильтрация | Оптимизированная реализация SAR для Spark. | Быстрый старт |
Мы предоставляем тестовый блокнот, чтобы проиллюстрировать, как можно оценивать и сравнивать различные алгоритмы. В этом блокноте набор данных MovieLens разделен на обучающие/тестовые наборы в соотношении 75/25 с использованием стратифицированного разделения. Модель рекомендаций обучается с использованием каждого из приведенных ниже алгоритмов совместной фильтрации. Мы используем эмпирические значения параметров, представленные здесь в литературе. Для показателей ранжирования мы используем k=10
(10 рекомендуемых элементов). Мы проводим сравнение на стандартной виртуальной машине Azure DSVM NC6s_v2 (6 виртуальных ЦП, 112 ГБ памяти и 1 графический процессор P100). Spark ALS работает в локальном автономном режиме. В этой таблице мы показываем результаты на Movielens 100k, запуская алгоритмы для 15 эпох.
Алго | КАРТА | нДЦГ@к | Точность@к | Напомним@к | RMSE | МАЭ | Р 2 | Объясненная дисперсия |
---|---|---|---|---|---|---|---|---|
БАС | 0,004732 | 0,044239 | 0,048462 | 0,017796 | 0,965038 | 0,753001 | 0,255647 | 0,251648 |
БИВАЭ | 0,146126 | 0,475077 | 0,411771 | 0,219145 | Н/Д | Н/Д | Н/Д | Н/Д |
БПР | 0,132478 | 0,441997 | 0,388229 | 0,212522 | Н/Д | Н/Д | Н/Д | Н/Д |
ФастАИ | 0,025503 | 0,147866 | 0,130329 | 0,053824 | 0,943084 | 0,744337 | 0,285308 | 0,287671 |
СветGCN | 0,088526 | 0,419846 | 0,379626 | 0,144336 | Н/Д | Н/Д | Н/Д | Н/Д |
НКФ | 0,107720 | 0,396118 | 0,347296 | 0,180775 | Н/Д | Н/Д | Н/Д | Н/Д |
САР | 0,110591 | 0,382461 | 0,330753 | 0,176385 | 1,253805 | 1,048484 | -0,569363 | 0,030474 |
СВД | 0,012873 | 0,095930 | 0,091198 | 0,032783 | 0,938681 | 0,742690 | 0,291967 | 0,291971 |
Этот проект приветствует вклад и предложения. Прежде чем внести свой вклад, ознакомьтесь с нашими правилами внесения вкладов.
Этот проект придерживается настоящего Кодекса поведения, чтобы создать гостеприимное и вдохновляющее сообщество для всех.
Эти тесты представляют собой ночные сборки, которые вычисляют асинхронные тесты. main
— наша основная ветка, а staging
— ветка разработки. Мы используем pytest для тестирования утилит Python в рекомендателях и исполнителя блокнота Recommenders для блокнотов.
Дополнительную информацию о конвейерах тестирования см. в документации по тестированию.
Ночные тесты сборки выполняются в AzureML ежедневно.
Тип сборки | Ветвь | Статус | Ветвь | Статус | |
---|---|---|---|---|---|
Linux-процессор | основной | постановка | |||
Linux-графический процессор | основной | постановка | |||
Линукс Спарк | основной | постановка |