WildRecSys @wildrecsys Channel on Telegram

WildRecSys

@wildrecsys


Рассказываем про рекомендации

Для связи: @erqups

WildRecSys (Russian)

WildRecSys - это Telegram канал, который посвящен рекомендательным системам. Если вас интересует тема рекомендаций, то это место для вас. Здесь вы найдете информацию о последних тенденциях в области рекомендательных систем, аналитику, прогнозы и многое другое. Мы рассказываем про рекомендации с различных ракурсов, помогаем разобраться в их особенностях и принципах работы. Группа подходит как для новичков, которые только начинают изучать эту тему, так и для профессионалов, которым нужно быть в курсе всех новостей в этой области. Присоединяйтесь к нашему каналу WildRecSys и узнавайте о всем, что касается рекомендательных систем!* *Для связи: @erqups

WildRecSys

23 Nov, 12:47


Запись доклада "WildBERT — развитие трансформерных архитектур для персонализации Wildberries" на AiConf

Ссылка на Youtube

Тезисы

Презентация

WildRecSys

09 Nov, 18:24


Мой ТОП-10 проверенных и популярных моделей RecSys.

Для меня модели рекомендаций начинаются с тех, которые можно построить на данных формата (user_id, item_id, timestamp). Если у вас есть такие наборы данных, то с помощью следующих моделей можно составить список персональных рекомендаций для каждого пользователя внутри датасета. Этот список я составил по субъективной популярности и уверенности в том, что модели проверены временем:

1. iALS (2008, 4к+ цитирований) - масштабируемая на большие объемы данных матричная факторизация. Крупные компании в РФ часто упоминают ее как кандидатогенератор, рассказывают про различные трюки с оптимизациями. Скорее всего, про ALS на собеседованиях хотят слышать в первую очередь.
2. EASE (2019, 250+ цитат) - моя любимая модель. Один гиперпараметр, решение в явном виде. Моделька - матрица весов item*item. Топ-1 модель по мнению авторов из Сбера. Мы взяли первое место на Hack the cart, используя только эту модель. Ее минус - большие каталоги айтемов, но на них можно использовать ELSA или SANSA.
3. SLIM (2011, 900+ цитат) - аналог EASE. Матрица весов разреженная, зависимость от гиперпарметров более сильная, их больше. По качеству SLIM похуже EASE. С ней возиться сложнее. Однако, в силу разреженности матрицы весов есть и плюс. Помню, SLIM весил 100 Кб, а EASE около 600 МБ на одинаковых размерах.
4. MultiVAE (2018, 1350+ цитат) - модель от Netflix. Та самая, которая в обзоре are we really... выиграла SLIM и стала единственной нейронкой, которая это сделала. На вход модели идет только вектор интеракций, поэтому ее можно обучить на 1000 юзерах, а инференсить на 100к юзерах без дообучения - это прекрасно!
5. ItemKNN (2001, 13к+ цитат). Про этот алгоритм обычно не говорят на собеседованиях, так как "что-то на старом", а зря. У recsys есть open benchmark BARS, и на датасете Amazon Books ItemKNN занимает второе место среди многих моделей. И ни GCN, ни LightGCN, ни даже UltraGCN его не побеждают.
6. GRU4Rec (2015, 3400+ цитат). В 2019 году я занял 17/264 место в Rekko Challenge от Okko. Тогда я в первый раз обучил нейронку для рекомендаций, и это была GRU4Rec. Ожидния не оправдались, но для старта нормально. Кстати, недавно автор разобрал популярные ошибки в ее имплементации.
7. SASRec (2018, 2400+ цитат). Это трансформер для next-item recommendation. Основа основ для использования трансформеров в мире рекомендаций. Имеет множество расширений (TiSASRec).
8. BERT4Rec (2019, 1900+ цитат). Чуть лучше SASRec, например, по статье Саши Петрова. По опыту, часто нет смысла использовать SASRec и BERT4Rec вместе, лучше выбрать что-то одно.
9. LightGCN (2020, 3300+ цитат) - графовая сверточная сеть. В графе есть только юзеры и айтемы, модель оценивает связи user-item с точки зрения графа и делает рекомендации. На мой взгляд, крайне громоздкая, медленно обучаемая и негибкая модель, куда лучше ее улучшение в виде GFCF.
10. TIFU KNN (2020, 120+ цитат). Если в ваших данных есть повторные действия между юзерами и айтемами (например, покупки в супермаркетах), то, скорее всего, все модели выше проиграют по качеству TIFU KNN. Эта модель играет вокруг персональной частоты покупок пользователя. Если человек купил 100 раз молоко, именно TIFU KNN без проблем порекомендует его 101 раз и не ошибется. Остальные модели могут повторить персональные частоты, но все равно по качеству уступят TIFU KNN.

