Итак, за этот скромный год канал вырос с 550 подписчиков до 1350 - почти в 2.5 раза. И это только начало!
Больше всего реакций:
• Как мы защитили диплом
• Плод моих трудов в бакалавриате
• Как меня развели мошенники
А больше всего просмотров неожиданно набрал мем про ГПУ
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🍾18🔥5❤4👍1👎1
Как обычно, будем обсуждать всё в контексте маркетплейса. Пусть, для определенности, у нас есть
User_1, который купил товары Item_1, Item_2, ..., Item_N. Мы хотим по этой цепочке спрогнозировать Item_N+1, который пользователь с наибольшей вероятностью приобретет следующим.• Количество Item ограничено. Да, на маркетплейсе могут появляться новые товары, но мы будем считать, что асортимент внутри дня меняется незначительно. Допустим, что всего у нас M айтемов.
• Пользователи могут быть "Холодными" — то есть с короткой историей. Например, пользователь зарегистрировался только вчера и еще не успел купить ни одного товара. Пусть, на момент построения модели у нас U уникальных пользователей.
Очевидно, что у пользователей может быть как короткая, так и длинная история взаимодействий. Однако при обучении нейросети на Next Item Prediction все вектора пользователей (последовательность их действий) должны быть одинаковой длины (назовем ее D).
• У пользователей со слишком длинной историей оставим только последние D действий
• У пользователей с длиной истории меньшей, чем D, оставим все действия и дополним их "Паддингами" (то есть нулями). Для
D=5 у нас может получиться история юзера "0, 0, Item_X, Item_Y, Item_Z".Таким образом, для каждого из U пользователей мы хотим выбрать один из M товаров, который те захотят приобрести. При этом для каждого пользователя мы имеем его вектор длины D — для всех пользователей получится матрица размера
U x D (см фото).Изображение взято из статьи на Хабре
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤7👎3🔥3
Любые ваши вопросы (желательно содержательные), идеи по рубрикам, обратная связь по каналу — и вообще всё, что вы хотите мне сказать.
Постараюсь ответить на всё в комментариях под этим постом. Давайте общаться!
Присылайте сюда 👉 t.me/questianonbot?start=1397630247c
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Анонимные вопросы
Напиши мне анонимно!
🔥7❤2👍2
Продолжаем говорить про Next Item Prediction — сегодня про SASRec
В прошлом посте мы поставили задачу Next Item Prediction (NIP). Теперь давайте разбирать первый «классический» подход, который обычно открывает эту тему — SASRec (Self-Attentive Sequential Recommendation).
Как всегда, держим в голове маркетплейс и нашу матрицу U × D, где у каждого пользователя есть последовательность из последних D действий.
💡 Идея SASRec в двух словах
SASRec — это Transformer-only модель, которая использует self-attention, чтобы понять, какие прошлые действия пользователя важны для предсказания следующего айтема. Ключевая мысль простая: не все предыдущие покупки одинаково полезны. Купил чехол для iPhone год назад — сомнительно, что это важно сейчас. Купил айфон вчера — совсем другое дело.
🧱 Из чего состоит SASRec
Разберём по шагам.
1️⃣ Embedding-слой
Каждый айтем
• Item Embedding
• Positional Embedding (очень важно!)
Почему позиция важна? Потому что последовательности:
iPhone → Чехол и Чехол → iPhone — это вообще разные истории.
На выходе получаем тензор размера: U × D × H
2️⃣ Masked Self-Attention
SASRec использует causal masking, то есть при предсказании айтема на позиции
Формально — обычный Transformer Encoder:
• Multi-Head Attention
• Residual connections
• LayerNorm
Без энкодер-декодер истории, всё строго sequential.
3️⃣ Предсказание Next Item
Для каждой позиции
На практике чаще всего:
• берем последнюю позицию
• сравниваем её эмбеддинг со всеми
• считаем
🧊 Что с холодными пользователями?
SASRec спокойно работает с паддингами:
• паддинги маскируются
• attention их просто игнорирует
Но важно понимать: SASRec — это purely sequential модель. Что это значит?
Если у пользователя 0 или 1 действие, сигнал слабый.
Для совсем холодного старта чаще приходится:
• добавлять популярные айтемы
• комбинировать с non-personalized логикой
👍 Почему SASRec так популярен
✔ Простая и понятная архитектура
✔ Отлично ловит long-range зависимости (по крайней мере, так было в 2018🤷♂️ )
✔ Хорошо масштабируется на большое число айтемов
Не зря его до сих пор используют как точку отсчета почти во всех статьях про NIP.
👀 Ограничения, о которых важно помнить
✖ Нет bidirectional-контекста (в отличие от BERT4Rec)
✖ Не использует user features
✖ Плохо решает cold start без костылей
✖ Использует только позтивные действия в истории пользователя (в то время, как негативные действия могут быть полезны для понимания контекста, что отображено в статьях про Аргус). Так например, для онлайн-кинотеатра мы будем использовать только историю просмотра, хотя могли бы учитывать и те фильмы, от просмотра которых юзер отказался.
Но как первый серьезный Transformer для рекомендаций — это абсолютная классика
Изображение взято из статьи на Хабре
В прошлом посте мы поставили задачу Next Item Prediction (NIP). Теперь давайте разбирать первый «классический» подход, который обычно открывает эту тему — SASRec (Self-Attentive Sequential Recommendation).
Как всегда, держим в голове маркетплейс и нашу матрицу U × D, где у каждого пользователя есть последовательность из последних D действий.
SASRec — это Transformer-only модель, которая использует self-attention, чтобы понять, какие прошлые действия пользователя важны для предсказания следующего айтема. Ключевая мысль простая: не все предыдущие покупки одинаково полезны. Купил чехол для iPhone год назад — сомнительно, что это важно сейчас. Купил айфон вчера — совсем другое дело.
🧱 Из чего состоит SASRec
Разберём по шагам.
Каждый айтем
Item_i кодируется в эмбеддинг размерности H, раскладывающийся на• Item Embedding
• Positional Embedding (очень важно!)
Почему позиция важна? Потому что последовательности:
iPhone → Чехол и Чехол → iPhone — это вообще разные истории.
На выходе получаем тензор размера: U × D × H
SASRec использует causal masking, то есть при предсказании айтема на позиции
t модель не видит будущие позиции t+1, t+2, ... Иначе был бы читинг. Self-attention отвечает на вопрос, на какие прошлые айтемы стоит обратить внимание, чтобы угадать следующий?Формально — обычный Transformer Encoder:
• Multi-Head Attention
• Residual connections
• LayerNorm
Без энкодер-декодер истории, всё строго sequential.
Для каждой позиции
t модель пытается предсказать айтем t+1.На практике чаще всего:
• берем последнюю позицию
• сравниваем её эмбеддинг со всеми
M айтемами• считаем
softmax или sampled softmax
• обучаемся максимизировать вероятность правильного следующего айтема.🧊 Что с холодными пользователями?
SASRec спокойно работает с паддингами:
• паддинги маскируются
• attention их просто игнорирует
Но важно понимать: SASRec — это purely sequential модель. Что это значит?
Если у пользователя 0 или 1 действие, сигнал слабый.
Для совсем холодного старта чаще приходится:
• добавлять популярные айтемы
• комбинировать с non-personalized логикой
👍 Почему SASRec так популярен
✔ Простая и понятная архитектура
✔ Отлично ловит long-range зависимости (по крайней мере, так было в 2018
✔ Хорошо масштабируется на большое число айтемов
Не зря его до сих пор используют как точку отсчета почти во всех статьях про NIP.
👀 Ограничения, о которых важно помнить
✖ Нет bidirectional-контекста (в отличие от BERT4Rec)
✖ Не использует user features
✖ Плохо решает cold start без костылей
✖ Использует только позтивные действия в истории пользователя (в то время, как негативные действия могут быть полезны для понимания контекста, что отображено в статьях про Аргус). Так например, для онлайн-кинотеатра мы будем использовать только историю просмотра, хотя могли бы учитывать и те фильмы, от просмотра которых юзер отказался.
Но как первый серьезный Transformer для рекомендаций — это абсолютная классика
Изображение взято из статьи на Хабре
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4😁4🔥1🤯1
В этом посте я хотел бы поделиться двумя источниками, в которые я и сейчас поглядываю, когда ищу соревы для необычного досуга. В славные годы бакалавриата я читал эти каналы чуть ли не каждый день в поиске интересных кейсов и сочных призовых.
Вобщем, рекомендую всем, кто ищет интересные события в области ИТ!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11🗿4🔥3👍2👎1🤬1
Да-да, вы не ослышалсь. Я теперь вайбкодер. Вчера впервые в жизни затестил n8n, раньше никогда не притрагивался даже, только видел постоянно в постах у Алерона и на Ютупе.
КАПИИЦ ТЫ ДРЕВНИЙ N8N УЖЕ БАЯН - предвижу я ваши мысли. Знаете что? Капец эти агенты умные стали. Ну реально, за один час собирается тг-бот со 100500 ии-агентами. Я вчера бахнул простенького бота без памяти с парсером сайта погоды, но это заняло полчаса и 0 строчек кода всего.
Я помню, было время, когда году так в 2022 я ковырял тг-бота с рекомендациями фильмов с кинопоиска (ну и с парсером, соответственно). Уйму времени угрохал. А сколько времени ушло на прототипы для моих проектов?...
При всём при этом у меня 0 сомнений в том, что лишь малая доля фаундеров использует ИИ для своих прототипов. И я понимаю, что n8n 2.0 вышел пару месяцев назад, но у меня складывается ощущение, что эти чертилы в своих способностях растут как на дрожжях.
Вобщем, если у вас найдется минутка на выходных, затестите сами. Это очень прикольный опыт. Может быть, даже закрою пару своих рутинных задачек с этой штукой. Давайте еще опрос сделаю по n8n, очень интересно посмотреть
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9💅6👍2
Пользовались n8n хоть раз?
Anonymous Poll
22%
да (будет круто, если опишите свой кейс в комментах)
78%
неа
Как там вообще дела, работяги? Собеситесь? Ставьте сразу кита 🐳, кто уже сменил место работы в 2026)
Решил сегодня в очередной раз пару слов на вентилятор накинуть про собеседования, а точнее про основные этапы, которые ждут интересанта на подступах к Бигкеку.
Все говорят, что этот этап позволяет в режиме реального времени оценить уровень кодинга кандидата, но мне лично непонятно, как выучивание 20-30 базовых функций может отражать скилл. Тем не менее, это по-прежнему качественный отсеиваитель джунов на миддловские позиции. Кстати, все типовые задачи на алгоритмы можно найти тут. Сохраняем и не теряем.
На этом этапе предстоит пораскинуть мозгами и вспомнить, как писать foo(a, b): return a+b. А если серьезно, то, обычно, кандидату предстоит порассуждать о каких-то базовых мл-алгоритмах (линрег, деревья, бустинги, нейронки и тп), порешать задачки из теорвера, написать что-то вроде градиентного спуска, решающего пня, итеративного решения уравнения и поотвечать на вопросики об МЛе... А для подготовки к этой секции я завел рубрику #вопросы_с_собесов, читаем!
А вот этот кабан уже для искушенных мидлов и синьоров (джуны, слушайте и запоминайте). На этой секции вам предложат какой-нибудь кейс (например, реализация ленты Продукты для вас в интернет-магазине Гошан). Что хочет услышать собеседующий? Да практически всё: какие данные, какой бейзлайн, какой пайплайн, какие оффлайн и онлайн метрики, какой дизайн АБ, что по времени и ресурсам... Здесь-то и раскрывается глубина вашего погружения в индустрию.
На этом этапе вы и собеседующие зачастую должны продать себя друг другу. Покажите ваш интерес к компании и задачам, задайте правильные вопросы, уточните условия. Ключевое: в ваших навыках уже заинтересованы, раз вас пригласили на финал.
Давайте завезем сердец и я разберу какой-нибудь МЛСД-кейс из RecSys
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
LeetCode/README.md at main · VanjaRo/LeetCode
Preparing for Yandex technical interview. Contribute to VanjaRo/LeetCode development by creating an account on GitHub.
❤35🐳15🔥5🕊1
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18💅4🤯2
Так о чем же сегодня пойдет речь? Сегодня мы разберем одну из самых культовых статей в RecSys — PinRec!
В последнее время большинство генеративных моделей это навороченные two-tower архитектуры с causal masking. Кстати, подробнее про two-tower был большой пост, для лучшего понимания этого поста рекомендую ознакомиться!
Так вот в Pinterest вместо привычного two-tower взяли GPT-2 декодер, который по истории взаимодействий генерирует не вероятности конкретных ID, а эмбеддинги в едином латентном пространстве. Далее при помощи этих эмбеддингов мы извлекаем ближайшие айтемы из заранее построенного HNSW-индекса (или другого инструмента приближенного поиска).
Классический подход с генерацией ID требует огромного softmax, что дорого и шумно. Тут же модель генерирует эмбеддинги напрямую, избегая лишнего слоя вероятностей и значительно ускоряя инференс.
Все входные данные (пины (=айтемы) и поисковые запросы) представлены не дискретными ID-токенами, а реальными эмбеддингами в общем пространстве. Для этого запросы кодируются уже готовыми OmniSearchSage-векторами, а пины — комбинацией графовых PinSage-эмбеддингов и обучаемой hash-ID таблицей. Далее эмбеддинги проходят небольшие per-type MLP (для каждого типа действий — свой MLP) и нормализуются. Модель обучается стандартным sampled softmax, с logQ-коррекцией для борьбы с популярными негативами.
Авторы используют уже известный для многих трюк — Сount-Min Sketch, который приближает распределение к реальному. Представим, что у нас есть Клики пользователей, Заказы и другие действия в отношении миллионов айтемов. Хранить точные счётчики слишком дорого по памяти, а Count-Min Sketch позволяет считать частоты быстро и компактно, жертвуя точностью.
Ещё один важный трюк — outcome-conditioned генерация (генерация, условленная на целевое действие пользователя). Вместо сложного RL-обучения, они просто подают дополнительный эмбеддинг (например, “клик” или “репин” (сохранение пина)) на позднем связывании в голову декодера. Так генерация становится контролируемой, позволяя задать заранее соотношение целевых действий на инференсе.
Последний важный приём — windowed multi-token генерация. Авторы осознали, что в реальном сценарии пользователю не важен точный порядок действий внутри небольшого окна. Поэтому цель модели — предсказать не ровно следующий айтем, а любой из нескольких будущих. Более того, за один шаг декодирования генерируется сразу несколько эмбеддингов кандидатов, что одновременно сильно ускоряет генерацию и повышает разнообразие.
Outcome-conditioning позволяет управлять типом целевых действий, улучшая recall нужных действий до 6%.
Windowed multi-token генерация снижает латентность (время задержки от запроса до получения результата) в 10 раз и даёт на 16% выше recall с одновременным повышением уникальности выдачи.
Было интересно? Тогда поддержите этот пост реакций и подпиской на РИСЕРЧОШНУЮ, мы с Даней старались
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍5❤2
Канал Доброго Вани | Data Science и Продуктики
Огого, сколько сердец. Давайте определимся с кейсом для разбора. В RecSys все области достаточно специфичны и нет какого-то универсального решения для всех, так что предлагаю выбрать (можно несколько) или предложить свой в комментариях
Anonymous Poll
29%
"Товары для вас" в ритейле
20%
"Фильмы для вас" в онлайн-кинотеатре
42%
"Музыка для вас" в стриминге
31%
"Товары для вас" на маркетплейсе
38%
"Подобрать похожий товар" на маркетплейсе
18%
"Статьи для вас" на блог-платформе (например, Дзен)
Вы, наверное, задаетесь вопросом, куда пропал админ?
Решил немного переключиться на контент. Вместе с AI4Dev записали лекцию-введение в Рекомендательные системы с QA. Рассказал про:
🔵 Типы задач в RecSys с примерами
🔵 Метрики оффлайна и онлайна
🔵 Алгоритм построения пайплайна рекомендательной системы
🔵 Будущее RecSYS
🔵 QA
Ролик уже доступен на Ютубе и ВК. Приятного просмотра!
Кому лень смотреть, может заглянуть в презенташку. Она весьма насыщенная и понятная без питча (файлик в следующем посте).
А я пошел готовить пост про рекомендации музыки по результатам опроса. Совсем мало изучал RecSys в музыке, но буду исправляться😎
Решил немного переключиться на контент. Вместе с AI4Dev записали лекцию-введение в Рекомендательные системы с QA. Рассказал про:
Ролик уже доступен на Ютубе и ВК. Приятного просмотра!
Кому лень смотреть, может заглянуть в презенташку. Она весьма насыщенная и понятная без питча (файлик в следующем посте).
А я пошел готовить пост про рекомендации музыки по результатам опроса. Совсем мало изучал RecSys в музыке, но буду исправляться
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
AI4Dev — AI for Development
Что надо знать, чтобы остаться востребованным ИТ специалистом в мире с LLM?
• Обзоры продуктов, фреймворков и способы взаимодействия с LLM для разработки софта
• Реальные кейсы, pet и бизнес проекты с LLM
• Публичные лекции
В будущее берут не всех!
• Обзоры продуктов, фреймворков и способы взаимодействия с LLM для разработки софта
• Реальные кейсы, pet и бизнес проекты с LLM
• Публичные лекции
В будущее берут не всех!
5🔥10❤5👍1
Кто еще идет? Пишите, найдемся. На ML дебаты сходим ;)
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥3🐳1😇1
🥲 Как обычно, сложно начинать писать после долгого перерыва, но повод есть и достаточно веский.
Еду в новый трип! И, пока я пишу посты по первым дням, предлагаю новой аудитории почитать серию постов про Японию и ЮАР
На пути в эту страну у меня будет 3 остановки: в Стамбуле (2 дня), Колумбии и Панаме.
🇹🇷 Кстати, в Турцию я полноценно никогда не летал, сейчас стараюсь больше посвящать себя путешествиям по России и дальнему зарубежью.
Поэтому фоточки из Стамбула закину просто по красоте, без детального описания, как чувствую, а вам предлагаю угадать, в какую страну у меня было аж 3 пересадки и больше 3 дней пути с учетом всех пересадок.
☀️ Подсказка: это Латина
#Путешествия
Еду в новый трип! И, пока я пишу посты по первым дням, предлагаю новой аудитории почитать серию постов про Японию и ЮАР
На пути в эту страну у меня будет 3 остановки: в Стамбуле (2 дня), Колумбии и Панаме.
🇹🇷 Кстати, в Турцию я полноценно никогда не летал, сейчас стараюсь больше посвящать себя путешествиям по России и дальнему зарубежью.
Поэтому фоточки из Стамбула закину просто по красоте, без детального описания, как чувствую, а вам предлагаю угадать, в какую страну у меня было аж 3 пересадки и больше 3 дней пути с учетом всех пересадок.
☀️ Подсказка: это Латина
#Путешествия
❤16🔥5💅3👎1🐳1