Немного картинок для тех, кому лень открывать презентацию :)
1🔥22❤6👍4👀1
Новый подкаст с Суцкевером уже все видели, а я хочу подсветить еще два свежих подкаста:
* John Schulman (со-основатель OpenAI, автор TRPO / PPO, сейчас работает в thinking machines); про RL, ресерч, академию и индустрию — ссылка
* Новый подкаст с Demis Hassabis; по сути, подводит итоги года и хвастается успехами :) ссылка
Еще у Шульмана есть небольшой гайд про то, как заниматься ресерчем — “An Opinionated Guide to ML Research” (ссылка). Он 2020-го года, но актуальность не потерял — разве что, по словам самого Шульмана, стоило бы добавить секцию про использование LLM.
Из того, что тоже хотел осветить, но руки все не доходили — в Spotify продолжают пушить разговорные рекомендации. Буквально пару недель назад я рассказывал на лекции свое видение развития рексистем; что разговорные рекомендации — это способ уйти от манипуляций и дать пользователям больше контроля над алгоритмами. И, судя по постам менеджмента Spotify (см. скрин с Линкедина), позиция у них похожая. С технической точки зрения их подход, вероятно, довольно близок к PLUM (см. недавний блог пост).
А что касается меня — я сейчас активно занимаюсь ресерчем :) В этом году появились первые публикации, вернулся к преподаванию и сильно сменил фокус — с внедрений на науку и исследования. Год получился богатым на перемены.
С наступающим. Спасибо, что читаете!
* John Schulman (со-основатель OpenAI, автор TRPO / PPO, сейчас работает в thinking machines); про RL, ресерч, академию и индустрию — ссылка
* Новый подкаст с Demis Hassabis; по сути, подводит итоги года и хвастается успехами :) ссылка
Еще у Шульмана есть небольшой гайд про то, как заниматься ресерчем — “An Opinionated Guide to ML Research” (ссылка). Он 2020-го года, но актуальность не потерял — разве что, по словам самого Шульмана, стоило бы добавить секцию про использование LLM.
Из того, что тоже хотел осветить, но руки все не доходили — в Spotify продолжают пушить разговорные рекомендации. Буквально пару недель назад я рассказывал на лекции свое видение развития рексистем; что разговорные рекомендации — это способ уйти от манипуляций и дать пользователям больше контроля над алгоритмами. И, судя по постам менеджмента Spotify (см. скрин с Линкедина), позиция у них похожая. С технической точки зрения их подход, вероятно, довольно близок к PLUM (см. недавний блог пост).
А что касается меня — я сейчас активно занимаюсь ресерчем :) В этом году появились первые публикации, вернулся к преподаванию и сильно сменил фокус — с внедрений на науку и исследования. Год получился богатым на перемены.
С наступающим. Спасибо, что читаете!
🎄36🔥12❤🔥4❤4🥰2👍1
В следующую субботу, 24-го числа, пройдет Data Ёлка 2025.
В прошлом году я выступал на дата ёлке с докладом "Нейросетевой мир победил"; рассказывал свое решение соревнования VK RecSys Challenge 2024.
А в этом году с докладом "Итоги года в Recsys" выступит Владимир Байкалов, который раньше работал в моей бывшей команде в Яндексе. Приходите послушать! Я сам тоже, возможно, загляну.
А еще Владимир недавно завёл тг-канал — @ducks_recs. Подписывайтесь :)
В прошлом году я выступал на дата ёлке с докладом "Нейросетевой мир победил"; рассказывал свое решение соревнования VK RecSys Challenge 2024.
А в этом году с докладом "Итоги года в Recsys" выступит Владимир Байкалов, который раньше работал в моей бывшей команде в Яндексе. Приходите послушать! Я сам тоже, возможно, загляну.
А еще Владимир недавно завёл тг-канал — @ducks_recs. Подписывайтесь :)
❤21🔥11
xAI выложили в опенсорс код своей новой рекомендательной системы (X / Твиттера).
https://github.com/xai-org/x-algorithm/
Код довольно простенький. Что можно сказать:
* используют jax
* постарались избавиться от эвристик и ручного feature engineering'а
* как и раньше, кандидаты набираются из двух источников — подписки и ML (раньше TwHIN, теперь двухбашенный трансформер)
* в качестве ранжирующей нейросети — тоже трансформер (раньше был MaskNet / DCN / etc)
* также выложили цельный многостадийный рекомендательный пайплайн — набор кандидатов, фильтрации, ранжирование, буст разнообразия авторов, постфильтрации
* есть только код инференса, про обучение инфы нет
Архитектура трансформера дефолтная (вижу роторные эмбеды, rmsnorm) и форкнута с Grok'а. Важно: предобученный Grok не используется, только код. И вообще, везде в тестах и конфигах указаны очень маленькие размеры трансформера (аля два слоя и hidden size 128). Длина используемой истории пользователя в конфигах — то ли 128, то ли 32 (в разных местах по-разному написано). Одинаковая архитектура трансформера используется и в ранжировании, и в кандгене.
Для кодирования сущностей (постов, авторов, пользовательских признаков) используют multi-hash lookup: делают что-то типа
Еще как будто берут мультихэши от айдишника пользователя и подают в трансформер вместе с историей пользователя.
Башня кандидата в двухбашенном трансформере для кандгена очень простая — Linear(SiLU(Linear)).
Ранжирующий трансформер устроен таким образом, что history+user токены видят только history+user токены, а каждый кандидат видит себя и history+user токены (кастомная аттеншн маска). Подают сразу несколько кандидатов, но работает это эквивалентно тому, как если бы отдельно прогнали трансформер для каждого кандидата, добавляя его в конец последовательности.
Multi-action prediction: трансформер предсказывает вероятности сразу для кучи разных сигналов (like, reply, click, repost — полный список в репозитории). Для финального ранжирования, эти вероятности суммируются с весами в единый скор (но как подбираются веса — не пишут). Такую схему использовали и в прошлой ранжирующей нейросети, но только теперь эти вероятности приходят напрямую из трансформера.
tldr: довольно простой пайплайн на трансформерах. Двухбашенный кандген, нейросетевое ранжирование, мультихэши для эмбеддингов. С одной стороны — всё супер просто, ничего особо интересного. С другой — если получилось заменить прошлую рексистему и ничего не сломать — это круто :)
Предполагаю, что какие-то подробности / детали все же не раскрываются (e.g. как рекомендуется холодный контент — для этого должны быть какие-то еще эмбеды кроме мультихэшей).
Из забавного — всю эту трансформерную поделку в xAI решили назвать "Феникс". Когда-то я в Яндексе инициировал похожий проект про упрощение ранжирования в единую нейросеть с трансформером, и тоже назвал её Фениксом. Вот так вот нейминги совпали :)
https://github.com/xai-org/x-algorithm/
Код довольно простенький. Что можно сказать:
* используют jax
* постарались избавиться от эвристик и ручного feature engineering'а
* как и раньше, кандидаты набираются из двух источников — подписки и ML (раньше TwHIN, теперь двухбашенный трансформер)
* в качестве ранжирующей нейросети — тоже трансформер (раньше был MaskNet / DCN / etc)
* также выложили цельный многостадийный рекомендательный пайплайн — набор кандидатов, фильтрации, ранжирование, буст разнообразия авторов, постфильтрации
* есть только код инференса, про обучение инфы нет
Архитектура трансформера дефолтная (вижу роторные эмбеды, rmsnorm) и форкнута с Grok'а. Важно: предобученный Grok не используется, только код. И вообще, везде в тестах и конфигах указаны очень маленькие размеры трансформера (аля два слоя и hidden size 128). Длина используемой истории пользователя в конфигах — то ли 128, то ли 32 (в разных местах по-разному написано). Одинаковая архитектура трансформера используется и в ранжировании, и в кандгене.
Для кодирования сущностей (постов, авторов, пользовательских признаков) используют multi-hash lookup: делают что-то типа
linear(concat(embedding(hash1), embedding(hash2))). В конфигах везде указаны num_hashes=2, то есть по два лукапа на сущность. Для разных признаков используются раздельные таблицы эмбеддингов (в unified подходе была бы одна общая); то есть для авторов, постов, пользователей — разные таблицы. Эмбеддинг события в истории пользователя формируется на основе поста, автора, рекомендательной поверхности и действия пользователя.Еще как будто берут мультихэши от айдишника пользователя и подают в трансформер вместе с историей пользователя.
Башня кандидата в двухбашенном трансформере для кандгена очень простая — Linear(SiLU(Linear)).
Ранжирующий трансформер устроен таким образом, что history+user токены видят только history+user токены, а каждый кандидат видит себя и history+user токены (кастомная аттеншн маска). Подают сразу несколько кандидатов, но работает это эквивалентно тому, как если бы отдельно прогнали трансформер для каждого кандидата, добавляя его в конец последовательности.
Multi-action prediction: трансформер предсказывает вероятности сразу для кучи разных сигналов (like, reply, click, repost — полный список в репозитории). Для финального ранжирования, эти вероятности суммируются с весами в единый скор (но как подбираются веса — не пишут). Такую схему использовали и в прошлой ранжирующей нейросети, но только теперь эти вероятности приходят напрямую из трансформера.
tldr: довольно простой пайплайн на трансформерах. Двухбашенный кандген, нейросетевое ранжирование, мультихэши для эмбеддингов. С одной стороны — всё супер просто, ничего особо интересного. С другой — если получилось заменить прошлую рексистему и ничего не сломать — это круто :)
Предполагаю, что какие-то подробности / детали все же не раскрываются (e.g. как рекомендуется холодный контент — для этого должны быть какие-то еще эмбеды кроме мультихэшей).
Из забавного — всю эту трансформерную поделку в xAI решили назвать "Феникс". Когда-то я в Яндексе инициировал похожий проект про упрощение ранжирования в единую нейросеть с трансформером, и тоже назвал её Фениксом. Вот так вот нейминги совпали :)
❤46🔥31👍16