Мне кажется, если вы хотите ввести модель полноценно в свой инструментарий, надо сделать следующее:

Прочитать оригинальную статью.
Посмотреть ее имплементацию: какие идут данные на вход на трейне и инференсе, как данные идут внутри, что на выходе.
Запустить модель на любом датасете, посмотреть за метриками, возможно, на рекомендации.
Изучить гиперпараметры, посмотреть, как они влияют на модель.
Повторить то же для расширений модели. Например, EASE -> ELSA, Lightgcn - GFCF и т.д..
В идеале, применить на проде в АБ или в рамках соревнования.

Выучив все эти модели и пройдя чек-листы, уже можно уверенно ориентироваться в основных моделях, но на этом recsys не заканчивается, а только начинается)

WildRecSys

17 Oct, 15:13


Записи докладов про рекомендации с первого ML Meetup от Wildberries

Саша Тришин из команды персонализации про LightGCN - YouTube, VK

Георгий Соколов из команды товарных рекомендаций про мультиязычный e5 - YouTube, VK

Другие доклады можно посмотреть тут

WildRecSys

12 Oct, 07:11


🔍 Поиск по фото

Не успела на разных ресурсах отгреметь новость (VC, Habr, Рифмы и Панчи и многие другие) о выкатке нового большого релиза поиска по фото, а лид одноименной команды, Никита Романов, уже написал большую статью про то, как все устроено под капотом!

Про архитектуру, детекцию объектов и валидацию - читайте в первой части разбора!

WildRecSys

05 Oct, 13:57


Лучше поздно, чем никогда

Читая статью на Хабре наткнулся на комментарий (первый скрин под этим постом) от 2021 года, в котором подсвечивается одна из проблем реактивного домешивания на главной.

Исходная задумка простая - давайте заранее построим i2i матчинг похожих товаров (второй скрин). Далее, юзер в рамках сессии кликает на товары, а мы в онлайне домешиваем на главную похожие карточки.

Работает хорошо, но есть corner case - если я выбираю определенный товар (ту же лопату), то я прокликаю их много - а значит вся главная будет забита лопатами.

В прошлом квартале, в рамках решения проблемы, выкатили 2 большие фичи. Первая - это экспоненциальное затухание реактивных взаимодействий, чтобы через некоторое время главная “откатывалась” к исходному состоянию.

Вторая - применение MMR в мерджере (таким гордым именем у нас зовется блендер оффлайн и реактивных источников 😤), в момент формирования выдачи.

Подробнее про эксперименты с MMR и DPP расскажет Никита Ваганов, DS в команде HML, в рамках обзорной статьи.

Всем хороших выходных! 🙂

WildRecSys

28 Sep, 08:47


🛒 WB RecSys на AiConf

Вчера, во второй, завершающий день конференции, выступили сразу с двумя докладами:

WildBERT — развитие трансформерных архитектур для персонализации Wildberries
Мультимодальные рекомендации в Wildberries

🔥 Было круто! Презентации можно найти по ссылкам, дополнительно закину в комментарии к посту. Записи появятся в течение трех недель.

😇 Остаемся на связи, в ближайшее время частота выхода технических постов в канале вернется к прежнему уровню.😌

P.S. Большое спасибо всем, кто принимал участие в подготовке докладов и тем, кто всячески поддерживал! 😍

P.P.S. Слева направо - Саша Самойлов, Макс Пасашков, Женя Иванов, Степа Евстифеев

WildRecSys

11 Sep, 10:27


📌 AiConf 2024

Привет! Рад сообщить, что мне выпала честь представлять Wildberries в целом и команду персонализации в частности на конференции AiConf 2024, которая будет проходить 26 - 27 сентября.

