Пятнадцать независимых эвристических генераторов кандидатов и тяжелый слой ранжирования на сотнях ручных признаков годами оставались негласным стандартом в рекомендательных системах. Но за эту архитектуру приходилось платить бесконечным ростом технического долга и поддержкой разрозненных пайплайнов, пожирающих инженерные ресурсы.
Команда Яндекс Музыки опубликовала технический отчет (arXiv: 2608.11015), в котором описала результат года инженерной работы — модель Sona. Разработчики полностью снесли многоступенчатый каскад, заменив его единым трансформером, обучаемым end-to-end.
Архитектурный компромисс и дистилляция
Идея собрать рекомендательный конвейер в одну нейросеть звучит логично, но на практике упирается в фундаментальные ограничения инференса. В классических подходах вроде OneRec ранжированием занималась отдельная модель, завязанная на ручные фичи. Чтобы архитектура стала по-настоящему монолитной, генерация кандидатов и финальная сортировка обязаны опираться на общий энкодер пользовательских эмбеддингов, который рассчитывается ровно один раз за запрос.
Главная проблема здесь кроется в разреженности данных: пользователи ставят лайки и включают треки на повтор слишком редко, чтобы научить модель тонкому ранжированию напрямую. Инженеры Яндекса решили задачу через дистилляцию. Сначала на логах за целый год обучили Teacher Ranker — тяжелую офлайн-модель, которая не идет в продакшн, а передает свои оценки компактному модулю ранжирования внутри Sona.
Токенизация каталога и борьба с латентностью
Архитектурно модель построена как энкодер-декодер и обучается хронологически на задаче предсказания следующего токена, где каждый трек кодируется через Semantic ID. В процессе команда столкнулась с парадоксом: с ростом словаря токенов модель теоретически должна работать точнее, но на деле переставала осваивать возросшее пространство и быстро деградировала по метрикам.
Sona – это одна модель. До этого продакшн-каскад рекомендаций Яндекс Музыки включал в себя 15+ генераторов кандидатов плюс ранжирование на сотнях ручных фич. И это все заменили единой моделью, обучаемой end-to-end.
Авторегрессивная генерация на длинных пользовательских последовательностях остается крайне ресурсоемкой задачей. Чтобы уложиться в жесткие SLA стриминга, под капот упаковали сжатие истории (History Compression), кастомные CUDA-кернелы и оптимизированный алгоритм radix top-k.
В продакшне Яндекс Музыки модель доказала жизнеспособность подхода: A/B-тесты зафиксировали прирост на 4,53% по числу активных пользователей, на 6,30% по времени прослушивания и на 11,42% по лайкам поверх уже вычищенной контрольной ветки. Экономика здесь сходится за счет сокращения затрат на поддержку зоопарка микросервисов, однако платить за это приходится дорогостоящим онлайн-обучением трансформеров и полным пересмотром ML-инфраструктуры.