Production RecSys
~20 мин

ARGUS: Scaling RecSys Transformers

ARGUS (Яндекс) — масштабирование рекомендательных трансформеров до 1B параметров. NIP + FP, scaling laws.

ARGUS — как Яндекс масштабировал рекомендательные трансформеры до 1B параметров

ARGUS (AutoRegressive Generative User Sequential modeling) — новый подход Яндекса к обучению рекомендательных трансформеров. Впервые в индустрии удалось масштабировать энкодер пользовательской истории до 1 миллиарда параметров и показать, что scaling laws работают не только в NLP, но и в рекомендациях. Модель уже внедрена в Яндекс Музыку, Маркет и Лавку — и везде дала серьёзный прирост метрик.

Проблема: почему рекомендательные трансформеры были маленькие

В NLP трансформеры давно вышли на миллиарды параметров — GPT-4, LLaMA, Gemini. А вот в рекомендательных системах до недавнего времени энкодеры пользовательской истории редко превышали 1-10 миллионов параметров. SASRec — два трансформерных блока с hidden size ~200. Даже HSTU от Meta дотянул только до 176M. Почему?

  • Данные: классические модели (SASRec, BERT4Rec) видели только положительные взаимодействия — клики, покупки, лайки. Всё остальное выбрасывалось. Это как учить GPT только на хороших текстах — мало данных.
  • Задача: стандартный Next Item Prediction предсказывает следующий «позитивный» айтем. Это слишком узкая задача — нет декомпозиции на множество подзадач, как next token prediction в NLP.
  • Архитектура: маленькая история, маленький контекст, нет информации о «ситуации» пользователя (устройство, страница, настройки).
Двухбашенная нейросеть с трансформером: история пользователя → трансформер → вектор пользователя → скалярное произведение с вектором айтема
Классическая двухбашенная архитектура с трансформером. Источник: Яндекс / Хабр

Три условия scaling

Команда Яндекса сформулировала три необходимых условия для успешного масштабирования нейросетей — и все три должны выполняться одновременно:

  • Много данных — триллионы взаимодействий пользователей с сервисами
  • Выразительная архитектура — трансформеры с большой ёмкостью
  • Максимально общая задача обучения — не узкая классификация, а фундаментальное «понимание мира»

Первые два пункта в рексистемах были всегда. Проблема была в задаче. Стандартный NIP от SASRec — слишком узкий. ARGUS решает это с помощью новой формулировки.

Ключевая идея: полная история пользователя

ARGUS не выбрасывает «неинтересные» события. Вместо последовательности только лайков или покупок, модель видит ВСЮ анонимизированную историю пользователя — и лайки, и скипы, и просто просмотры. Каждое событие кодируется тройкой: (context, item, feedback).

ARGUS: формат входных данных — тройки (context, item, feedback)
Формат входных данных ARGUS. Каждое событие — тройка. Источник: Яндекс / Хабр
  • Context — контекст взаимодействия: рекомендательный или органический трафик, какая «поверхность» (Моя волна, поиск, библиотека), настройки, устройство
  • Item — объект взаимодействия (трек, товар, видео). Кодируется через item ID и unified embeddings
  • Feedback — реакция пользователя: лайк, скип, доля прослушивания, добавление в плейлист

Аналогия с LLM

Как GPT учит «фундаментальные знания о мире» через предсказание следующего токена, ARGUS учит фундаментальные знания о пользователях. «Ответы из интернета» — это действия прошлых рексистем. «Фундаментальные знания» — это понимание пользователей, их паттернов и предпочтений. Промт «представь, что ты хороший специалист» → контекст в рексистеме.

Две головы: NIP + FP

Вместо одной задачи ARGUS решает две одновременно — и это ключевое отличие от всех предшественников.

ARGUS Next Item Prediction: предсказание следующего айтема по истории и контексту
NIP-голова: P(item | history, context). Источник: Яндекс / Хабр

Next Item Prediction (NIP) — предсказываем, с каким айтемом будет следующее взаимодействие: P(item | history, context). Важно: в отличие от SASRec, предсказываем не только позитивные, но ВСЕ взаимодействия. Если в истории есть рекомендательный трафик — модель учится имитировать логирующую политику (действия прошлых рексистем). Если есть органический трафик — учит понимать пользователя глубже.

