Метод ALS. Как устроен и когда его используют. Вопрос подписчика
ALS’ом иногда по ошибке называют любое матричное разложение в задаче коллаборативной фильтрации. Ну или не по ошибке, а просто жаргон такой сложился. Но давайте разберёмся в деталях.
Матричное разложение возникает, когда мы для рекомендации пользователю айтемов — товаров, фильмов, музыки — смотрим на матрицу с историей взаимодействия. А затем пробуем её приблизить произведением матрицы пользователей и матрицы айтемов.
В этом подходе для пары пользователь-айтем всегда есть два вектора чисел. Один от пользователя: он содержит в себе информацию о том, что тот полайкал, что не полайкал, что дослушал, что не дослушал. Второй — вектор айтема. Например, если это фильм, то здесь будет отражаться жанр, режиссёр, актёры и т. п. Цель — чтобы скалярное произведение этих чисел давало оценку из матрицы как можно точнее.
Важно понимать, что выше я привёл только примеры информации про пользователя и айтем: алгоритм оптимизации в процессе построения матричного разложения сам подберёт числа, и они не обязаны быть интерпретируемы и понятны человеку (наверняка не будут!). Их задача лишь хорошо прогнозировать числа из исходной матрицы.
А вот дальше уже начинается ALS. Мы настраиваем эти векторы для каждого пользователя и каждого айтема с помощью определённого метода оптимизации. ALS на самом деле и есть метод оптимизации.
Итак, нам нужно минимизировать ошибку в прогнозах. Давайте мы сначала будем подбирать вектор юзера, потом вектор айтема. Так по очереди для случайных пар юзер-айтем. Обычно используются квадратичные потери, а оптимальный выбор означает, что нам нужно производные потерь по искомым векторам приравнять к нулю. В выражении уходит квадрат, и всё сводится к решению системы линейных уравнений. Но при этом мы помним, что данные всегда будут с погрешностью.
Так что тут в дело вступает метод наименьших квадратов. Мы выбираем решение, которое с наименьшей погрешностью похоже на решение этой системы.
Работает, кстати, не только с квадратичными потерями. Мы почти всегда можем приблизить потери квадратичными рядом с точкой минимума (для математиков — разложением по Тейлору до второго порядка).
Как вы догадались, ALS часто используется в рекомендательных системах, потому что он даёт более быструю сходимость. Ведь альтернатива ALS — метод стохастического градиентного спуска (SGD) — для большого числа пользователей и айтемов будет сходиться дольше. Я, конечно, видел случаи, когда ALS обучался медленнее SGD. Но, скорее всего, дело было в руках в подборе параметров алгоритма.
Ещё есть iALS (implicit ALS). Он использует пропуски в матрице оценок. То есть, раз мы оценку не знаем, есть вероятность, что айтем пользователю не нравится. Но вес у этих данных меньше: пользователь мог айтем просто не увидеть.
Из небольших инсайдов. Ходят слухи, что долгое время и в ИВИ, и в яндексовских медиасервисах рекомендации строились на базе ALS. Сейчас, разумеется, системы намного сложнее. Но iALS остаётся обязательным к построению бейзлайном, если уж вы взялись за разработку рекомендательной системы.
В сервисах МТС мы используем iALS в рекомендациях, если данных уже достаточно много, чтобы не ограничиваться простым бейзлайном с популярными айтемами, но ещё недостаточно для более сложных нейросетевых моделек. Вроде тех, которые мы сейчас используем в KION (там уже давно вовсю работают сетки).
Также иногда прогноз от iALS хорошо бустит качество более сложных моделей. Векторы из iALS как фичи, как правило, заходят хуже, чем их произведения.
#вопрос_подписчика