Новый подкаст с Суцкевером уже все видели, а я хочу подсветить еще два свежих подкаста:
* 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❤5❤🔥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 решили назвать "Феникс". Когда-то я в Яндексе инициировал похожий проект про упрощение ранжирования в единую нейросеть с трансформером, и тоже назвал её Фениксом. Вот так вот нейминги совпали :)
❤50🔥36👍17
Хабр
Query Prediction, или как мы отказались от ANN и полюбили обратный индекс
Всем привет! Меня зовут Антон Пилькевич, я более четырёх лет занимаюсь ранжированием и текстовой релевантностью в поиске Ozon. И вот настал момент, когда у меня появилось время поделиться своими...
На хабре появился пост от Антона Пилькевича про самое большое улучшение текстового поиска в Озоне за последние 4 года. Что сделали: query prediction — внедрили обратный индекс на основе предсказанных для документов токенов запроса (с помощью DL, разумеется).
Ссылочка: https://habr.com/ru/companies/ozontech/articles/990180/.
Пост супер крутой! Много отсылок на литературу, подробные объяснения всяких базовых концептов, даже отсылка на канал Миши и пост про GPU Retrieval есть :) В общем, всем интересующимся поиском/рекомендациями — советую глянуть.
P.S: забавный факт — когда-то в стародавние времена я читал Антону лекции про трансформеры в рамках курса по NLP на Физтехе =)
Ссылочка: https://habr.com/ru/companies/ozontech/articles/990180/.
Пост супер крутой! Много отсылок на литературу, подробные объяснения всяких базовых концептов, даже отсылка на канал Миши и пост про GPU Retrieval есть :) В общем, всем интересующимся поиском/рекомендациями — советую глянуть.
P.S: забавный факт — когда-то в стародавние времена я читал Антону лекции про трансформеры в рамках курса по NLP на Физтехе =)
👍46❤20🔥16😁1
Погружение в академию.
Прошло уже примерно полгода с тех пор, как я сменил деятельность на ресерч. Что могу рассказать:
* хорошенько отдохнул; но недостаточно, надо ещё :)
* взял себе девять студентов под научное руководство и слегка чувствую себя тимлидом =)
* готовил вместе с ребятами следующую итерацию рексис курса для ШАДа и первую итерацию рексис курса в Вышке; оба начинаются в первой половине февраля, поэтому ждите в ближайшее время посты с лекциями/семинарами
* доделал camera-ready статью про Аргуса, скоро выложу на arxiv
* готовлю новую статью, которую надеюсь успеть подать на второй цикл KDD'26 в формате research full paper
В моём понимании, если хочешь сделать крутую ресерч команду — нужно довольно активно участвовать в образовательной системе; иметь доступ к самым талантливым и замотивированным ребятам и активно этим доступом пользоваться. Я пока никакой своей команды осознанно не делаю — это противоречит первой аксиоме про отдых; но, конечно, есть подозрение, что научная группа постепенно появится сама собой :)
По мере погружения в академию, обрастаю новыми знакомствами. И как раз хотел бы порекомендовать вам канал Алексея Наумова и Валерии Власовой, коллег из ВШЭ, которые гораздо дольше меня занимаются ресерчем и рассказывают много интересного про академию, конференции, Вышку и университеты в целом. Алексей когда-то принимал у моей группы экзамен по математическим основам теории вероятностей на кафедре матстата ВМК :) Старая добрая теорема Радона-Никодима... ))
Примеры постов с канала Алексея и Валерии, которые мне показались интересными:
* Что такое research proposal и как его писать
* Студенческие годы в МГУ
* Про поиск научных проблем для исследований
* Как развивалась университетская система
* Стоит ли получать PhD
Если вам интересен ресерч, образование, математика — рекомендую подписаться.
Прошло уже примерно полгода с тех пор, как я сменил деятельность на ресерч. Что могу рассказать:
* хорошенько отдохнул; но недостаточно, надо ещё :)
* взял себе девять студентов под научное руководство и слегка чувствую себя тимлидом =)
* готовил вместе с ребятами следующую итерацию рексис курса для ШАДа и первую итерацию рексис курса в Вышке; оба начинаются в первой половине февраля, поэтому ждите в ближайшее время посты с лекциями/семинарами
* доделал camera-ready статью про Аргуса, скоро выложу на arxiv
* готовлю новую статью, которую надеюсь успеть подать на второй цикл KDD'26 в формате research full paper
В моём понимании, если хочешь сделать крутую ресерч команду — нужно довольно активно участвовать в образовательной системе; иметь доступ к самым талантливым и замотивированным ребятам и активно этим доступом пользоваться. Я пока никакой своей команды осознанно не делаю — это противоречит первой аксиоме про отдых; но, конечно, есть подозрение, что научная группа постепенно появится сама собой :)
По мере погружения в академию, обрастаю новыми знакомствами. И как раз хотел бы порекомендовать вам канал Алексея Наумова и Валерии Власовой, коллег из ВШЭ, которые гораздо дольше меня занимаются ресерчем и рассказывают много интересного про академию, конференции, Вышку и университеты в целом. Алексей когда-то принимал у моей группы экзамен по математическим основам теории вероятностей на кафедре матстата ВМК :) Старая добрая теорема Радона-Никодима... ))
Примеры постов с канала Алексея и Валерии, которые мне показались интересными:
* Что такое research proposal и как его писать
* Студенческие годы в МГУ
* Про поиск научных проблем для исследований
* Как развивалась университетская система
* Стоит ли получать PhD
Если вам интересен ресерч, образование, математика — рекомендую подписаться.
❤27🔥8👍5🤝3👎2🤡1
Deep RecSys Course.
Вчера прошло первое занятие нашего Deep RecSys курса в Вышке!
Материалы выкладываются на гитхаб, а видеозаписи занятий — на ютуб, как и обещал :)
Собственно, рассказывал доработанную (в)водную лекцию, слайды которой уже выкладывал на канале. Информационная перегрузка, тяжёлые хвосты, технофеодализм, коллаборативная фильтрация, матричная факторизация, bitter lesson, scaling hypothesis — вот это всё :)
А на семинаре Артём Матвеев показывал различные метрики и обработку данных на Ямбде.
P.S: уже даже до ютуба моё блогерское дело дошло, жесть... ))
Вчера прошло первое занятие нашего Deep RecSys курса в Вышке!
Материалы выкладываются на гитхаб, а видеозаписи занятий — на ютуб, как и обещал :)
Собственно, рассказывал доработанную (в)водную лекцию, слайды которой уже выкладывал на канале. Информационная перегрузка, тяжёлые хвосты, технофеодализм, коллаборативная фильтрация, матричная факторизация, bitter lesson, scaling hypothesis — вот это всё :)
А на семинаре Артём Матвеев показывал различные метрики и обработку данных на Ямбде.
P.S: уже даже до ютуба моё блогерское дело дошло, жесть... ))
3🔥95🥰36❤21❤🔥5
Deep RecSys Course II.
1. На лекции поговорили про ML дизайн рекомендательных систем и немного про мой опыт работы в R&D. В своё время я придумывал формат последней итерации собеседования по рекомендательным системам в Яндексе, и при подготовке лекции мне этот опыт очень пригодился. В общем, думаю, что получился неплохой начальный материал для подготовки к ML дизайн рексис собеседованию в бигтех. Пользуйтесь :)
2. На семинаре Владимир Байкалов @ducks_recs рассказывал про классические алгоритмы рекомендаций, с которыми можно сравнивать нейросети. И показывал для этих алгоритмов результаты на датасете Yambda. Заодно обсудили ошибки подсчета метрик в Ямбде — например, при подсчете Recall@K часто забывают, что нужно делить не на количество позитивов, а на
Записи занятия уже на ютубе — и лекция, и семинар. В этот раз принёс свой микрофон, поэтому на лекции звук чуть получше. Материалы — на Github (пока только лекция, но семинар тоже скоро выложим).
И ещё поделюсь отдельно парой ссылок с лекции:
1. Много полезной информации про дизайн рексистем есть на канале Миши @WazowskiRecommends. В лекции не раз ссылаюсь — на посты про счётчики, эмбеддинги, Mixigen
2. У Саввы Степурина есть два хороших наглядных доклада про ML дизайн рексистем — рассказ про стек Яндекс Музыки и про рекомендации незнакомого
3. На RecSys 2020 был туториал про feature engineering от Nvidia
4. У VK есть два хороших рассказа про item-to-item рекомендации — про внедрение item-to-item схемы от Дмитрия Шишова и про её улучшение от Андрея Зимовнова
P.S: уже преодолели отметку в 100 часов суммарного просмотра курса на ютубе!
1. На лекции поговорили про ML дизайн рекомендательных систем и немного про мой опыт работы в R&D. В своё время я придумывал формат последней итерации собеседования по рекомендательным системам в Яндексе, и при подготовке лекции мне этот опыт очень пригодился. В общем, думаю, что получился неплохой начальный материал для подготовки к ML дизайн рексис собеседованию в бигтех. Пользуйтесь :)
2. На семинаре Владимир Байкалов @ducks_recs рассказывал про классические алгоритмы рекомендаций, с которыми можно сравнивать нейросети. И показывал для этих алгоритмов результаты на датасете Yambda. Заодно обсудили ошибки подсчета метрик в Ямбде — например, при подсчете Recall@K часто забывают, что нужно делить не на количество позитивов, а на
min{количество позитивов, K}. Я такое видел и в метриках соревнований, и в статьях. А чтобы узнать багу при подсчете nDCG — смотрите семинар :)Записи занятия уже на ютубе — и лекция, и семинар. В этот раз принёс свой микрофон, поэтому на лекции звук чуть получше. Материалы — на Github (пока только лекция, но семинар тоже скоро выложим).
И ещё поделюсь отдельно парой ссылок с лекции:
1. Много полезной информации про дизайн рексистем есть на канале Миши @WazowskiRecommends. В лекции не раз ссылаюсь — на посты про счётчики, эмбеддинги, Mixigen
2. У Саввы Степурина есть два хороших наглядных доклада про ML дизайн рексистем — рассказ про стек Яндекс Музыки и про рекомендации незнакомого
3. На RecSys 2020 был туториал про feature engineering от Nvidia
4. У VK есть два хороших рассказа про item-to-item рекомендации — про внедрение item-to-item схемы от Дмитрия Шишова и про её улучшение от Андрея Зимовнова
P.S: уже преодолели отметку в 100 часов суммарного просмотра курса на ютубе!
👍36🔥29❤11❤🔥3🤝2
Deep RecSys Course III.
1. Двухбашенные нейросети. Это была одна из самых важных лекций курса — обсудили архитектуру, фолдинг, sampled softmax loss, contrastive learning, влияние температуры, косинуса как функции близости, различные источники негативов. Даже вывели LogQ коррекцию.
2. Рексистемы глазами исследователя. На 2-м занятии мы разбирали как видит рексистемы инженер, а здесь — как их видит исследователь. И какие ошибки при этом совершает :) При подготовке я во многом основывался на докладе про оффлайн-оценку качества с RecSys Summer School 2025 (см. пост); добавил парочку новых примеров и щепотку своего личного мнения. Обсуждали как формулировать цели, зачем нужны research questions, как выбирать датасеты, алгоритмы и метрики для экспериментов.
Как и всегда, записи на YouTube, а материалы — на Github.
P.S: суммарное время просмотра курса уже превысило 200 часов!
1. Двухбашенные нейросети. Это была одна из самых важных лекций курса — обсудили архитектуру, фолдинг, sampled softmax loss, contrastive learning, влияние температуры, косинуса как функции близости, различные источники негативов. Даже вывели LogQ коррекцию.
2. Рексистемы глазами исследователя. На 2-м занятии мы разбирали как видит рексистемы инженер, а здесь — как их видит исследователь. И какие ошибки при этом совершает :) При подготовке я во многом основывался на докладе про оффлайн-оценку качества с RecSys Summer School 2025 (см. пост); добавил парочку новых примеров и щепотку своего личного мнения. Обсуждали как формулировать цели, зачем нужны research questions, как выбирать датасеты, алгоритмы и метрики для экспериментов.
Как и всегда, записи на YouTube, а материалы — на Github.
P.S: суммарное время просмотра курса уже превысило 200 часов!
2❤41🔥29👍4❤🔥2
Variable-Length Semantic IDs for Recommender Systems.
Задумывались ли вы когда-нибудь почему все семантические айдишники одинаковой длины? Нет? А я задумывался! И даже написал на эту тему статью :)
Недавно я наткнулся на область Emergent Communication (EC). Она никак напрямую не связана с рекомендательными системами — в ней исследуют как в рамках решения совместных задач агенты вырабатывают общий язык для коммуникаций. Самая популярная формулировка задачи — Lewis Game: один агент (sender) видит объект, описывает его (в случае языковой игры — символьно), другой агент (receiver) читает описание и пытается угадать, что это был за объект.
Внезапно, это очень похоже на моё собственное видение обучения семантических айдишников — я смотрю на этот процесс как на языковую игру. По Витгенштейну, язык — это что-то сильно зависящее от контекста; он формируется под конкретные ситуации и цели. И вот как раз языковая игра — это такой концепт, в котором смысл слов определяется исключительно самой игрой. И, на мой взгляд, cемантические айдишники — это ни что иное как попытка создать язык для описания айтемов. Процесс, через который мы это делаем — ровно та же языковая Lewis Game, в которой энкодер описывает айтемы, а декодер восстанавливает их по описанию.
И вот в области EC уже некоторое время (как минимум с 2017-го года) занимались похожей задачей, но в контексте всяких других объектов; например, картинок. Интересно, что методы и сам взгляд на задачу сильно отличались от recsys community — в EC на задачу смотрели как на MARL (multi-agent reinforcement learning), и для обучения моделей использовали REINFORCE. Были ранние попытки использовать гумбель-софтмакс релаксацию, и даже в какой-то момент (не так давно) заметили прямую аналогию с dVAE (discrete VAE) и решили попробовать максимизировать ELBO, но опять-таки использовали для этого REINFORCE =)
Один из плюсов такого взгляда на задачу (через язык) в том, что ученые в EC также задавались и вопросом эффективности возникающих языков. И вопросом их сходства с естественным языком; одна из конечных целей — научить агентов разговаривать, прямо как у нас в рекомендациях. И вот в естественном языке есть такая штука, как ZLA (Zipf's Law of Abbreviation) — для часто возникающих сущностей (объектов, ситуаций, etc) мы используем более короткие описания. Оказалось, что чтобы получить такой же эффект для emergent language, нужно всего лишь добавить штраф на длину передаваемого сообщения, то есть заставить агентов эту длину минимизировать.
А почему то же самое не должно быть верно для рекомендаций? Если мы описываем айтемы эффективно, то наверно у популярных айтемов, с которыми мы часто сталкиваемся, должны быть короткие описания. А у тяжелого хвоста и холодных айтемов — наоборот длинные. Это нам, во-первых, поможет сделать гораздо эффективней все модели, в которых используются семантические айдишники (за тот же бюджет в токенах можно уместить гораздо больше информации, а ещё сам generative retrieval ускорить). А во-вторых — для создания разговорных рексистем мы хотим совместить наш язык описания айтемов вместе с естественным языком, которым оперирует LLM (см. PLUM). И если естественный язык для всех сущностей использует описания переменной длины, то почему наш "язык айтемов" работает не также? Чтобы разговорные рексистемы заработали, нам нужно постараться максимально устранить этот vocabulary gap!
В общем, tldr статьи:
* для рекомендаций это все тоже прекрасно работает, и как раз в статье я это и проверил
* а ещё — предложил новый метод для обучения дискретных представлений переменной длины, доформулировав задачу и её решение в виде dVAE с G-S (что, на самом деле, в EC до конца не довели). Spoiler: работает гораздо лучше и стабильней, чем REINFORCE
* и еще показал, что такие "variable-length" семантические айдишники хорошо работают на downstream задачах типа sequential recommendation (относительно того же R-KMeans).
Если дочитали до конца и не уснули — спасибо! И в качестве награды вам две ссылочки, на саму статью и на код:
arXiv | Github.
Задумывались ли вы когда-нибудь почему все семантические айдишники одинаковой длины? Нет? А я задумывался! И даже написал на эту тему статью :)
Недавно я наткнулся на область Emergent Communication (EC). Она никак напрямую не связана с рекомендательными системами — в ней исследуют как в рамках решения совместных задач агенты вырабатывают общий язык для коммуникаций. Самая популярная формулировка задачи — Lewis Game: один агент (sender) видит объект, описывает его (в случае языковой игры — символьно), другой агент (receiver) читает описание и пытается угадать, что это был за объект.
Внезапно, это очень похоже на моё собственное видение обучения семантических айдишников — я смотрю на этот процесс как на языковую игру. По Витгенштейну, язык — это что-то сильно зависящее от контекста; он формируется под конкретные ситуации и цели. И вот как раз языковая игра — это такой концепт, в котором смысл слов определяется исключительно самой игрой. И, на мой взгляд, cемантические айдишники — это ни что иное как попытка создать язык для описания айтемов. Процесс, через который мы это делаем — ровно та же языковая Lewis Game, в которой энкодер описывает айтемы, а декодер восстанавливает их по описанию.
И вот в области EC уже некоторое время (как минимум с 2017-го года) занимались похожей задачей, но в контексте всяких других объектов; например, картинок. Интересно, что методы и сам взгляд на задачу сильно отличались от recsys community — в EC на задачу смотрели как на MARL (multi-agent reinforcement learning), и для обучения моделей использовали REINFORCE. Были ранние попытки использовать гумбель-софтмакс релаксацию, и даже в какой-то момент (не так давно) заметили прямую аналогию с dVAE (discrete VAE) и решили попробовать максимизировать ELBO, но опять-таки использовали для этого REINFORCE =)
Один из плюсов такого взгляда на задачу (через язык) в том, что ученые в EC также задавались и вопросом эффективности возникающих языков. И вопросом их сходства с естественным языком; одна из конечных целей — научить агентов разговаривать, прямо как у нас в рекомендациях. И вот в естественном языке есть такая штука, как ZLA (Zipf's Law of Abbreviation) — для часто возникающих сущностей (объектов, ситуаций, etc) мы используем более короткие описания. Оказалось, что чтобы получить такой же эффект для emergent language, нужно всего лишь добавить штраф на длину передаваемого сообщения, то есть заставить агентов эту длину минимизировать.
А почему то же самое не должно быть верно для рекомендаций? Если мы описываем айтемы эффективно, то наверно у популярных айтемов, с которыми мы часто сталкиваемся, должны быть короткие описания. А у тяжелого хвоста и холодных айтемов — наоборот длинные. Это нам, во-первых, поможет сделать гораздо эффективней все модели, в которых используются семантические айдишники (за тот же бюджет в токенах можно уместить гораздо больше информации, а ещё сам generative retrieval ускорить). А во-вторых — для создания разговорных рексистем мы хотим совместить наш язык описания айтемов вместе с естественным языком, которым оперирует LLM (см. PLUM). И если естественный язык для всех сущностей использует описания переменной длины, то почему наш "язык айтемов" работает не также? Чтобы разговорные рексистемы заработали, нам нужно постараться максимально устранить этот vocabulary gap!
В общем, tldr статьи:
* для рекомендаций это все тоже прекрасно работает, и как раз в статье я это и проверил
* а ещё — предложил новый метод для обучения дискретных представлений переменной длины, доформулировав задачу и её решение в виде dVAE с G-S (что, на самом деле, в EC до конца не довели). Spoiler: работает гораздо лучше и стабильней, чем REINFORCE
* и еще показал, что такие "variable-length" семантические айдишники хорошо работают на downstream задачах типа sequential recommendation (относительно того же R-KMeans).
Если дочитали до конца и не уснули — спасибо! И в качестве награды вам две ссылочки, на саму статью и на код:
arXiv | Github.
🔥64❤20👍12
Deep RecSys Course IV.
1. На четвертой неделе курса мы продолжили обсуждение двухбашенных моделей и нейросетевой генерации кандидатов.
Если на прошлом занятии речь шла про базовую архитектуру и обучение двухбашенных моделей, то в этот раз детально разбрали архитектуру башен:
* Обучаемые эмбеддинги, плюсы и минусы
* Контентное кодирование и inductive bias
* Unsupervised representation learning как альтернатива для выучивания векторных представлений
* Методы кодирования пользователей
Также немного поговорили про методы нейросетевого кандгена, которые выходят за рамки двухбашенных моделей — multi-interest модели, mixture of logits, generative retrieval.
Получилось за две лекции рассказать всю базу про нейросетевой кандген, за исключением деталей про трансформеры и генеративный ретривал. Но про них будут отдельные лекции. Для сравнения, в прошлом году в ШАДе была всего одна сжатая лекция про нейросетевой кандген (слайды). Я уставший, но довольный :)
2. На семинаре Артём Матвеев рассказывал про практические аспекты обучения нейросетевых моделей для рекомендаций — какими инструментами для обучения мы пользуемся, на какие принципы опираемся и какой код пишем.
Артём, кстати, для семинара написал целый небольшой фреймворк для обучения нейросетей, который переиспользует многие наши лучшие практики, к которым мы пришли когда делали последнюю итерацию внутреннего яндексового фреймворка. На гитхабе код тоже есть.
Github | YouTube
P.S: суммарное время просмотра курса на ютубе — уже 400 часов. Это можно было бы один раз почти весь One Piece посмотреть :)
1. На четвертой неделе курса мы продолжили обсуждение двухбашенных моделей и нейросетевой генерации кандидатов.
Если на прошлом занятии речь шла про базовую архитектуру и обучение двухбашенных моделей, то в этот раз детально разбрали архитектуру башен:
* Обучаемые эмбеддинги, плюсы и минусы
* Контентное кодирование и inductive bias
* Unsupervised representation learning как альтернатива для выучивания векторных представлений
* Методы кодирования пользователей
Также немного поговорили про методы нейросетевого кандгена, которые выходят за рамки двухбашенных моделей — multi-interest модели, mixture of logits, generative retrieval.
Получилось за две лекции рассказать всю базу про нейросетевой кандген, за исключением деталей про трансформеры и генеративный ретривал. Но про них будут отдельные лекции. Для сравнения, в прошлом году в ШАДе была всего одна сжатая лекция про нейросетевой кандген (слайды). Я уставший, но довольный :)
2. На семинаре Артём Матвеев рассказывал про практические аспекты обучения нейросетевых моделей для рекомендаций — какими инструментами для обучения мы пользуемся, на какие принципы опираемся и какой код пишем.
Артём, кстати, для семинара написал целый небольшой фреймворк для обучения нейросетей, который переиспользует многие наши лучшие практики, к которым мы пришли когда делали последнюю итерацию внутреннего яндексового фреймворка. На гитхабе код тоже есть.
Github | YouTube
P.S: суммарное время просмотра курса на ютубе — уже 400 часов. Это можно было бы один раз почти весь One Piece посмотреть :)
🔥40❤10👍5❤🔥1😁1
Deep RecSys Course V.
Новое занятие курса уже на ютубе (а слайды — на github). Начали тему нейросетевого ранжирования:
1. На лекции обсудили, когда и почему стоит использовать нейросети для ранжирования (вместо градиентного бустинга). Затем поговорили про формирование входного вектора для нейросети — как работать с категориальными и вещественными признаками, а также с выходами других моделей.
2. На семинаре Артём Матвеев разобрал статью Unified Embedding: Battle-Tested Feature Representations for Web-Scale ML Systems и сказал пару слов про On Embeddings for Numerical Features in Tabular Deep Learning.
P.S: ещё выступал вчера на коллоквиуме ФКН по теме своей последней статьи, когда появится запись — напишу.
Новое занятие курса уже на ютубе (а слайды — на github). Начали тему нейросетевого ранжирования:
1. На лекции обсудили, когда и почему стоит использовать нейросети для ранжирования (вместо градиентного бустинга). Затем поговорили про формирование входного вектора для нейросети — как работать с категориальными и вещественными признаками, а также с выходами других моделей.
2. На семинаре Артём Матвеев разобрал статью Unified Embedding: Battle-Tested Feature Representations for Web-Scale ML Systems и сказал пару слов про On Embeddings for Numerical Features in Tabular Deep Learning.
P.S: ещё выступал вчера на коллоквиуме ФКН по теме своей последней статьи, когда появится запись — напишу.
🔥37👍5❤🔥4❤2
Deep RecSys Course VI.
Канал временно превратился в инструмент анонса выхода новых занятий курса на ютубе, но я надеюсь вас это не смущает :)
Вышло шестое занятие, на котором мы продолжили тему нейросетевого ранжирования.
На лекции поговорили про:
1. Моделирование взаимодействия признаков — от линейных моделей и факторизационных машин до DCN-v2 и новомодных трансформерных моделей
2. Что используем в качестве глубоких слоев (ResNet / DenseNet)
3. Про multi-task modeling — одновременное обучение на разные типы сигнала и специальные архитектуры типа MMoE (multi-gate MoE). А ещё немного затронули entire space multi-task modeling
4. И чуть-чуть поговорили про position bias в ранжировании и как с ним бороться, а также про knowledge distillation
В следующем году количество лекций про ранжирование скорее всего увеличится до трех, много идей во что можно углубиться (и, на самом деле, всё еще непокрытых тем тоже много).
На семинаре Артём Матвеев разобрал статью про DCN-v2.
YouTube | Github.
Канал временно превратился в инструмент анонса выхода новых занятий курса на ютубе, но я надеюсь вас это не смущает :)
Вышло шестое занятие, на котором мы продолжили тему нейросетевого ранжирования.
На лекции поговорили про:
1. Моделирование взаимодействия признаков — от линейных моделей и факторизационных машин до DCN-v2 и новомодных трансформерных моделей
2. Что используем в качестве глубоких слоев (ResNet / DenseNet)
3. Про multi-task modeling — одновременное обучение на разные типы сигнала и специальные архитектуры типа MMoE (multi-gate MoE). А ещё немного затронули entire space multi-task modeling
4. И чуть-чуть поговорили про position bias в ранжировании и как с ним бороться, а также про knowledge distillation
В следующем году количество лекций про ранжирование скорее всего увеличится до трех, много идей во что можно углубиться (и, на самом деле, всё еще непокрытых тем тоже много).
На семинаре Артём Матвеев разобрал статью про DCN-v2.
YouTube | Github.
❤47🔥26❤🔥8
Deep RecSys Course VII.
Преодолели экватор курса!
Я уже, конечно, знатно подустал, столько лекций делать. Подготовка каждой лекции занимает до четырех фулл-тайм дней даже при условии, что я далеко не все лекции делаю с нуля. Набросать структуру лекции, расписать текстовый скрипт о чем буду говорить (это, по сути, подготовка главы для книги), изучить материал и доуточнить содержимое (пройтись по старым и новым статьям), сделать скелет презентации, добавить иллюстрации и ссылки.
К счастью сейчас будет небольшой перерыв на пару недель, после следующей лекции. Планирую посетить Японию :)
Вышло седьмое занятие про трансформеры и анализ истории пользователя. Успели покрыть:
1. Ранжирование (DIN, BST, TransAct, OneTrans, MixFormer)
2. Кандген/representation learning (SASRec, BERT4Rec, PinnerFormer)
3. И еще был небольшой recap механизма внимания и трансформеров в начале лекции
В лекции должна была быть и четвертая часть, в которой я рассказываю про свои похождения в Яндексе — различные трансформерные модели и архитектуры, которыми мы занимались с командой. Но её не успели, осталось на следующий раз.
На семинаре Владимир Байкалов разбирал статьи про моделирование пользователей в Пинтересте — PinnerFormer и TransAct (да-да, там есть и более свежие статьи, но они скорее относятся к поздним лекциям курса; в учебных целях было полезно разобрать именно эти модели).
YouTube | Github.
Преодолели экватор курса!
Я уже, конечно, знатно подустал, столько лекций делать. Подготовка каждой лекции занимает до четырех фулл-тайм дней даже при условии, что я далеко не все лекции делаю с нуля. Набросать структуру лекции, расписать текстовый скрипт о чем буду говорить (это, по сути, подготовка главы для книги), изучить материал и доуточнить содержимое (пройтись по старым и новым статьям), сделать скелет презентации, добавить иллюстрации и ссылки.
К счастью сейчас будет небольшой перерыв на пару недель, после следующей лекции. Планирую посетить Японию :)
Вышло седьмое занятие про трансформеры и анализ истории пользователя. Успели покрыть:
1. Ранжирование (DIN, BST, TransAct, OneTrans, MixFormer)
2. Кандген/representation learning (SASRec, BERT4Rec, PinnerFormer)
3. И еще был небольшой recap механизма внимания и трансформеров в начале лекции
В лекции должна была быть и четвертая часть, в которой я рассказываю про свои похождения в Яндексе — различные трансформерные модели и архитектуры, которыми мы занимались с командой. Но её не успели, осталось на следующий раз.
На семинаре Владимир Байкалов разбирал статьи про моделирование пользователей в Пинтересте — PinnerFormer и TransAct (да-да, там есть и более свежие статьи, но они скорее относятся к поздним лекциям курса; в учебных целях было полезно разобрать именно эти модели).
YouTube | Github.
❤39🔥10❤🔥2