
Команда соцсети X представила репозиторий с открытым исходным кодом своих алгоритмов ранжирования и фильтрации (X For You Feed Algorithm) под лицензией Apache License 2.0. В коде платформы раскрыты правила для бонусов новым авторов, штрафы за негативные реакции пользователей и способы борьбы с однообразной лентой.

По информации Security Lab, основные моменты из алгоритма ленты X:
опубликован производственный код системы рекомендаций «Для вас» (For You), включая модель Phoenix, реальные коэффициенты ранжирования, фильтры видимости и механизмы, которые решают, показать публикацию незнакомому человеку или незаметно убрать её из рекомендаций;
конфигурация с рабочими весами сигналов, код фильтрации публикаций, системы оценки спама и злоупотреблений, SimClusters и полноценную версию Phoenix. Ранние публикации содержали в основном демонстрационную реализацию рекомендательной модели. Теперь в репозитории находится код, которым обучают и обслуживают Phoenix в production, включая JAX‑модели, обучающий код и серверную часть на Rust. Для экспериментов разработчики добавили синтетические данные и уменьшенные конфигурации, которые можно запустить без внутренней инфраструктуры X;
лента «Для вас» собирается заново при каждом запросе пользователя. Система Thunder приносит свежие публикации аккаунтов, на которые человек подписан. Phoenix и SimClusters ищут материалы за пределами круга подписок. Phoenix сначала сокращает миллионы потенциальных кандидатов до небольшой выборки, затем трансформер прогнозирует реакцию конкретного пользователя на каждую публикацию. Модель пытается угадать вероятность лайка, ответа, репоста, цитирования, перехода по ссылке, открытия фотографии или видео, подписки на автора, отправки публикации в личные сообщения, копирования ссылки, длительного просмотра, жалобы, блокировки, отключения автора и нажатия «Не интересно»;
после прогноза X превращает вероятности в общий рейтинг. Именно здесь августовский код раскрыл самые интересные цифры. Базовый коэффициент ожидаемого лайка равен 0,5, репоста — 1, обычного шаринга — 2, ответа — 5, цитирования — 5, отправки через личные сообщения — 5, подписки на автора — 4. Самый большой положительный коэффициент среди привычных действий получила отправка публикации через скопированную ссылку — 20. Прогнозируемый переход по публикации получает 0,4, переход по внешней ссылке — 0,2, открытие фотографии или видео — 0,05. Получается, вероятность того, что человек скопирует ссылку и отправит её кому‑то вне стандартного интерфейса X, влияет на формулу в 40 раз сильнее вероятности лайка;
у негативных сигналов значения намного крупнее. «Не интересно» имеет коэффициент −43,2, блокировка автора — −31,2, отключение публикаций автора — −58,8, жалоба — −234. На первый взгляд можно решить, что одна жалоба уничтожает эффект 468 лайков. Именно такую трактовку начали распространять после публикации кода, поэтому 14 августа разработчики специально дописали пояснение. Коэффициенты умножаются не на реальное число лайков, жалоб или блокировок, а на вероятность того, что конкретный зритель совершит соответствующее действие. Вероятность жалобы в среднем более чем в тысячу раз ниже вероятности лайка, поэтому системе нужен крупный отрицательный коэффициент, чтобы редкий сигнал вообще влиял на итоговый балл;
по той же причине массовые жалобы не работают как простая кнопка для уничтожения чужих охватов. X пишет в комментариях к коду, что реакция влияет прежде всего на рекомендации людям с похожим поведением. Кроме того, алгоритм учитывает негативное действие для ранжирования только тогда, когда публикация попала человеку в домашнюю ленту. Если группа пользователей получила ссылку в чате, открыла публикацию напрямую и начала массово жаловаться, такие переходы не должны давать тот же эффект рекомендательной системе;
после основного расчёта X дополнительно меняет позиции. Публикации одного автора постепенно получают понижающий коэффициент, чтобы лента не заполнялась одним аккаунтом. В опубликованной конфигурации каждое следующее появление автора получает множитель с затуханием 0,5, но не ниже 0,25. Материалы аккаунтов, на которые пользователь не подписан, получают коэффициент 0,75. Затем отдельный VMRanker переставляет публикации так, чтобы соседние записи меньше походили друг на друга. X сознательно немного жертвует математическим рейтингом ради разнообразия ленты;
в коде присутствует и механизм помощи небольшим авторам. README прямо описывает New‑Author Boost, который поднимает публикации с небольшим числом показов ближе к заданной позиции. В текущих параметрах cold start фигурируют порог в 1000 показов, лимит в 1000 подписчиков, максимальный возраст публикации в 24 часа и целевая область примерно около 15-й и 16-й позиции. Логика сложнее простого «всем новичкам дадут охваты», поскольку часть параметров зависит от экспериментальных групп, но сам механизм продвижения малоизвестных авторов теперь виден в исходном коде;
до ранжирования система выкидывает дубликаты, публикации старше 48 часов, уже показанные записи, материалы заблокированных или отключённых аккаунтов, публикации с заглушёнными пользователем словами и закрытый контент для подписчиков. Отдельная система Visibility Filtering работает уже с метками безопасности. Spam High Recall, вредоносные ссылки, некоторые разновидности NSFW‑контента и другие категории могут оставаться доступными подписчикам автора, но перестают показываться незнакомым пользователям через рекомендации. Такая архитектура хорошо объясняет ситуации, когда автор продолжает видеть публикацию в профиле и получает реакции от постоянной аудитории, однако приток новых просмотров внезапно исчезает;
список меток оказался большим. X различает спам, вредоносные ссылки, сексуальный контент, жестокие изображения, оскорбления, разжигание ненависти, насильственные высказывания, нарушения правил гражданской добросовестности, скомпрометированные аккаунты и подражание другим людям. В коде сохранилась даже метка FOR_EMERGENCY_USE_ONLY, предназначенная для чрезвычайных ситуаций. Публикации с такой меткой показываются за предупреждением и не попадают в домашнюю ленту. Для FOSNR_CIVIC_INTEGRITY видимость может ограничиваться страницей самого автора.
в текущей опубликованной конфигурации алгоритма включены контекстные признаки, географические признаки, подготовка данных о приложениях, установленных у пользователя, и поле с предполагаемым полом пользователя. Также включены явные и неявные сигналы вовлечённости, а максимальная длина последовательности для retrieval и scoring установлена в 1024 элемента. Само наличие включённого параметра не доказывает, что каждый такой признак напрямую меняет рейтинг каждой публикации, но код показывает, что рекомендательный конвейер умеет подготавливать подобные данные для дальнейшей обработки.
31 марта 2023 года Twitter опубликовала на GitHub часть своего исходного кода (разбор проекта на Хабре), включая код рекомендательного алгоритма. Компания выложила в открытый доступ два репозитория: main repo и ml repo. «Рейтинг твитов достигается с помощью нейронной сети с ~48 млн параметров, которая постоянно обучается взаимодействию с твитами, чтобы оптимизировать положительное взаимодействие, например, лайки, ретвиты и ответы», — рассказали инженеры соцсети.


