TGViewer
Канал Доброго Вани | Data Science и Продуктики Канал Доброго Вани | Data Science и Продуктики @pleshakovsky · 1.7K subscribers
Post #976 2.11K
Продолжаем говорить про 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 для рекомендаций — это абсолютная классика

Изображение взято из статьи на Хабре
  • ❤ 4
  • 😁 4
  • 🔥 1
  • 🤯 1
More from @pleshakovsky
  1. Jul 24, 2026Стал синьором 😎
  2. May 18, 2026🇵🇪Перу. Наска. День 4: Пустыня, акведуки, Чаучила После перерыва на горную болезнь и пер…
  3. May 2, 2026🇵🇪Перу. Паракас. День 3: Исла Бальестас, Уакачина 🏝️ Вечером второго дня переехав южнее…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →