Одержимость аниме зашла слишком далеко !!

Отаку
Генри Чанг, Джои Чен, Гуаньхуа Чжан, Притика Шривастава и Черри Агарвал

Огромный объем данных, размещенных сегодня в Интернете, привел к переполнению информации, и поэтому существует постоянная потребность в улучшении взаимодействия с пользователем. Механизм рекомендаций - это система, которая помогает пользователям принимать решения, предоставляя им соответствующие прогнозируемые предложения. Они стали неотъемлемой частью нашей повседневной жизни. Они играют свою роль повсюду, от покупок до еды и развлечений.
Аниме - это новый культ, который становится популярным каждый день, особенно в неазиатских странах. Однако не существует механизма рекомендаций, который помогал бы как новичкам, так и опытным Отаку успешно продвигаться в этой области. Поэтому мы, группа Отаку, решили разработать его как часть нашего академического проекта.

Предварительная обработка и исследование данных

Эти данные взяты из Kaggle. Он содержит информацию об аниме и пользователях, которые смотрели его и оценили его. В этом наборе данных более 30 миллионов наблюдений, 100 тысяч пользователей и 6 тысяч анимационных фильмов. Эвристически мы решили избавиться от пользователей, которые оценили очень мало аниме и аниме без рейтинга, для обучения нашей системе рекомендаций. Изучая данные, мы обнаружили, что большинство наших пользователей были из США, за которыми следуют Бразилия и Польша. Самыми популярными жанрами были комедия, мюзикл и приключения. Кроме того, большинству наших пользователей было от 20 до 30 лет.

Модели и алгоритмы

Совместная фильтрация

Существуют механизмы рекомендаций для удовлетворения различных потребностей, и все они имеют разные базовые алгоритмы для решения проблем. Наиболее традиционные из них - это совместная фильтрация, при которой вы, как правило, разделяете матрицу рейтингов (R) на U ser-Embedding (U) и Anime -Embedding (P). Это встраивание, по сути, то, что мы называем скрытыми функциями (в контролируемом машинном обучении). Чтобы изучить этот подход, мы попробовали три алгоритма, а именно. а именно. Альтернативные методы наименьших квадратов (ALS), разложение по сингулярным значениям и нейронные сети.

ALS: это двухэтапный итеративный процесс оптимизации. На каждой итерации он пытается оптимизировать матрицу рейтингов (U * P), решая для U, сначала сохраняя P постоянным, а затем P, сохраняя постоянным U. Мы использовали P ySpark для запуска этого алгоритма с помощью MLlib.

SVD: Чтобы оценить все неизвестное и получить вложения, мы минимизируем регуляризованную квадратичную ошибку с помощью стохастического градиентного спуска. Мы наткнулись на большой сюрприз и использовали его реализацию SVD для обучения нашего алгоритма.

Нейронные сети: здесь мы используем два слоя встраивания для представления пользователей и аниме в качестве входных данных. Взаимодействия (рейтинговая матрица) - целевая переменная. Для каждой пары пользователь-аниме мы вычисляем оценку, используя скалярное произведение их скрытого представления. Затем мы пытаемся минимизировать потери за счет обратного распространения и оптимизировать встраиваемые слои (схема показана ниже).

Мы запускали эту модель в течение 10 эпох, и, поскольку это требовало больших вычислительных ресурсов, мы запускали ее с Keras (серверная часть Tensorflow) на платформе Google Cloud. Эта модель оказалась лучше предыдущих, но не сильно их превзошла. И мы получили еще одну модель совершенно бесплатно! Угадайте, что? АНСАМБЛЬ!!. Эта модель просто усреднила результаты, предсказанные по трем вышеупомянутым моделям.

Как видно, Ensemble превосходит все три алгоритма и дает отличные результаты с NDCG и MAP (подробнее об этом позже). Первоначально мы оценивали наши модели на основе RMSE. Однако наш профессор Dr. Ghosh порекомендовал нам изучить алгоритмы обучения ранжированию (LTR).

Возникает вопрос, зачем нам переходить на алгоритмы LTR? Подумайте об этом так: предположим, что у нас есть два элемента i и j, для которых истинные оценки, как известно, равны 3 и 4 соответственно, и два разных метода предсказали, что оценки для i и j будут равны {2, 5} и {4, 3} соответственно. С точки зрения точности прогнозирования рейтинга, измеряемого абсолютным отклонением от истинного рейтинга, нет никакой разницы между двумя наборами прогнозов. Однако при использовании прогнозов {4, 3} элементы i и j будут упорядочены неправильно, в то время как прогнозы {2, 5} обеспечивают правильный порядок.

Обучение ранжированию

