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

Чтобы устранить некоторые ограничения фильтрации на основе контента, совместная фильтрация использует сходства между пользователями и элементами одновременно для предоставления рекомендаций. Это позволяет давать случайные рекомендации; то есть модели совместной фильтрации могут рекомендовать элемент пользователю A на основе интересов аналогичного пользователя B. Более того, встраивания могут изучаться автоматически, не полагаясь на ручную разработку функций.

Пример рекомендации фильма

Рассмотрим систему рекомендаций фильмов, в которой обучающие данные состоят из матрицы обратной связи, в которой:

  • Каждая строка представляет пользователя.
  • Каждый столбец представляет элемент (фильм).

Отзывы о фильмах делятся на две категории:

  • Явный — пользователи указывают, насколько им понравился конкретный фильм, указывая числовой рейтинг.
  • Неявный — если пользователь смотрит фильм, система делает вывод, что ему интересно.

Для упрощения будем считать, что матрица обратной связи является двоичной; то есть значение 1 указывает на интерес к фильму.

Когда пользователь посещает домашнюю страницу, система должна рекомендовать фильмы на основе обоих:

  • сходство с фильмами, которые нравились пользователю в прошлом
  • фильмы, которые понравились подобным пользователям

Для иллюстрации давайте вручную спроектируем некоторые функции для фильмов, описанных в следующей таблице:

Фильм Рейтинг Описание
Восстание темного рыцаря PG-13 Бэтмен пытается спасти Готэм-сити от ядерного уничтожения в этом продолжении «Темного рыцаря» , действие которого происходит во вселенной DC Comics.
Гарри Поттер и Философский Камень PG Мальчик-сирота узнает, что он волшебник, и поступает в Школу чародейства и волшебства Хогвартс, где ведет свою первую битву со злым Лордом Волан-де-Мортом.
Шрек PG Симпатичный людоед и его приятель-ослик отправляются на миссию по спасению принцессы Фионы, которую дракон заточил в своем замке.
Тройняшки из Бельвиля PG-13 Когда профессионального велогонщика Чемпиона похищают во время Тур де Франс, его бабушка и собака с избыточным весом отправляются за границу, чтобы спасти его, с помощью трио пожилых джазовых певцов.
сувенир р Страдающий амнезией отчаянно пытается раскрыть убийство своей жены, вытатуируя улики на своем теле.

1D-встраивание

Предположим, мы присваиваем каждому фильму скаляр в \([-1, 1]\) , который описывает, предназначен ли фильм для детей (отрицательные значения) или для взрослых (положительные значения). Предположим, мы также присваиваем каждому пользователю скаляр в \([-1, 1]\) , который описывает интерес пользователя к детским фильмам (ближе к -1) или фильмам для взрослых (ближе к +1). Произведение внедрения фильма и внедрения пользователя должно быть выше (ближе к 1) для фильмов, которые, как мы ожидаем, понравятся пользователю.

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

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

Изображение матрицы обратной связи, где строка соответствует пользователю, а столбец — фильму. Каждый пользователь и каждый фильм сопоставляются с одномерным внедрением (как описано на предыдущем рисунке), так что произведение двух внедрений аппроксимирует основное истинное значение в матрице обратной связи.

2D-встраивание

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

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

Мы снова помещаем наших пользователей в одно и то же пространство встраивания, чтобы лучше объяснить матрицу обратной связи: для каждой пары (пользователь, элемент) мы хотели бы, чтобы скалярное произведение встраивания пользователя и встраивания элемента было близко к 1, когда пользователь смотрел фильм, и до 0 в противном случае.

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

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

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

Проверьте свое понимание

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