Gryphon-v2 в препринте на arxiv
https://arxiv.org/abs/2608.06213
✅ Описываем наш первый успешный результат замены полного рекомендательного стека одной моделью в Яндекс Музыке. По-честному. Никаких спрятанных между строк оговорок, никаких пост-переранжирований и ревард-селекшнов.
✅ Unified архитектура первого Грифона: encoder + decoder + ranking module. Одна модель генерирует кандидатов через Semantic IDs и сразу ранжирует их, используя cross-attention на выходы зашаренного энкодера.
✅ Алайним генерацию и ранжирование с помощью дистилляции. Подробности ниже.
В литературе сейчас есть 2 активных направления ресёрча по объединению кандидато-генерации и ранжирования для замены каскада: OneRec-inspired подходы с RL-ем с одной стороны, и создание unified-архитектур с другой.
Мы долгое время целились в первый подход. Он предполагает, что обучить нужно 2 модели: генеративку на Semantic IDs и ранкер. Ранкер используется для оценки reward на выходах генеративки - чтобы с помощью RL заалайнить модель на более "профитные" выдачи, которые должны больше понравиться пользователям. Для полной замены каскада генеративка должна стать настолько хорошей, чтобы переранжирование уже не требовалось. По факту переранжирование полноценным ранкером при внедрении остаётся практически всегда, хотя это не всегда считывается с текстов статей.
Unified-ресёрч у нас родился незапланированно. Мы стартовали с Process Reward Model (об это рассказывала на дата-фесте). Проверяли, насколько модель подвержена накопленной ошибке beam search, завели и доработали PROMISE для оценки траекторий генерации. По сути в PROMISE уже есть ранжирующий модуль, только скорит он семантики, а не финальные айтемы. Законный вопрос. Если мы можем скорить семантики - почему не сделать это для айтемов? Так и родился Gryphon.
У Грифона была всего одна проблема. Он не RL-ился в чистом виде. Можно за-RL-ить генеративную часть, но в наших экспах на кандидато-генерации мы видели, что даже одно-слойный ранжирующий модуль Грифона значительно меняет итоговую выдачу, при этом с большим приростом на метриках. Как кандген он себя доказал, но end-2-end моделью в первоначальном виде стать не мог. Обучение ранжирующего модуля на фидбеки (как UniPinRec) могло стать логичным следующим шагом, но качественно проучить ранкер без авторегрессии было бы слишком дорого, а авторегрессия в Грифон не ложилась.
Казалось, что для алайна ранжирующий модуль придётся убирать. Мне конечно хотелось, чтобы он остался частью финального рецепта. Мы много вложились в него. Мне нравилась экспрессия архитектуры - потому что мы смогли выбить качество кандидато-генерации выше, чем давал полный softmax по каталогу. Нравилась концепция "сгенерируй варианты, и потом подумай, какие из них лучшие" - аналог рассуждений в ллмках. Мы подумали - и не стали его убирать.
Финальным решением стала роллаут дистилляция ранкера в ранжирующий модуль Грифона. Во время обучения текущий декодер генерирует кандидатов через beam search, а ранжирующий модуль учится воспроизводить скоры учителя для данного роллаута. Так грифон качественнее скорит кандидатов, похожих на те, с которыми встретится на инференсе. По сути это тоже алайн генеративки с ранжирующей моделью, но архитектура самой генеративки более экспрессивная, а вместо RL используется дистилляция (при этом всё ещё на выдаче декодера).
Роллаут дистилляция как финальный рецепт обучения соло-модели по сути вобрала в себя огромный объём ресёрча всей службы. Тут слились вместе идеи и результаты экспов с дистилляцией в рекламном ранжировании, экспы с обучением ранкеров для ревардной оценки в Музыке, экспы с самим Грифоном и генеративкой, идеи из последней литературы, да и сама концепция двух задач в претрейне Аргуса. Всё это стало кирпичиками для итоговых экспов с Gryphon-v2.
Для меня участие в этом проекте было совершенно невероятным опытом.
Post #51
1.39K
- 🔥 30
- ❤ 12
- 🐳 4