Мы рассматриваем задачи рекомендаций. Нужно порекомендовать пользователю что-нибудь (айтемы): статьи, фильмы, сериалы, музыку, видео, картинки, товары, и т.п.
Описание пользователя можно представить по-разному:
Как неупорядоченный набор айтемов с которыми пользователь провзаимодействовал (список пролайканых треков)
Как неупорядоченный набор айтемов с оценками (оценка пользователем фильмов, или какой-то другой агрегат, например, сколько раз пользователь прослушал трек)
Как последовательность айтемов с оценками
Как последовательность взаимодействий с учетом контекста
В статье, в основном, будет говориться о первом и втором случае.
Фитбек пользователя, в свою очередь, бывает явным (оценки, лайки) или неявным (клики, скипы). Причем, у нас нет какого-то строго различия между явным и неявным фитбеком. Позже, при решении задачи рекомендаций, нам понадобится некая уверенность в нашем фитбеке.
Взаимодействия пользователей и айтемов хранятся в матрице оценок(таблица, в которой каждая строка представляет собой пользователя, каждый столбец - товар). Обратите внимание, что это очень разреженная матрица (содержит много нулей).
Простейшими решениями для задач рекомендаций являются Item- и User-based подходы.
Коллаборативная фильтрация (CF)
User2User - ищем похожесть между юзерами (топ ближайших пользователей, усредненные фитбеки разных пользователей)
Item2Item - ищем похожести между айтемами (например, средняя оценка по наиболее похожим фильмам)
Ниже будут приведены формулы для Item2Item, но, с точность до замен переменных, они верны для User2User.
Пусть - матрица похожестей (насколько айтемы и похожи).
В случае оценок (explicit фитбек) в качестве похожести можно считать корреляцию:
В случае взаимодействий (implicit фитбек) можно посчитать меру Жаккара:
Посчитав похожести айтемов (получится матрица ) предсказание для пользователя для айтема считается как:
Однако, считать в больших задачах корреляцию довольно тяжело. Обычно, в качестве похожести в каждой строчке для Item2Item оставляют ТОП. То есть, у каждого айтема есть какое-то топовое количество айтемов на которые он похож (с весами похожести или без). Тогда текущий айтем будет просто усреднением ТОПа. Что, в каком-то смысле, похоже на KNN.
Выбор между Item2Item и User2User зависит от количества оценок на пользователя и на айтем - чем больше, тем надежнее похожесть. Это же приводит к возможности предрасчета: если оценок много, то добавление пары оценок ничего не изменит. Тогда можно обновляться раз в какое-то время. Сами похожести можно использовать для других задач (кандидат-генерация, контекстные рекомендации).
В продакшене в качестве чистого алгоритма рекомендаций ни Item2Item, ни User2User сегодня не используют. Однако, часто используют как какая-то часть рекомендаций.
Матричные факторизации
Еще один подход основан на методе главных компонент (PCA) и матричном разложении (SVD).
Задача PSA - понизить размерность точек в многомерном пространстве линейным способом. Выбрать линейное подпространство такое, чтобы сумма расстояний до него была минимальной (они наилучшим образом приближались этой линейной плоскостью).
Цель - сопоставить каждой точке проекцию на .
Какая же связь у PSA с матричным разложением
Наша исходная матрица оценок получила новые координаты в новом пространстве . Пространство имело какие-то базисные вектора ( матрица базиса или поворота). Если мы их запишем, они будут в матричке .
Таким образом, мы пытаемся представить исходную марицу в виде произведения двух матриц и добавить какое-то смещение:
Что же представляет из себя SVD
SVD раскладывает исходную матрицу оценок на произведение трех матриц:
причем, и - матрицы поворота.
Если мы будем умножать вектор на SVD-разложение, то сначала мы вектор повернем, потом растянем и еще раз повернем.
При этом, в матрице оставляют столько, сколько было не нулевых компонентов ().
В результате мы получим усеченные матрицы поворота. А отбросив самые малозначимые сингулярные числа в матрице мы получим самое лучшее приближение для исходной матрицы .
Поставим задачу оптимизации:
Эквивалентная задача:
где называем вектором пользователя, а - вектором айтема, - коэффициент взаимодействия.
Причем, мы не можем просто применить SVD разложение. Поскольку матрица R содержит большое количество нулей, то и решение всегда будет близко к нулю. Идея Funk SVD в том что мы восстанавливаем матрицу только по заданным элементам. Такая задача оптимизации решается градиентным спуском и довольно хорошо сходится.
Интерпретация SVD
Если вернуться к исходной постановке с и развернуть матрицы и правильно, чтобы они стали ортогональными, а нормы вынести в отдельную матрицу между ними, то у этих векторов неожиданно будет появляться какой-то геометрический смысл. Часто можно подобрать какую-то интерпретацию (например, если речь про фильмы, то это могут быть популярность, комедия, ужастик и тд.).
Похожесть между айтемами измеряем как сosine similarity. Но результате, мы выдаем новые айтемы для пользователя, которые дают большое скалярное произведение с вектором пользователя. Чаще всего это будут айтемы с большой нормой. Но, регуляризация, в том числе, борется и с этим.
Алгоритм метода чередующихся наименьших квадратов (Alternating Least-Squares, ALS):
Инициализируем и случайными значениями
-
В цикле:
Фиксируем матрицу (пользователей).
Находим оптимальную матрицу (решаем гребневую регрессию для каждого товара).
И наоборот
ALS - шаг по
Задача предствляет собой квадратичный функционал. Положим, если мы знаем вектор айтема, то получим квадратичную задачу по вектору юзера.
Минимизируя вектор айтема по оптимальному пользовательскому вектору, очевидно, что не нужно оптимизировать сумму квадратов айтемных векторов (они уже константно заданы).
Раскроем скобки. Уберем сумму квадратов элементов матрицы , которая ни на что не влияет.
Еще немного преобразуем (красным выделила места преобразований):
Нужно получить оптимальное решение для:
Матрично продифференцируем и прировняем к нулю:
Таким образом оптимальная точка:
IALS немного изменяет функционал оптимизации, что позволяет учитывать места, которые важно хорошо оптимизировать (было много взаимодействий).
Итоги SVD:
Матричные факторизации (MF) не считывают похожести товаров напрямую (как коллаборативная фильтрация (CF)). Они пытаются описать пользователей и товары маленьким набором характеристик (часто меньше 100), объясняющих оценки. Причем, эти характеристики могут быть неинтерпретируемыми, но, как минимум, векторы айтемов и юзеров будут определены с точностью до поворота.
Комментарии (4)
Ababaj
10.01.2024 04:51Разговорным языком с искусственным интеллектом сама статья, а на самом деле это линейная алгебра, которую должны знать все технари - о математиках я не говорю!
dmagin
10.01.2024 04:51Какой-то набор слов получился, не? Это ChatGPT нагенерил?
Ну те, кто уже знает, что такое SVD, наверное, поймут, о чем речь. Остальным и вникать не стоит.
19Zb84
А есть возможность это же самое рассказать языком, более приближенным к разговорному ?
vova_sam
Думаю кому то надо список публикаций, а чтобы вы поняли о чем речь :)