惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

AI
AI
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Google DeepMind News
Google DeepMind News
T
Tenable Blog
博客园_首页
S
Securelist
Spread Privacy
Spread Privacy
Google Online Security Blog
Google Online Security Blog
Forbes - Security
Forbes - Security
Engineering at Meta
Engineering at Meta
U
Unit 42
L
LINUX DO - 热门话题
量子位
T
Threat Research - Cisco Blogs
博客园 - 【当耐特】
C
Cyber Attacks, Cyber Crime and Cyber Security
K
Kaspersky official blog
MyScale Blog
MyScale Blog
P
Proofpoint News Feed
The Last Watchdog
The Last Watchdog
Google DeepMind News
Google DeepMind News
GbyAI
GbyAI
Martin Fowler
Martin Fowler
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Security Latest
Security Latest
Scott Helme
Scott Helme
V
Vulnerabilities – Threatpost
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
I
InfoQ
Know Your Adversary
Know Your Adversary
Cisco Talos Blog
Cisco Talos Blog
The Register - Security
The Register - Security
T
The Blog of Author Tim Ferriss
aimingoo的专栏
aimingoo的专栏
V2EX - 技术
V2EX - 技术
T
Tailwind CSS Blog
月光博客
月光博客
Recent Announcements
Recent Announcements
G
Google Developers Blog
F
Full Disclosure
W
WeLiveSecurity
宝玉的分享
宝玉的分享
腾讯CDC
G
GRAHAM CLULEY
Vercel News
Vercel News
Simon Willison's Weblog
Simon Willison's Weblog
美团技术团队
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Help Net Security
Help Net Security

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
От фич и каскадов к генеративной модели: как мы переосмыслили рекомендации с помощью ARGUS
Николай Савушкин · 2026-05-21 · via Все публикации подряд на Хабре

Классические рекомендательные системы в крупных компаниях — это десятки микросервисов, каскадная фильтрация и тысячи ручных признаков. Такой стек может надёжно работать годами, но неизбежно упирается в фундаментальную проблему: он перестаёт масштабироваться. Качество выходит на плато — всё меньше отдачи от новых фич, усложнения моделей и наращивания данных.

Генеративная постановка, когда модель восстанавливает целые последовательности пользовательских действий, обещает принести в рекомендации законы масштабирования, снизить операционную сложность и открыть путь к единой кросс‑сервисной модели. Но между обещанием и продакшеном — огромная дистанция. Нужно понять, какая токенизация работает, как устроить претрейн, что делать с контекстом, негативами и задержками в реальных распределённых системах.

Последний год мы адаптировали нашу генеративную модель персонализации ARGUS под разные домены внутри Яндекса, меняли архитектуру, пересобирали обучение и пробовали новые способы интеграции в продакшене. В этой статье я расскажу, какие решения сработали, какие — нет и что нам дала генеративная постановка в реальных рекомендательных системах.


Мотивация и определения

Начнём с того, зачем вообще понадобилась генеративная постановка в рекомендациях и что мы понимаем под генеративными рекомендательными моделями.

У нас в Яндексе есть зрелые рекомендательные системы — в Музыке, Маркете, Рекламе и других продуктах. Исторически они построены вокруг большого набора ручных признаков и специализированных моделей, которые эти признаки обрабатывают. Это эффективно, но довольно быстро «насыщается»: качество перестаёт расти по мере усложнения моделей и наращивания фич. В отличие от областей, где масштабирование — моделей, данных и вычислений — приводит к предсказуемому росту качества.

Генеративная постановка даёт шанс принести эти законы масштабирования в рекомендации.

Есть и вторая причина. Классические рекомендательные системы — это всегда каскад: много микросервисов, сложная последовательная фильтрация кандидатов, дорогое ручное обслуживание фичевого пространства. Такой стек работает, но высокая операционная сложность неизбежно тормозит развитие. Генеративный подход, наоборот, позволяет уменьшить количество моделей и снизить операционную нагрузку на команды.

Третий мотивационный пункт — отсутствие фундаментальных моделей в рекомендациях. Практически все существующие решения внутридоменные: модель обучена на одном продукте, понимает только его данные и плохо переносится в другие сервисы. Генеративная модель, которая учится на последовательностях действий, в принципе может вбирать знания сразу из нескольких доменов и переиспользоваться внутри экосистемы.