Расскажу про то, как шаг за шагом нативный BERT4Rec превратился в WildBERT — инструмент, который играет одну из самых важных ролей в персонализации Wildberries. На главной, в карточке товара, поиске и каталоге.

Про что поговорим:

- Large vocabulary bottleneck, negative sampling и logQ correction;
- выкатка в прод и бизнесовые требования, дихотомия офлайн и онлайн метрик;
- подход к маскированию при обучении, next basket prediction;
- формирование цепочки взаимодействий юзера — якорные товары, комбинированный фидбэк и учет OOV;
- ALBERT или DEBERTA;
- SparseAdam и ускорение обучения;
- квоты как инструмент оптимизации diversity;
- интеграция в единую инфраструктуру WBX, что позволило унифицировать процесс векторного доранжирования выдач на главной, в поиске и каталоге;
- и многое другое!

😱 Все доклады можно посмотреть тут, а при оформлении билета использовать промокод от членов программного комитета datascience, который позволит получить скидку в 15%

WildRecSys

28 Aug, 14:52


#wb_в_деле
Интересуешься Машинным обучением и Data Science? Хочешь узнать, как современные технологии применяются в работе маркеплейса? Тогда welcome на первый ML Meetup Wildberries 🎤

На митапе спикеры расскажут про ML-решения в продуктах и процессах компании, а также поделятся интересными решениями в Рекомендациях и Поиске.

🔜 11 сентября, 18:00
📍 офис Wildberries в Москве, метро Белорусская

Регистрация уже открыта. Поторопись, количество мест ограничено⚪️

Подписывайтесь, чтобы не пропустить новые подробности о митапе:
🌟 @wb_space

WildRecSys

10 Aug, 14:03


📸 Object detection в поиске по фото

Нас уже больше тысячи, а постов про CV еще не было. Исправляем это упущение!

