Вступление

В этой статье я опишу алгоритм, который можно применить в качестве этапа постобработки, чтобы уменьшить предвзятость популярности, присущую системам рекомендаций на основе совместной фильтрации. Содержание статьи основано на работе [1]. Код для воспроизведения результатов и цифр можно найти в этом репозитории.

Я предполагаю, что читатель знаком с концепцией совместной фильтрации в контексте рекомендательных систем.

Мотивация

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

  1. Не все хотят следовать вкусам основной массы. Например, некоторые люди предпочитают носить одежду от небольших независимых брендов, а не от Uniqlo, Under Armour или Urban Outfitters.
  2. Это мешает новым или нишевым производителям быть замеченными пользователями, поскольку небольшое взаимодействие, которое они получают, бледнеет по сравнению с взаимодействиями, полученными популярными производителями.

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

Постановка задачи

Чтобы сделать вещи более конкретными, мы будем следовать [1] и использовать MovieLens 20M Datase t, чтобы изменить систему рекомендаций для выработки более справедливых рекомендаций с точки зрения как зрителей, так и продюсеров.

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

Методология

Обзор

Отправной точкой решения, представленного в [1], является разделение фильмов на «короткие головы» и «длинные хвосты» на основе количества оценок, полученных фильмом.

Короткая голова относится к популярным фильмам, а длинный хвост - менее популярным. Важно отметить, что в этом контексте фильм считается «длинным хвостом», потому что он имеет относительно меньшее количество взаимодействий по сравнению с фильмами с «короткой головой». Если у фильма значительно меньше или даже нет взаимодействий, то его следует классифицировать как отдаленный хвост, и для того, чтобы показать его пользователям, необходим другой метод рекомендаций.

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

Проектирование, построение и тестирование рекомендательной системы будет продолжаться как обычно, безотносительно к выработке справедливых рекомендаций.

Справедливость вступает в игру только во время испытаний. Во время тестирования [1] создал список из 100 фильмов, которые можно рекомендовать зрителю. Этот список можно сузить до 10 фильмов, выполнив действия, описанные в следующем разделе.

Создание рекомендаций

Предположим, у нас есть набор из 8 фильмов, которые, по мнению рекомендательной системы, понравятся зрителю. По дизайну этот список уже отсортирован по вероятности просмотра. Наша задача - определить, какие 5 из 8 фильмов на самом деле будут показаны зрителю.

На рисунке 2 показан этот процесс выбора:

На рис. 2 S - это 8 фильмов из рекомендательной системы. R - это список из 5 фильмов, которые мы будем рекомендовать зрителю. Мы повторно оцениваем фильмы в S и удаляем фильм с наивысшим баллом (чтобы поставить в R), пока R не наберет 5 фильмов.

Функция подсчета очков

В предыдущем разделе упоминалось о необходимости повторно оценивать фильмы в S. Вот реализация (математический вывод можно найти в [1]):

Из всех терминов на Рисунке 3 category_pref, вероятно, потребует дополнительных пояснений.

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

Функция оценки на рисунке 3 позволяет повысить оценку фильма, если его категория соответствует предпочтениям зрителя. Например, если короткометражный фильм имеет оценку 0,70, а зритель предпочитает 0,90 для длиннохвостых фильмов, то новая оценка фильма будет 0,80, если в R нет других длиннохвостых фильмов. Это увеличивает вероятность того, что фильм I будет включен в R как первый длиннохвостый фильм, который будет показан зрителю. Степень повышения регулируется параметром longtail_weight.

Стоит отметить, что значение weighted_category_booster быстро падает до 0 по мере того, как R становится больше из-за того, что третий член возведен в степень длины R.

Полученные результаты

Я проверил эффективность этого метода, сначала обучив модель БАС на подмножестве набора данных MovieLens 20M. Я разделил тестовых пользователей на две группы, используя предпочтение длинного хвоста 0,5 в качестве точки отсечения, и случайным образом выбрал 250 пользователей из каждой группы.

Как и в [1], я вычислил NDCG @ 10 как с этапом постобработки, так и без него в качестве прокси, чтобы убедиться, что изменение рекомендаций не сильно повлияло на производительность рекомендательной системы. Я оцениваю влияние этапа постобработки, вычисляя общее количество уникальных длиннохвостых фильмов между процедурами. Вот результаты:

Результаты согласуются с [1]: наблюдается небольшое падение показателя NDCG и заметное увеличение представления рекомендуемых фильмов с длинным хвостом. Конечно, эти результаты должны быть подтверждены онлайн-тестом A / B.

Заключение

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

Этот метод на удивление прост, и мне действительно любопытно узнать, как он работает в реальной среде. Сообщите мне в комментариях, если вы встречали похожие методы, которые были протестированы на производственных системах.

использованная литература

[1]. Управление предвзятостью популярности в рекомендательных системах с помощью персонализированного перерейтинга; Abdollahpouri et. al. 2019 г.