Обучение ранжированию предсказывает ранжирование списка элементов вместо рейтинга. Исходя из статус-кво алгоритмов LTR, на Python не так много ресурсов с открытым исходным кодом для их реализации. В этом проекте у нас была возможность подробно ознакомиться с бумагой Microsoft по LTR и написать их на Python с нуля. Это наши два цента сообществу разработчиков ПО с открытым исходным кодом, работающему над повторными двигателями, и желающим поэкспериментировать с этими алгоритмами. Поскольку это был академический проект, они оказались чрезвычайно полезными и для нашего концептуального обучения. И нам удалось успешно пройти два из них, а именно EigenRank и LambdaMART. EigenRank - это ориентированная на ранжирование версия совместной фильтрации, тогда как LambdaMART - это типичная для контролируемого машинного обучения поисков информации.

Собственный рейтинг: это первый алгоритм совместной фильтрации, основанный на ранжировании. Для каждого пользователя u он пытается найти его окрестность (Nu), используя коэффициент ранговой корреляции Кендалла Тау, а затем вычисляет функцию предпочтения, показанную ниже.

Чем чаще пользователи в Nu присваивают i более высокую оценку, чем j, тем сильнее доказательства для Ψ (i, j) ›0 и Ψ (j, i) ‹0. Функция предпочтения присваивает оценку каждой паре аниме i, j из списка аниме соседей. Наконец, чтобы ранжировать эти аниме, мы используем подход жадного алгоритма.

LambdaMART: он использует деревья с градиентным усилением для прямой оптимизации функций затрат, связанных с ранжированием (например, NDCG). К сожалению, функции затрат не дифференцируются во всех точках. Таким образом, нам нужен прокси для градиентов, который здесь называется Lambda. Это можно рассматривать как силу, которая перемещает аниме вверх и вниз по рейтинговому списку (схема ниже). Самое приятное то, что он также использует особенности как аниме, так и пользователя, такие как популярность, продолжительность, жанры, количество просмотров конкретного пользователя, год выпуска и т. Д. Используя это качество LambdaMART, мы можем дать рекомендации для свежего пользователь.

Мы снова используем меры оценки, такие как NDCG (нормализованная совокупная дисконтированная прибыль) и MAP (средняя средняя точность) для этих моделей LTR.

Как упоминалось ранее, поскольку мы написали код для упомянутых выше двух алгоритмов, он не был супер-масштабируемым. В то время как мы прилагаем усилия, чтобы сделать наш код золотым стандартом, мы протестировали его полезность на небольших данных (~ 0,5M), и он показал отличные результаты, достигнув NDCG: 0,72 (собственный рейтинг) и 0,60 (LambdaMART); MAP равняется 0,63 (EigenRank) и 0,56 (LambdaMART).

Так что давайте разберемся с NDCG и MAP.

Меры оценки

Нормализованный дисконтированный совокупный прирост NDCG: количественно оценивает отклонение прогнозируемого списка ранжирования от идеального списка ранжирования (который представляет собой просто отсортированный порядок элементов на основе рейтинга). Он также осознает тот факт, что весьма актуальные документы более полезны, чем второстепенные.

NDCG @ K - это просто NDCG, рассчитанная для лучших рекомендаций K из нашего двигателя.

MAP - средняя средняя точность: он фиксирует процент релевантных аниме (пользователь в тестовых данных видел их и оценил их высоко) из всех рекомендованных аниме.

MAP @ K - это просто MAP, рассчитанное для лучших рекомендаций K из нашего движка.

Пока что наши рекомендации основаны на истории просмотров пользователя. Что делать, если к нам за рекомендациями по анимации обращаются новые пользователи? Чтобы помочь новым пользователям присоединиться к миру анимации, мы использовали кластеризацию K-средних, чтобы сгруппировать пользователей в разные кластеры, которые разделяют общие предпочтения. для разных жанров. Всего мы создали 5 разных групп: Sci-Fi Junkies, No Preferences, Haters, Lively Youth и Hot Blood Fighters.

Время для шоу

Вот классное видео, демонстрирующее относительное превосходство проверенных нами алгоритмов:

Дальнейшие шаги
(i) Повышение масштабируемости для обучения ранжированию алгоритмов, возможно, путем их написания в Cython.
(ii) Улучшенная разработка функций для LambdaMART.
(iii) Создайте интерфейс для размещения нашего механизма рекомендаций.
(iv) Завершите (i), (ii) и (iii), а затем, возможно, попытаетесь обратиться к венчурному капиталисту для финансирования нашей отдачи сайт двигателя !!

Полный проект и код можно посмотреть на странице https://github.com/Preetikasri/Anime-Recommendation-Engine

Спасибо за прочтение!!