Матричные факторизации
Мы рассматриваем задачи рекомендаций. Нужно порекомендовать пользователю что-нибудь: статьи, фильмы, сериалы, музыку, видео, картинки, товары, и т.п.
В целом задачи рекомендаций можно представить как описание что произошло с пользователем и как ему надо провзаимодействовать. Описание пользователя можно представить по-разному:
как неупорядоченный набор айтемов с которыми пользователь провзаимодействовал (список пролайканых треков)
как неупорядоченный набор айтемов с оценками (оценка пользователем фильмов, или какой-то другой агрегат, например, сколько раз пользователь прослушал трек)
как последовательность айтемов с оценками
как последовательность взаимодействий с учетом контекста
Фитбек пользователя бывает:
explicit или явным (оценки, лайки)
implicit или неявным (клики, скипы)
Мы будем представлять пользователя как неупорядоченный набор айтемов с оценками и пытаться предсказать оценку пользователя на других айтемах.
И важно иметь ввиду, что матрица оценок (таблица, в которой каждая строка представляет собой пользователя, каждый столбец — товар) — очень разреженная матрица.
Простейшими решениями являются Item- и User-based подходы.
Item- и User-based подходы (коллаборативная фильтрация (CF))
User2User — ищем похожесть между юзерами (топ ближайших пользователей, усредненные фитбеки разных пользователей)
Item2Item — ищем похожести между айтемами (например, средняя оценка по наиболее похожим фильмам)
Ниже приведены формулы для Item2Item, но, с точность до замен переменных, будет User2User.
Пусть — матрица похожестей (насколько айтемы и похожи).
В случае оценок (explicit фитбек) в качестве похожести можно считать корреляцию:
В случае взаимодействий (implicit фитбек) можно посчитать меру Жаккара:
Посчитав похожести айтемов (получится матрица ) предсказание для пользователя для айтема:
На самом деле, в качестве элементов матрицы похожестей можно брать не только корреляцию.
Задача SLIMa (Sparse Linear Methods for Top-N Recommender Systems) как раз в том чтобы выучить матрицу похожестей (подобрать ее).
Считать в больших задачах корреляцию слишком тяжело. Обычно, в качестве похожести в каждой строчке для Item2Item оставляют самый ТОП. То есть у каждого айтема есть какое-то топовое количество айтемов на которые он похож (с весами похожести или без). Тогда текущий айтем будет просто усреднением ТОПа. Что, в каком-то смысле, похоже на KNN.
Выбор между Item2Item и User2User зависит от количества оценок на пользователя и на айтем — чем больше, тем надежнее похожесть. Это же приводит к возможности предрасчета: если оценок много, то добавление пары оценок ничего не изменит. Тогда можно обновляться раз в какое-то время. Сами похожести можно использовать для других задач (кандидат-генерация, контекстные рекомендации).
В продакшене в качестве чистого алгоритма рекомендаций ни Item2Item, ни User2User сегодня не используют. Однако, часто используют как какая-то часть рекомендаций.
PCA и SVD, Truncated SVD
Задача PSA — понизить размерность точек в многомерном пространстве линейным способом. Выбрать линейное подпространство такое, чтобы сумма расстояний до него была минимальной (они наилучшим образом приближались этой линейной плоскостью).
Цель — сопоставить каждой точке проекцию на .
Какая же связь у PSA с матричным разложением
Исходная матрица поучила новые координаты в новом пространстве . Пространство имело какие-то базисные вектора ( матрица базиса или поворота). Если мы их запишем, они будут в матричке .
Таким образом, мы пытаемся представить исходную марицу в виде произведения двух матриц и добавить какое-то смещение:
Что же представляет из себя SVD
SVD раскладывает исходную матрицу в виде произведения трех матриц:
причем, и — матрицы поворота.
Если мы будем умножать вектор на SVD-разложение, то сначала мы вектор повернем, потом растянем и еще раз повернем.
При этом, в матрице оставляют столько, сколько было не нулевых компонентов ().
В результате получим усеченные матрицы поворота.
А отбросив самые малозначимые сингулярные числа в матрице мы получим самое лучшее приближение для исходной матрицы .
Truncated SVD как задача оптимизации:
Эквивалентная задача:
где называем вектором пользователя, а — вектором айтема, — коэффициент взаимодействия.
только по заданным элементам.
Интерпретация SVD
Если вернуться к исходной постановке с и развернуть матрицы и правильно, чтобы они стали ортогональными, а нормы вынести в отдельную матрицу между ними, то у этих векторов неожиданно будет появляться какой-то геометрический смысл. Часто можно подобрать какую-то интерпретацию (например, если речь про фильмы, то это могут быть популярность, комедия, ужастик и тд.).
Похожесть между айтемами измеряем как сosine similarity. Но результате, мы выдаем новые айтемы для пользователя, которые дают большое скалярное произведение с вектором пользователя. Чаще всего это будут айтемы с большой нормой. Но, регуляризация, в том числе, борется и с этим.
Алгоритм метода чередующихся наименьших квадратов (Alternating Least-Squares, ALS):
ALS — шаг по
Задача предствляет собой квадратичный функционал. Положим, если мы знаем вектор айтема, то получим квадратичную задачу по вектору юзера.
Минимизируя вектор айтема по оптимальному пользовательскому вектору, очевидно, что не нужно оптимизировать сумму квадратов айтемных векторов (они уже константно заданы).
Раскроем скобки. Уберем сумму квадратов элементов матрицы , которая ни на что не влияет.
Еще немного преобразуем (красным выделила места преобразований):
Нужно получить оптимальное решение для:
Матрично продифференцируем и прировняем к нулю:
Таким образом оптимальная точка:
IALS немного изменяет функционал оптимизации, что позволяет учитывать места, которые важно хорошо оптимизировать (было много взаимодействий).
Итоги SVD
Матричные факторизации (MF) не считывают похожести товаров напрямую (как коллаборативная фильтрация (CF))
MF пытаются описать пользователей и товары маленьким набором характеристик (часто меньше 100), объясняющих оценки
Эти характеристики могут быть неинтерпретируемыми. Как минимум, векторы айтемов и юзеров определены с точностью до поворота
SVD сложно распараллелить