В своем выступлении на I`ML, лид стрима мультимодальных эмбеддингов команды персонализации, Степа Евстифеев, рассказал про архитектуру модели, которая внутри компании известна как “кропы”.

Про то, как сетка для детекции элементов одежды доехала до прода - читайте в презентации!

Подробнее про саму задачу поиска по фото расскажем в следующих постах в рамках CV трека.

@wildrecsys 🤩

WildRecSys

05 Aug, 17:25


🔼 Этапы развития персонализации

За период с начала года по конец первого квартала основная бизнесовая метрика команды персональных рекомендаций, доля GMV главной, выросла примерно вполовину - связано это как с улучшением текущих и интеграцией новых кандидатных моделей вкупе с развитием реранкера, так и с прогрессом в логике реактивности.

Во втором квартале мы продолжили идти “в глубину” - тестировали множество гипотез, связанных с нашими основными моделями для выдач на главной, но что гораздо более важно, шагнули и “в ширину” - начали персонализировать другие источники маркетпелйса на базе своих эмбеддингов.

🟢 В рамках этого эволюционного шага был проведен ряд зеленых АБ тестов, с последующей выкаткой на прод, в следующих источниках:

🔎 Поиск - первый источник, и по очередности внедрения, и по важности - из-за своего размера и количества паттернов пользователей, которые он покрывает. На первом скрине - пример моей выдачи по запросу “футболка в полоску” (моделька закодировала в эмбед знание о том, что я мужчина и забустила вверх мужские товары), второй скрин - если ввести тот же запрос с анрега (выдача без доранжирования). Ссылка для самостоятельного тестирования

🗂 В каталоге векторное доранжирование также показало хороший результат и было выкачено на прод

💸 А вот в баннерной рекламе улучшить основные бизнесовые метрики и сделать шаг в сторону персонализации помогло внедрение обычного соцдема - логика над предсказанными полом и возрастом бывают так же полезны, как и склонностные модели

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

Не останавливаемся на достигнутом, продолжаем работу. Быть добру! 🫡

WildRecSys

22 Jul, 14:40


🚩 Опорные товары и квоты

Разнообразие выдач - общая проблема для целого ряда моделей, и бороться с ней можно по разному. В трансформерах, например, экспериментировать с маскированием, сессиями, использовать другие механизмы внимания (кстати, мы переехали с ALBERT на DeBERTa и повысили coverage в 2 раза 🚓) и т.д.

Но есть и довольно быстро реализуемые, и простые для внедрения способы, которые подойдут как для user2item моделей, так и для item2item на историях.

⚓️ Первый - это опорные товары, они же якорные товары, они же позитивы по истории. Суть в том, что мы рассматриваем историю взаимодействий юзера не целиком, а отбираем определенный набор товаров. Например, двигаемся с конца и берем только N товаров определенной категории, а остальные, той же категории, дальше по истории, выкидываем. Итоговую цепочку подаем в модель.

Помогает в тех случаях, когда юзер взаимодействует только с определенным пулом товаров или категорий (corner case - любитель чая с двадцатью чаями подрят в истории) и надо этот байас убрать, чтобы моделька на нем не циклилась, а подсовывала больше различных товаров.

Вместо наивных отборов айтемов, можно натравить на историю MMR / DPP / pDPP, но, по субъективному опыту, сильных эффектов это не оказывает.

Второй способ - это квоты. Предположим, что нам в выдаче нужно 200 товаров. Давайте, про запас, проскорим тысячу, а потом, не ломая релевантность, наложим фильтр - если категория товара выше по выдаче встретилась больше N раз - такой айтем мы выкидываем. В итоге, финальная выдача кандидатной модели будет гарантированно иметь нужное разнообразие, а значит на этапе переранжирования мы всегда сможем гарантировать это свойство и для финальной выдачи.

В какой-то момент мы внедрили эти практики во все наши кандидатные модели и забустили разнообразие выдачи с реранкера в несколько раз, чего и вам желаем 👋

WildRecSys

05 Jul, 12:31


🔥 Графовые модели как генераторы кандидатов

В продолжение первой части, в которой была рассмотрена теория графов, DS команды персонализации Саша Тришин подготовил статью, в которой расскажет об одной из наших моделей первого уровня - LightGCN

Как работают свертки над графом, что такое Light Convolution и как удалось победить popularity bias?

Читайте в нашей статье на Хабре

Там же вы найдете ноутбук с имплементацией описанных экспериментов на датасете MovieLens

Будет чем заняться во время урагана 🚬

WildRecSys

03 Jul, 16:15


📱 RecSys каналы, обьединяйтесь!

Собрали папку с самыми интересными и полезными каналами, в которых пишут про RecSys

Часть каналов делают обзоры статей по RecSys, другие - пишут про новости, новинки индустрии и многое другое

➡️ Присоединяйтесь, чтобы не пропустить ничего важного!

WildRecSys

01 Jul, 17:49


Графы в рекомендательных системах [часть 1]

Мало кто знает, но я недавно писал научную статью связанную с графовыми рекомендательными системами.

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

Она будет состоять из двух или трех статей — разной сложности и актуальности.

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

➡️ Читать пост на HABR

#RECSYS #HABR

WildRecSys

21 Jun, 08:04


👑 Matching

В отделе рекомендаций, помимо команды персонализации, есть и другие направления.

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

Всем приятного пятничного прочтения!

WildRecSys

16 Jun, 13:22


🔭Exploration в рекомендациях служит для поддержания долгосрочного качества системы. Практики признают это, но объяснения дают скорее умозрительные, чем основанные на данных. Причина в том, что для объективного измерения вклада exploration нужно крутить технически сложный A/B-эксперимент: поддерживать две версии системы, разделённые по пользователям и данным, и наблюдать, как эти версии эволюционируют в долгосрочной перспективе. Если (когда) что-то пойдёт не так, многонедельный эксперимент придётся заводить заново. Поэтому подобные эксперименты откладываются до момента, когда будут исправлены все баги. К счастью для нас, исследователи из Google провели серию таких экспериментов и рассказали об этом в своей статье на WSDM 2024. Теперь мы можем быть уверены, что существуют рекомендательные системы, в которых exploration объективно полезен. ➡️➡️

WildRecSys

09 Jun, 15:43


🏐 Serendipity на главной WB

Принимая эстафету🫵от моего коллеги Вани Максимова, постараюсь раскрыть основные метрики “около-серендипности”, которые мы трекаем при работе с моделями.

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

Global novelty - средняя новизна айтемов в рекомендациях
Category coverage - покрытие категорий моделью
Category user novelty - среднее количество новых категорий для юзера
Category user repeat rate - среднее количество категорий, которые “перетекают” из истории юзера в его рекомендации

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

Для этого, при обучении на pairwise loss, в таргете, помимо релевантности, мы также учитываем и сводный показатель качества товара, в который входит и частотность по выборке (больше - хуже). Формулу можно посмотреть на слайде с реранкером в реплае, в телеграм с формулами туго.

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

Такой подход позволяет не только радовать пользователей “серендипными” товарами, но и частично избавиться от нескольких крупных бизнесовых проблем, таких как рекомендация уже купленного и засилье FMCG товаров в выдачах.

WildRecSys

01 Jun, 13:21


На днях прошла RecSys сессия ODS 🦜, в которой некоторые спикеры ещё раз отметили, что академический рексис, зачастую, живёт в вакууме.

Думаю, что к такому же выводу приходят многие инженеры из индустрии - кто-то заводил LightGCN на Amazon-Book 📖 и с удивлением смотрел на огромный pop bias. Кто-то натягивал BERT4Rec на свои Ecom данные и получал выдачу из 1000 персонализированных шапок 🤵 для юзера. А кто-то сейчас наблюдает за тем как LLM в рекомендациях (пока что) не показывают таких же выдающихся результатов, как в NLP.

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

Есть мнение 🆒, что на определенном этапе развития, редкая модель может показать себя настолько хорошо, как некоторые, не то чтобы глобальные, изменения в продукте. Где-то это новшества в UI (красивая кнопка, зачастую, может лучше вырастить конверсию, чем переезд на новую модель), где-то лучшее понимание своего юзера (а всем ли нужна персонализация?), и т.д.

И что теперь, не делать модели? 😵 Конечно делать, но можно увеличить их value, если смотреть не только в сторону архитектур, но и в сторону развития Ecom рынка. С Альфа Конфы 🏦, на которую мы с ребятами ходили, хотел бы показать несколько интересных выкладок на основе аналитики из доклада Data Insight (начало на 59 минуте), которые можно очень просто переложить на модели.

Суммарное количество поставщиков на маркетплейсах, по прогнозу, увеличится с 450 до 700 тысяч
Дополнительная персонализация в разрезе поставщиков, а не товаров, работа с холодным стартом

На 🛒 по заказам лидирует одежда, на 🛒 - товары для дома, на обоих маркетплейсах есть "проседающие" категории
Персонализированные модели под разные категории, чтобы бустить те, которые лучше продаются у конкурентов. Кстати, вы знали, что на WB теперь тоже есть машины? 🚙

Суммарное количество eGrocery заказов из регионов обогнали Москву и Питер вместе взятые, в целом, в онлайн-торговле регионы драйвят рынок
Выдачи (и словари) моделей должны учитывать географию складов, чтобы человек из каждого региона мог позволить себе сделать заказ без долгого ожидания доставки

Примерно так можно черпать вдохновение для технических релизов, слушая, по-сути, продуктовые доклады 😋

P.S. Неплохой доклад еще на 2:17:00, про нейросетевой кабинет для поставщиков.

WildRecSys

26 May, 09:52


Итоги RecSys трека DataFest’а на сегодня

➡️ SASRec, BERT4Rec — уже классика, почти все спикеры упомянули их.
➡️ Трансформеры круто, масштабируются, могут реранжировать, рекомендовать и тд и дешевле быстрее кетбуста (если много данных)
➡️ DSSM — балдежно если надо искать схожести, тоже частенько говорили.
➡️ Дистиляция модели вполне может быть через категории, например в авито, вк — рекомендации строятся на категориях, а не товарах.
➡️ Подход с определением предпочтений категорий товаров или каких-то ниш частенько прослеживается на разных этапах рекомендаций (например: кино, посты, актеров, рестораны, театры), как в Cold Start так и основных персонализациях.
➡️ Пару раз упомянули сегментацию эмбеддингов ALS.
➡️ Графы улучшают хвост рекомендаций и находят зависимости CF.
➡️ В кандидаты можно пихать разные статистики Top-K рекомендаций.
➡️ Эмбеддинги картинок почти не дают приросты, проще превращать их в текст.
➡️ Тренды и топ папиры смотреть в посте с Кириллом выше🏻

💬 Если я что-то забыл пишите в комменты