Важно, что сама область генеративных рекомендательных моделей ещё очень молодая: терминов немного, единой нотации пока нет. В этой статье под «генеративной рекомендательной моделью» я буду понимать модель, которая задаёт распределение на пользователях.

Если провести аналогию, то разница между дискриминативными и генеративными постановками такая же, как в классическом ML. Дискриминативная модель учит P(y|x) — вероятность реакции пользователя на конкретный документ. Генеративная же пытается моделировать совместное распределение входов и выходов — восстанавливает распределение пользовательских последовательностей целиком.

Чтобы задать такое распределение, нужно формально описать пользователя. Наиболее распространённый подход в индустрии — sequential: мы представляем пользователя как последовательность действий, а дальше применяем любую последовательностную нейросеть, в частности трансформер.

Как и почему мы пришли к созданию ARGUS

Чтобы понять, зачем нам понадобилась собственная генеративная модель рекомендаций, разберём, как устроены популярные подходы. Я буду сравнивать их по четырём критериям:

  • как токенизируется пользовательская история;

  • какая задача моделирования решается;

  • какая архитектура используется;

  • как модель применяется в рекомендательном стеке.

HSTU: полная история действий, но без контента

Источник: Actions Speak Louder than Words: Trillion-Parameter Sequential Transducers for Generative Recommendations

Источник: Actions Speak Louder than Words: Trillion‑Parameter Sequential Transducers for Generative Recommendations

HSTU моделирует пользователя как последовательность всех взаимодействий — и позитивных, и негативных. Каждое событие раскладывается на два токена:

  • токен документа (item_id);

  • токен реакции пользователя.

Документ описывается только item_id, без контентных признаков. Именно поэтому большая часть триллиона параметров модели — это матрицы эмбеддингов под гигантское пространство ID.

Несмотря на то что модель в статье называют генеративной, она решает дискриминативные задачи: предсказывает либо следующий позитивный документ по истории, либо реакцию на конкретный документ при фиксированной истории. Архитектура — собственный attention‑блок HSTU. В применении это ранжирующая модель, которая заменяет традиционный стек ручных фич.

TIGER (Google): только позитивные действия и иерархическая токенизация

Источник: Recommender Systems with Generative Retrieval

Источник: Recommender Systems with Generative Retrieval

TIGER делает два принципиально других шага:

  • учитываются только позитивные взаимодействия;

  • каждый документ раскладывается на последовательность токенов, соответствующую обходу дерева категорий (иерархическая кластеризация).

То есть item превращается не в один токен, а в путь по дереву. Задача — предсказать следующий позитивный item по истории. Снова дискриминативная постановка. Архитектура — encoder‑decoder Transformer. Применение — генерация кандидатов на раннем этапе каскада.

Чем ARGUS отличается от этих подходов

Мы проектировали ARGUS так, чтобы модель была максимально универсальной внутри экосистемы Яндекса и могла использовать кросс‑доменные знания. Поэтому ключевые решения отличаются от HSTU и TIGER.

Источник: Scaling Recommender Transformers to One Billion Parameters

Источник: Scaling Recommender Transformers to One Billion Parameters

  1. История действий полная: и позитивы, и негативы.

  2. Событие кодируем тройкой: context, item, action. На практике чаще используем simplified‑схему, где всё это упаковано в один токен.

  3. Документы описываются двумя каналами: item_id (спарсовая идентификация) и контентные признаки (полное описание документа). На практике смешанная схема даёт значимый прирост качества — это заметное отличие от TIGER и HSTU.

  4. Двухступенчатое обучение:

    • претрейн — генеративный, моделирует распределение на пользовательских историях; модель авторегрессивно «прогоняет» последовательность и предсказывает следующий item (любой), а также реакцию пользователя;

    • файн‑тюнинг — дискриминативный, подстраивается под задачу ранжирования внутри продукта.

  5. Способ применения. ARGUS — это upstream‑модель, которая может работать как:

    • фичегенератор для ранжирующей модели следующего уровня;

    • дополнительный источник кандидатов на стадии candidate generation.

Первые продакшен‑версии ARGUS работали офлайн: мы один раз в сутки прогоняли модель в батч‑режиме, строили эмбеддинги пользователей и документов и использовали двухбашенную постановку (скалярное произведение либо лёгкий энкодер). Так ARGUS изначально жил как вспомогательный источник сигналов и кандидатов.

