Рекомендательные системы
Общая схема
Рекомендательная система работает в цикле: формируем список кандидатов → отбираем → ранжируем моделью → предлагаем → наблюдаем за взаимодействием → обновляем модель. Основная идея двухэтапного подхода: сначала снижаем число кандидатов, потом ранжируем.
Формальная постановка
\(U\) — множество пользователей, \(I\) — множество объектов. Для некоторых пар известен рейтинг: \((u, i) \to r_{ui}\). Матрица рейтингов \(R = \{(u, i, r_{ui})\}\) разреженная.
Задача: построить модель \(a(u, i) \approx r_{ui}\).
Типы обратной связи:
- Явные (Explicit) — лайки, оценки, отзывы.
- Неявные (Implicit) — добавление в корзину, время чтения, просмотр.
Коллаборативная фильтрация
Идея: для рекомендации используем то, как пользователь взаимодействовал с объектами.
Memory-based CF
Находим похожих пользователей через метрику схожести. Через корреляцию Пирсона:
\[w_{uv} = \frac{\sum_{i \in I_{uv}} (r_{ui} - \bar{r}_u)(r_{vi} - \bar{r}_v)}{\sqrt{\sum_{i \in I_{uv}} (r_{ui} - \bar{r}_u)^2} \cdot \sqrt{\sum_{i \in I_{uv}} (r_{vi} - \bar{r}_v)^2}}\]
Коллаборация пользователя \(u_0\): \(U_{(u_0)} = \{v \in U \mid w_{v, u_0} > \alpha\}\). Предсказание рейтинга объекта \(i\):
\[p_i = \frac{\sum_{v \in U_{(u_0)}} [\exists r_{vi}] \cdot r_{vi}}{\sum_{v \in U_{(u_0)}} [\exists r_{vi}]}\]
Item-based CF
То же самое, но вместо схожести пользователей — схожесть объектов. Плюсы: простота. Минусы: медленно, много памяти, нельзя обучать.
Latent Factor Models
Разложение матрицы рейтингов на скрытые факторы: \(R \approx P \cdot Q^T\), где \(P\) — матрица пользователей, \(Q\) — матрица объектов в пространстве скрытых факторов. Обучается через SGD.
Сессионные рекомендации
Сессия \(s = (o_1, \dots, o_n)\), где \(o_i = (v_j, a_k)\) — объект и тип взаимодействия. Задача:
\[\hat{s} = \mathop{\text{argmax}}_{s \in S,\, c \in C} f(s, c)\]
| Метод | Идея | Учитывает порядок? |
|---|---|---|
| Associative Scores (AS) | Доля пользователей, взаимодействовавших с парой объектов | Нет |
| Sequential Rules (SR) | Учитывает близость взаимодействий \(\frac{1}{|i - j|}\) | Да |
| Markov Chains (MC) | \(P(v_i \to v_j) = \frac{\text{freq}(v_i \to v_j)}{\sum_{v_t} \text{freq}(v_i \to v_t)}\) | Да, строго |