Фото: Прадип Нихте

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

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

Но как нам найти похожих пользователей для данного пользователя?

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

Каждая ячейка в матрице равна 1 или 0, что говорит нам о том, смотрел ли пользователь фильм или нет.

Одним из способов вычисления сходства между двумя пользователями (строками) является использование скалярного произведения или косинусного сходства.

Давайте выберем пользователя А; как только мы сравним строку пользователя A с каждой строкой, мы сможем найти наиболее похожую строку; назовем его Пользователь X.

Затем выберите фильм пользователя X, который еще не смотрел пользователь A, и покажите его пользователю A.

Можем ли мы улучшить описанную выше технику?

  1. Вместо того, чтобы искать одного похожего пользователя, мы можем увидеть топ-5 похожих пользователей и показать по одному фильму от каждого пользователя или порекомендовать фильм, который видели все пять похожих пользователей, но не смотрел пользователь А.
  2. Представьте каждую ячейку в матрице оценкой (от 1 до 5), данной пользователем для этого фильма, вместо 1 или 0.
  3. Поскольку в системе будут миллионы пользователей и тысячи фильмов, матрица станет огромной, мы можем использовать методы матричной факторизации для эффективного представления пользователей и фильмов.