🚀 Друзья, вашему вниманию наш совместный пост с админом канала
РИСЕРЧОШНАЯ — Даней. Кто не знает, Даня работает DLE в WB Tech и уже несколько лет занимается рекомендациями, а на его канале есть много полезной информации о RecSys.
Так о чем же сегодня пойдет речь? Сегодня мы разберем одну из самых культовых статей в RecSys — PinRec!
🔵
PinRec — генеративный ретривер (первая ступень рекомендательного пайплайна) от Pinterest. Они всегда выпускают отличные статьи где и про прод расскажут, и науку проверят.
В последнее время большинство генеративных моделей это навороченные 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-коррекцией для борьбы с популярными негативами.
🔵 Забавный факт, что в pinterest отказались от
semantic ID (о нем будет отдельный пост). Потому что это приводит к семантическому коллапсу: похожие пины теряют различимость, “слипаясь” в схожие направления в пространстве.
Авторы используют уже известный для многих трюк —
Сount-Min Sketch, который приближает распределение к реальному. Представим, что у нас есть Клики пользователей, Заказы и другие действия в отношении миллионов айтемов. Хранить точные счётчики слишком дорого по памяти, а Count-Min Sketch позволяет считать частоты быстро и компактно, жертвуя точностью.
Ещё один важный трюк — outcome-conditioned генерация (генерация, условленная на целевое действие пользователя). Вместо сложного RL-обучения, они просто подают дополнительный эмбеддинг (например, “клик” или “репин” (сохранение пина)) на позднем связывании в голову декодера. Так генерация становится контролируемой, позволяя задать заранее соотношение целевых действий на инференсе.
Последний важный приём — windowed multi-token генерация. Авторы осознали, что в реальном сценарии пользователю не важен точный порядок действий внутри небольшого окна. Поэтому цель модели — предсказать не ровно следующий айтем, а любой из нескольких будущих. Более того, за один шаг декодирования генерируется сразу несколько эмбеддингов кандидатов, что одновременно сильно ускоряет генерацию и повышает разнообразие.
🔵 По результатам авторов, предложенные решения заметно превосходят SASRec, TIGER и PinnerFormer по recall@10 на всех основных поверхностях Pinterest. Сама модель внедрена как один из кандидатогенераторов.
Outcome-conditioning позволяет управлять типом целевых действий, улучшая recall нужных действий до 6%.
Windowed multi-token генерация снижает латентность (время задержки от запроса до получения результата) в 10 раз и даёт на 16% выше recall с одновременным повышением уникальности выдачи.
Было интересно? Тогда поддержите этот пост реакций и подпиской на
РИСЕРЧОШНУЮ, мы с Даней старались 🙏