I
Information Retriever
@inforetriever3.8K подп.
6.4Kпросмотров
20 января 2026 г.
📷 ФотоScore: 7.1K
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(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 решили назвать "Феникс". Когда-то я в Яндексе инициировал похожий проект про упрощение ранжирования в единую нейросеть с трансформером, и тоже назвал её Фениксом. Вот так вот нейминги совпали :)
6.4K
просмотров
3347
символов
Нет
эмодзи
Да
медиа

Другие посты @inforetriever

Все посты канала →
xAI выложили в опенсорс код своей новой рекомендательной сис — @inforetriever | PostSniper