1.8Kпросмотров
98.3%от подписчиков
20 января 2026 г.
📷 ФотоScore: 1.9K
Продолжаем говорить про Next Item Prediction — сегодня про SASRec В прошлом посте мы поставили задачу Next Item Prediction (NIP). Теперь давайте разбирать первый «классический» подход, который обычно открывает эту тему — SASRec (Self-Attentive Sequential Recommendation). Как всегда, держим в голове маркетплейс и нашу матрицу U × D, где у каждого пользователя есть последовательность из последних D действий. 💡 Идея SASRec в двух словах SASRec — это Transformer-only модель, которая использует self-attention, чтобы понять, какие прошлые действия пользователя важны для предсказания следующего айтема. Ключевая мысль простая: не все предыдущие покупки одинаково полезны. Купил чехол для iPhone год назад — сомнительно, что это важно сейчас. Купил айфон вчера — совсем другое дело. 🧱 Из чего состоит SASRec Разберём по шагам. 1️⃣ Embedding-слой Каждый айтем Item_i кодируется в эмбеддинг размерности H, раскладывающийся на • Item Embedding
• Positional Embedding (очень важно!) Почему позиция важна? Потому что последовательности: iPhone → Чехол и Чехол → iPhone — это вообще разные истории. На выходе получаем тензор размера: U × D × H 2️⃣ Masked Self-Attention SASRec использует causal masking, то есть при предсказании айтема на позиции t модель не видит будущие позиции t+1, t+2, ... Иначе был бы читинг. Self-attention отвечает на вопрос, на какие прошлые айтемы стоит обратить внимание, чтобы угадать следующий? Формально — обычный Transformer Encoder:
• Multi-Head Attention
• Residual connections
• LayerNorm Без энкодер-декодер истории, всё строго sequential. 3️⃣ Предсказание Next Item Для каждой позиции t модель пытается предсказать айтем t+1. На практике чаще всего: • берем последнюю позицию
• сравниваем её эмбеддинг со всеми M айтемами
• считаем softmax или sampled softmax
• обучаемся максимизировать вероятность правильного следующего айтема. 🧊 Что с холодными пользователями? SASRec спокойно работает с паддингами: • паддинги маскируются
• attention их просто игнорирует Но важно понимать: SASRec — это purely sequential модель. Что это значит? Если у пользователя 0 или 1 действие, сигнал слабый.
Для совсем холодного старта чаще приходится:
• добавлять популярные айтемы
• комбинировать с non-personalized логикой 👍 Почему SASRec так популярен ✔ Простая и понятная архитектура
✔ Отлично ловит long-range зависимости (по крайней мере, так было в 2018 🤷♂️)
✔ Хорошо масштабируется на большое число айтемов Не зря его до сих пор используют как точку отсчета почти во всех статьях про NIP. 👀 Ограничения, о которых важно помнить ✖ Нет bidirectional-контекста (в отличие от BERT4Rec)
✖ Не использует user features
✖ Плохо решает cold start без костылей
✖ Использует только позтивные действия в истории пользователя (в то время, как негативные действия могут быть полезны для понимания контекста, что отображено в статьях про Аргус). Так например, для онлайн-кинотеатра мы будем использовать только историю просмотра, хотя могли бы учитывать и те фильмы, от просмотра которых юзер отказался. Но как первый серьезный Transformer для рекомендаций — это абсолютная классика Изображение взято из статьи на Хабре