Дальше я расскажу, как мы развили этот рецепт — что поменяли в обучении и какие эффекты это дало на реальных продуктах.

Как мы развили ARGUS и что узнали на внедрениях

После первых внедрений ARGUS стало понятно, какие ограничения мешают модели раскрывать потенциал. Таких ограничений получилось три.

Офлайновое применение и позднее связывание. В первой версии ARGUS пользователь обрабатывался офлайн, и модель видела историю «раз в сутки». Это приводило к двум проблемам:

  • модель не видит самые свежие пользовательские действия — от момента события до попадания в профиль проходит время;

  • вся история сжимается в один вектор, что создаёт существенную потерю информации.

Формально постановка была context‑aware, но на практике контекст учитывался только на последнем шаге — через позднее связывание.

ARGUS брал последовательность троек (context, item, action), пропускал через трансформер, а затем уже на выходе подставлял контекст следующего документа. Вся информация о связи между историей и контекстом должна была «протащиться» через трансформер, и это стало узким местом.

Отсутствие кросс‑сервисных знаний. Изначальная версия ARGUS оставалась монодоменной. Источник данных — только текущий сервис (например, Маркет или Музыка).

При этом одна из ключевых мотиваций генеративной постановки — создание фундаментальной модели, которая собирает обезличенные данные о поведении пользователя в нескольких сервисах и использует эти знания кросс‑доменно.

В первых версиях этот потенциал не был реализован.

Неустойчивая и сложная процедура претрейна. Оригинальная схема претрейна ARGUS была рабочей, но слишком сложной, не до конца понятной и с большим количеством открытых вопросов, суть которых сводится к тому, можно ли улучшить стабильность и упростить процедуру претрейна?

Далее поговорим о том, как мы решали эти три проблемы.

Проблема позднего связывания и рождение context‑aware ARGUS

Чтобы уйти от позднего связывания, нужно было сделать контекст полноценной частью последовательности, а не чем‑то, что подставляется только на финальном шаге. Для этого мы изменили саму токенизацию.

Вместо того чтобы представлять каждое событие как тройку (context, item, action), мы перестроили историю пользователя в виде цепочек «контекст — события этого контекста». Сначала идёт контекстный токен, а затем связанные с ним события. На практике это переход от событийной токенизации к контекстно‑событийной.

Item и feedback по‑прежнему кодируются одним токеном — это сохраняет компактность последовательности. Следующий документ модель предсказывает именно из контекстного токена, что делает контекст центральным элементом моделирования.

Такой переход меняет несколько вещей. Контекст начинает участвовать в работе модели с самого начала, а не подставляется на выходе. Трансформер нужно выполнять в рантайме, потому что надо учитывать текущий контекст пользователя — офлайновая схема больше не подходит. 

Длина последовательности растёт умеренно: если в HSTU она увеличивается вдвое, а в полной схеме ARGUS могла вырастать втрое, то здесь она редко превышает двукратный рост и обычно даже меньше, поскольку контекст меняется нечасто и не дублируется, когда не нужно.

На претрейне модель остаётся генеративной: авторегрессивно задаёт распределение на пользовательской истории, предсказывает следующий item (позитивный или негативный) и реакцию пользователя на него. То есть модель уже на претрейне учится распределению на пользовательских историях.

На файн‑тюнинге мы подставляем кандидатов непосредственно к тому контекстному токену, которому они соответствуют. Кандидаты не обязаны присутствовать в истории: например, показы в Маркете мы получаем семплированием. Такой формат совместим с любыми ранжирующими лоссами, и модель корректно их поддерживает.

В реальных распределённых системах между событием и тем, как оно появляется в профиле пользователя, есть задержка. Игнорировать этот лаг нельзя — модель начинает «видеть будущее» и переобучается.

В context‑aware‑постановке это усложняется: при обучении надо одновременно учитывать текущий контекст и не учитывать часть событий, которые ему непосредственно предшествуют. То есть нужна не тривиальная маска, а необычная — треугольная.

Здесь мы столкнулись с тем, что Flash Attention такую маску не поддерживает. Альтернативные реализации сильно замедляют обучение, а собственный Triton Kernel сложен и всё ещё отстаёт по скорости от библиотечных решений.