ARGUS Feedback Prediction: предсказание реакции пользователя по истории, контексту и айтему
FP-голова: P(feedback | history, context, item). Источник: Яндекс / Хабр

Feedback Prediction (FP) — предсказываем реакцию пользователя на айтем: P(feedback | history, context, item). Будет ли лайк? Какая доля трека будет прослушана? Это чисто про пользователя — его предпочтения, вкусы, настроение. Чем больше модель, тем лучше она учится предсказывать все типы фидбека одновременно — knowledge transfer между частым (прослушивания) и редким (лайки) сигналом.

ARGUS: объединённая схема обучения с двумя головами — NIP и FP
Полная схема обучения ARGUS: трансформер с двумя головами. Источник: Яндекс / Хабр

ARGUS vs SASRec — ключевое сравнение

Сравнение ARGUS и SASRec: ARGUS видит всю историю и имеет две головы, SASRec — только позитивные взаимодействия и одну задачу
ARGUS vs SASRec — ключевая разница подходов. Источник: Khrylchenko et al., KDD 2026

Загрузка интерактивного виджета...

  • SASRec видит только положительные взаимодействия → ARGUS видит всю историю (позитив + негатив + контекст)
  • SASRec: одна задача (next positive item) → ARGUS: две задачи (NIP для всех взаимодействий + FP)
  • SASRec не моделирует логирующую политику → ARGUS явно учится имитировать поведение прошлых рексистем
  • SASRec не учит предпочтения пользователей → ARGUS через FP-голову учит «фундаментальные знания» о пользователях

А что HSTU от Meta?

HSTU (Actions Speak Louder than Words, 2024) — тоже шаг вперёд, но более скромный. HSTU учит кандген-модель только на положительных взаимодействиях (как SASRec). NIP и FP — в разных моделях. Плюс Яндекс показал, что архитектура HSTU не лучше обычного трансформера при тех же параметрах. ARGUS объединяет обе задачи в одну модель и масштабируется дальше.

Sampled Softmax — как обучить NIP-голову

NIP-задача формулируется как классификация по всему каталогу. Проблема: каталог — это миллионы или миллиарды айтемов. Полный softmax посчитать невозможно (в отличие от LLM, где словарь — сотни тысяч токенов). Решение — sampled softmax с logQ-коррекцией:

Sampled Softmax loss для NIP-головы. N — множество негативных семплов, Q(n) — вероятность семплирования негатива

  • f(h, i) — скалярное произведение (или косинусная близость) скрытого состояния пользователя h и эмбеддинга айтема i
  • τ — обучаемая температура (клипается в диапазоне [0.01, 100])
  • N — негативные семплы: смесь in-batch негативов и равномерно случайных
  • logQ(n) — коррекция за bias семплирования. Без неё модель начнёт «бояться» популярных айтемов, которые чаще попадают в негативы
import torch
import torch.nn.functional as F

def sampled_softmax_loss(
    user_hidden,      # (batch, d) — скрытое состояние пользователя
    pos_item_emb,     # (batch, d) — эмбеддинг позитивного айтема  
    neg_item_embs,    # (batch, K, d) — K негативных айтемов
    log_q_neg,        # (batch, K) — log вероятностей семплирования
    temperature=0.07, # обучаемая температура
):
    """Sampled Softmax с logQ-коррекцией (как в ARGUS NIP-head)."""
    # Скоры для позитивного айтема
    pos_score = (user_hidden * pos_item_emb).sum(-1, keepdim=True) / temperature
    
    # Скоры для негативных, с коррекцией за sampling bias
    neg_scores = torch.bmm(neg_item_embs, user_hidden.unsqueeze(-1)).squeeze(-1)
    neg_scores = neg_scores / temperature - log_q_neg  # logQ correction!
    
    # Softmax loss: позитивный должен быть выше негативных
    logits = torch.cat([pos_score, neg_scores], dim=-1)  # (batch, 1+K)
    labels = torch.zeros(logits.size(0), dtype=torch.long, device=logits.device)
    return F.cross_entropy(logits, labels)

