Вышел технический репорт Sona: одна модель заменила весь рекомендательный стек Яндекс Музыки.
Опубликован технический репорт Sona: модель заменила весь рекомендательный стек Яндекс Музыки.
Эта модель стала итогом целого года работы. Это лучшее внедрение трансформеров в истории A/B-тестов в Яндекс Музыке.
Главное, что Sona представляет собой одну модель. До этого продакшн-каскад рекомендаций Яндекс Музыки включал 15+ генераторов кандидатов и ранжирование на сотнях ручных фич. Все это заменили единой моделью, которая обучается end-to-end.
Три центральных момента
Раньше в подходах типа OneRec ранжирование считала отдельная модель на ручных фичах. Sona должна была стать единым рецептом обучения и инференса: декодер, который генерирует кандидатов, и ранкер, который их ранжирует, используют один и тот же энкодер user-эмбеддингов. Эти эмбеддинги рассчитываются один раз за запрос. Поэтому нужно обходиться без ручных фич.
Проблема в том, что явный сигнал в виде лайков и репитов довольно редок, чтобы выучить ранжирование напрямую. Поэтому в Sona встроена дистилляция. Сначала обучали Teacher Ranker. Это большая, медленная, но очень умная модель, которую тренировали на годе логов. Она не используется в продакшне и нужна, чтобы научить быстрый Ranking Module воспроизводить ее скоры.
Так как Sona представляет собой encoder-decoder, который обучается хронологически на Next Token Prediction, каждый трек нужно представить в виде токенов. Это называется Semantic ID. Здесь кроется парадокс: чем больше растет словарь токенов, тем модель должна быть умнее, но на самом деле она не успевала эффективно использовать возросшее пространство и деградировала. Поэтому одной из самых сложных частей было создать рецепт токенизации, который обеспечивал бы рост качества при росте словаря. Дьявол кроется в деталях.
Инфраструктура. Переход на одну модель потребовал фактически нового движка рекомендаций, включая сложный online learning pipeline. Кроме того, авторегрессивная генерация с длинными историями обходится дорого, поэтому пришлось прорабатывать отдельные архитектурные трюки: History Compression, кастомные CUDA-кернелы и radix top-k. Все это необходимо, чтобы уложиться в приемлемую латентность.
Результаты
На вопрос, ради чего была проделана эта работа, хорошо отвечают метрики. Sona принесла: +4,53% Active Users, +6,30% Total Listening Time и +11,42% Likes. Это прирост поверх улучшений от предыдущих внедрений, которые оставались в контрольной выборке в продакшне.
В планах команды масштабирование, добавление RL и раскачивание Sona на полный трафик. Поздравляем команду с грандиозными результатами.