В итоге лучше всего сработал практический вариант: не моделировать лаг на претрейне и файн‑тюнинге. Лаг добавляется в downstream — когда ARGUS становится фичей финальной модели ранжирования. Претрейн остаётся быстрым и стабильным, а downstream‑модель получает корректно смоделированную задержку, что даёт нужное поведение без усложнения трансформера.

Переход на context‑aware‑токенизацию заметнее всего влияет на домены, где контекст определяет значительную часть поведения, — Рекламу, Поиск, doc2doc‑рекомендации. В них улучшение downstream‑метрик почти двукратное. В доменах с доминирующим персональным фактором, например в Музыке, прирост скромнее, что согласуется с природой сигнала.

Кросс‑сервисные знания и развитие претрейна ARGUS

Второй важный шаг в развитии ARGUS связан с кросс‑сервисными знаниями. В разных продуктах у нас давно накоплено много обезличенных сигналов о поведении пользователя, но долгое время не было нормального способа передать их в модель — только простые ручные эвристики. Генеративная последовательностная постановка позволяет собрать эти сигналы в единую кросс‑доменную последовательность и обрабатывать её одной моделью.

Каждое событие из любого домена мы представляем через набор признаков: item_id, категории и текстовые фичи. Категориальные признаки кодируем мультихешингом в общую unified‑матрицу — одну большую матрицу эмбеддингов для всех доменов. Текстовые признаки группируем вручную по смыслу и для каждой группы используем свой мешок слов.

Для каждого домена у нас отдельная башня: она получает признаки событий этого домена (спарсовые — через мультихешинг, текстовые — через BoW) и комбинирует их через DCNv2. В итоге башни доменно‑специфичны, а эмбеддинговая матрица остаётся общей.

Такое объединение даёт заметный прирост качества: без изменения процедуры обучения и без изменения лоссов достаточно просто добавить события из других сервисов в историю пользователя, и downstream‑модель начинает работать заметно лучше. Эта прибавка достигается без изменения самой постановки и без дополнительной сложности в пайплайне обучения.

После этого мы вернулись к более базовому вопросу: можно ли отказаться от претрейна и оставить только файн‑тюнинг? Интерес возник не только из‑за того, что другие последовательностные рекомендательные модели, такие как HSTU или TIGER, обучаются одностадийно, но и потому, что в LLM‑подходах претрейны обычно играют ключевую роль. Мы хотели понять, насколько двухступенчатая схема действительно необходима именно для ARGUS.

Здесь важно уяснить два момента. Первый — compute‑оптимальность: что выгоднее при фиксированном количестве GPU‑часов — потратить их на претрейн или на большое количество эпох файн‑тюнинга? Второй — достижимость качества: если вообще не ограничивать вычисления, может ли модель, обучавшаяся только на файн‑тюнинге, догнать запретрейненный вариант?

Наши результаты показывают, что файн‑тюнинг быстро стабилизируется и перестаёт расти. Даже много эпох файн‑тюнинга не приближаются к качеству модели, которая прошла хотя бы один претрейновый проход. Одна эпоха претрейна даёт прирост, который несколькими эпохами файн‑тюнинга компенсировать невозможно. Поэтому полностью отказываться от претрейна нельзя — он остаётся критически важным для финального качества обучения.

Расширение претрейна на несколько доменов

Следующий вопрос, который мы исследовали: можно ли расширить претрейн так, чтобы модель предсказывала следующий item не только в целевом домене, но и в тех альтернативных доменах, события которых мы добавили в историю пользователя. При этом сама модель по‑прежнему используется в конкретном целевом сервисе, а кросс‑доменные события помогают ей формировать более выразительное представление пользователя.

В базовой версии претрейна ARGUS используется Sampled Softmax со случайными (uniform) и инбатчевыми негативами, а также logQ‑коррекция, устраняющая смещение от инбатчевого семплирования. Это позволяет эффективно обучать модель на больших данных. 

\mathcal{L}_{\log Q}(u,p)=-\log\frac{e^{f_{\theta}(u,p)}}{e^{f_{\theta}(u,p)-\log Q(p)}+\sum_{i=1}^{n} e^{f_{\theta}(u,d_i)-\log Q(d_i)}}

