В прошлом уроке PCA раскладывала данные по немногим осям. Тот же приём низкого ранга работает и там, где таблица почти пустая: в рекомендациях. Мы дадим каждому пользователю и каждому фильму короткий вектор так, чтобы скалярное произведение предсказывало оценку, а близость векторов рисовала карту вкусов. Все числа ниже посчитаны на настоящих оценках MovieLens.

Почти пустая матрица

Пусть ruir_{ui} — оценка, которую пользователь uu поставил фильму ii. В таблице «пользователи × фильмы» заполнена лишь малая часть клеток: в наборе MovieLens 100K это 100000100\,000 оценок при 943943 пользователях и 16821682 фильмах — меньше одной клетки из ста. Пустую клетку нельзя заменить нулём: пропуск означает «не смотрел», а не «не понравилось».

Поэтому модель учат только на наблюдаемых парах Ω\Omega. Матричная факторизация приближает оценку так:

r^ui=μ+au+bi+puqi,\hat r_{ui}=\mu+a_u+b_i+p_u^\top q_i,

где μ\mu — общая средняя оценка, aua_u — щедрость пользователя, bib_i — репутация фильма, а pu,qiRdp_u,q_i\in\mathbb R^d — короткие латентные векторы.

Сначала смещения, потом факторы

Прежде чем гнаться за латентными векторами, стоит выжать простое. Уже одни смещения r^ui=μ+au+bi\hat r_{ui}=\mu+a_u+b_i учитывают, что один зритель ставит всем на балл выше, а иной фильм всем нравится сильнее среднего. Это сильный базовый уровень.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Каскадная диаграмма реального прогноза MovieLens: общая средняя 3,53, плюс вкус пользователя 0,13, плюс репутация фильма 0,38, плюс совпадение вкусов 0,68, итог 4,72 при истинной оценке 5
Рис. 39.1. Из чего складывается прогноз оценки

Реальный прогноз, разложенный на вклады: общая средняя, щедрость пользователя, репутация фильма и, наконец, совпадение вкусов puqip_u^\top q_i. Латентные векторы берут на себя только то, что не объяснили смещения.

Карта вкусов

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

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Двумерная карта векторов фильмов MovieLens. Star Wars рядом с научной фантастикой, Крёстный отец и Криминальное чтиво в одном углу, семейные фильмы в другом; подпись, что оси не имеют закреплённого смысла
Рис. 39.2. Карта вкусов из настоящих оценок

Двумерные векторы фильмов, обученные только по оценкам. «Звёздные войны» садятся рядом с фантастикой, «Крёстный отец» и «Криминальное чтиво» — в своём углу. Никто не задавал жанров: близость возникла из того, кто как оценивал.

Замечательно, что карта восстановила смысл, которого ей не сообщали: соседями оказываются продолжения и фильмы одного жанра. Это и есть сила низкого ранга — несколько чисел на объект улавливают структуру вкусов.

Потрогай карту

Ваш вектор вкуса и рекомендации

Загружается живая иллюстрация…

Перетаскивайте свой вектор вкуса по настоящей карте MovieLens. Прогноз оценки каждого фильма — это средняя плюс репутация фильма плюс скалярное произведение вашего вектора на вектор фильма. Справа список меняется: система рекомендует то, что смотрит в сторону вашего вектора.

Оси карты можно повернуть

У красивой карты есть подвох: отдельная ось не имеет закреплённого смысла. Для любой ортогональной матрицы RR (поворота) скалярные произведения сохраняются:

(Rpu)(Rqi)=puRRqi=puqi.(Rp_u)^\top(Rq_i)=p_u^\top R^\top R\,q_i=p_u^\top q_i.

Значит, всю карту можно повернуть — прогнозы не изменятся ни на йоту. Поэтому нельзя объявить «первая координата — это комедийность»: смысл проверяют соседями и корреляцией с известными атрибутами, а не подписью к одной оси.

::::

Сколько факторов брать

Больше факторов — гибче модель, но и выше риск переобучения на редких объектах. Проверим на отложенных оценках, как ошибка зависит от числа факторов dd.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Три кривые RMSE на тесте против числа факторов: все оценки падают с 0,94 при одних смещениях до 0,91; популярные фильмы (head) предсказываются точнее, редкие (tail) держатся около 1,05
Рис. 39.3. Ошибка против числа факторов

Ошибка на тесте падает с 0,940{,}94 (одни смещения) до примерно 0,910{,}91 и выходит на полку. Популярные фильмы всегда предсказываются точнее редких: у них больше оценок, и вектор устойчивее.

Обратите внимание: одни смещения уже дают 0,940{,}94, а факторы улучшают лишь до 0,910{,}91. Сложность обязана зарабатывать право на ответ — если персональный вектор не бьёт базовый уровень, он не нужен.

Популярные и редкие

Средняя ошибка почти целиком отражает частые объекты: у фильма с тысячей оценок вектор устойчив, у фильма с двумя — почти шум. Поэтому тест разбивают по числу известных взаимодействий на группы (популярные, хвост, холодные) и показывают ошибку каждой. Одно среднее число прячет, что каталог для редких фильмов работает хуже. Мало того, и среднее считать можно по-разному: усреднение по всем событиям неявно даёт больший вес активным пользователям, оставившим много оценок, а усреднение по пользователям отвечает на другой вопрос — как система обслуживает типичного человека, а не типичный клик.

Холодный старт

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

Русская линия ведёт к Л. В. Канторовичу — математику и экономисту, нобелевскому лауреату, создателю линейного программирования и теории оптимального распределения ресурсов. Рекомендация по духу и есть оптимальное распределение внимания, а низкий ранг — наилучшее простое приближение сложной таблицы, ровно в канторовичевом смысле.

Коротко о рекомендациях

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

Задачи