# В ARGUS: K=2048-8192 негативов, in-batch + random
# Без logQ коррекции: популярные айтемы наказываются непропорционально

Scaling Laws для RecSys

Главный результат: ARGUS впервые показал scaling law для рекомендательных трансформеров. Четыре конфигурации — 3.2M, 42M, 151M, 1.007B параметров — и линейная зависимость качества от логарифма размера модели. Каждое увеличение даёт предсказуемый прирост. Это значит, что рекомендательные модели МОЖНО масштабировать, как LLM.

Scaling law: линейная зависимость качества от логарифма числа параметров (4 точки от 3.2M до 1B)
Scaling law для RecSys трансформеров. Источник: Khrylchenko et al., KDD 2026

Бонус: HSTU-архитектура от Meta при 1.5x параметрах показала качество на уровне Medium трансформера. Обычный трансформер оказался не хуже (а то и лучше) кастомной архитектуры — проще, надёжнее, масштабируемее.

Авторегрессивное обучение — почему это быстро

Раньше для каждого «показа» рекомендации нужно было заново прогонять трансформер. Если у пользователя 10 000 событий за год — это 10 000 прогонов. ARGUS делает авторегрессивное обучение: один прогон трансформера с каузальной маской по всей истории — и сразу получаем скрытые состояния на все моменты времени. Ускорение: от 10 до 1000 раз.

Это позволило за те же вычислительные ресурсы обучать модели радикально большего размера. А на дообучении (fine-tuning на попарное ранжирование) — тоже один прогон: берём все показы рекомендаций за год, сопоставляем с нужными скрытыми состояниями и считаем все лоссы сразу.

Результаты: +12% TLT, +10% like likelihood

Эволюция трансформеров v1 → v5 (ARGUS) в Яндекс Музыке
Путь от v1 до ARGUS в Яндекс Музыке. Источник: Яндекс / Хабр

ARGUS прошёл через 5 поколений трансформеров в Яндекс Музыке. Первый ARGUS дал примерно такой же прирост метрик, как все 4 предыдущих внедрения суммарно. В режиме «Незнакомое» Моей волны:

  • +12% TLT (Total Listening Time) — суммарное время прослушивания
  • +10% like likelihood — вероятность лайка при включении рекомендации
  • История 8K событий (раньше макс. 1.5-2K)
  • Датасет: 300+ млрд прослушиваний от миллионов пользователей
Результаты A/B-тестов ARGUS: приросты TLT и like likelihood по поколениям трансформеров
A/B-тесты: ARGUS дал прирост равный всем предыдущим поколениям суммарно. Источник: Яндекс / Хабр

ARGUS уже внедрён в Яндекс Музыку (включая умные колонки), Маркет (и как ранжирование, и как генератор кандидатов) и Лавку. Команда Музыки адаптировала офлайн-ARGUS в рантайм-версию.

🎯 Что знать для собеседования

• Почему рекомендательные трансформеры были маленькие? → Три условия scaling: данные (только клики), задача (только NIP), архитектура (маленький контекст) • Чем NIP в ARGUS отличается от NIP в SASRec? → ARGUS предсказывает ВСЕ взаимодействия (не только позитивные), учитывает контекст • Зачем две головы? → NIP учит имитировать логирующую политику, FP учит понимать пользователей. Вместе — фундаментальная модель • Что такое logQ-коррекция в sampled softmax? → Компенсация bias: популярные айтемы чаще попадают в негативы, без коррекции модель их штрафует • Scaling law в RecSys? → Линейная зависимость от log(params), 4 точки: 3.2M → 1B. Впервые показано для рексистем • Авторегрессивное vs impression-level обучение? → Один прогон трансформера на всю историю vs повторный прогон на каждый показ. Ускорение 10-1000x • ARGUS vs HSTU? → HSTU учит NIP/FP раздельно, только позитивные в кандгене. ARGUS — обе задачи в одной модели, все взаимодействия • Как внедряли? → Офлайн двухбашенная модель, ежедневный пересчёт векторов, скалярное произведение в рантайме. Признак в финальный ранкер (CatBoost)