На этой базе мы построили расширенную схему: добавили отдельный Sampled Softmax для каждого альтернативного домена, а итоговый лосс сделали суммой доменных лоссов. Инбатчевые негативы и uniform‑негативы по‑прежнему выбираются внутри домена.

Добавление таких задач в претрейн дало существенный прирост в downstream‑ранжировании. Уже после файн‑тюнинга модель давала значительно лучшие результаты, чем при обучении только на одном домене.

Нужен ли feedback‑loss

Изначальный претрейн включал два лосса: восстановление логирующей политики (предсказание следующего документа в истории, позитивного и негативного) и предсказание реакции пользователя (feedback), когда модель получает текущий контекст и следующий документ и оценивает ожидаемое взаимодействие. Мы проверили, можно ли отказаться от второй части.

Выяснилось, что feedback‑loss почти не влияет на конечное качество, а его наличие усложняет реализацию и снижает стабильность обучения. Поэтому в актуальном рецепте обучения ARGUS мы полностью удалили этот лосс: модель проходит претрейн только на задаче Next‑Item Prediction.

Как правильно работать с негативами

Схема негативов — ключевой элемент обучения трансформеров в рекомендациях. Мы использовали смешанный вариант из инбатчевых негативов и uniform‑негативов и проверили, насколько эта схема обязательна и как она масштабируется.

С точки зрения обучения мы работаем в data‑parallel‑режиме (DDP или FSDP), где у каждого ускорителя свой локальный батч и свои локальные негативы. Пул негативов можно расширить, собрав их с разных устройств через all_gather, и получить более разнообразный пул, одновременно увеличив их количество.

Проблема в том, что стандартные реализации Sampled Softmax материализуют матрицу логитов размером positives × negatives прямо в памяти GPU. При увеличении числа негативов эта матрица становится основным потребителем памяти, и batch‑size приходится уменьшать.

Мы обошли это ограничение с помощью fused‑реализации cross‑entropy (ядро LinkedIn), которая не строит матрицу логитов в явном виде. Она немного медленнее классического варианта, но позволяет резко увеличить число негативов без потери batch‑size.

Эксперименты показали несколько важных вещей: 

  • Инбатчевые негативы критичны — отказаться от них нельзя.

  • Uniform‑негативы полезны, но существенно менее значимы: качество downstream‑задачи гораздо меньше зависит от них. Поэтому в претрейне мы можем от uniform‑негативов отказаться. 

  • В задачах candidate‑generation их обязательно оставляем, поскольку увеличение числа негативов напрямую влияет на метрику реколлов.

Стратегия семплирования uniform‑негативов тоже имеет значение. Можно семплировать равномерно, из популярных документов или из популярных с учётом затухания по времени. Последний вариант даёт наилучшие результаты. В целом увеличение количества негативов ожидаемо улучшает метрики генерации кандидатов.

Актуальный рецепт претрейна ARGUS

По сравнению с исходной версией претрейна в ARGUS мы пришли к следующему рецепту. Модель продолжает восстанавливать логирующую политику через Next‑Item Prediction, предсказывая все встречающиеся в истории документы независимо от их знака. 

Мы добавляем Next‑Item Prediction на события из дополнительных доменов — именно эта часть даёт особенно заметный рост качества. Feedback‑loss полностью исключён: он не приносит выгоды и делает обучение менее стабильным. 

Для candidate‑generation используются альтернативные стратегии uniform‑негативов и fused cross‑entropy, тогда как в самом претрейне uniform‑негативы опциональны и могут быть отключены без потерь.

Вместо заключения

Генеративные модели в рекомендациях пока не имеют устоявшейся методологии, но практика показывает: последовательностные подходы в рекомендациях работают не только в теории — прирост видно на реальных задачах. ARGUS для нас — подтверждение того, что сдвиг акцента от ручного фичевого пространства к последовательностному представлению пользователя и использованию кросс‑сервисных данных позволяет моделям лучше масштабироваться с ростом данных и вычислений.

Переработанная токенизация, контекстная постановка и расширенный претрейн дают заметный прирост качества в реальных продуктах. Дополнительно обновлённый рецепт обучения убирает часть инфраструктурных ограничений, которые были у классических стеков.

Спасибо, что прочитали. А если остались вопросы — задавайте их в комментариях.

Если у вас есть интересный МЛ‑кейс и вы хотите о не рассказать, подавайте заявку на выступление на Practical ML Conf.