Выжимаем максимум из ALBERT4Rec

Выжимаем максимум из ALBERT4Rec

Eugene Ivanov
Эта и другие статьи про рекомендации в Wildberries выходят в рамках телеграм канала @wildrecsys

Введение

Привет! В прошлой статье я рассказывал как заводил ALBERT4Rec для персональных рекомендаций на главной Wildberries. Сегодня поделюсь подходами к развитию модели, которые мы успешно внедряли на протяжении прошлого года. 

Гиперпараметры и около того

Первое, что мы попробовали - это увеличение количества слоев и attention heads. На удивление, это не дало прироста на наших данных, зато заметно увеличивало время обучения. 

Также в результате ряда экспериментов эмпирически нашли количество эпох, которые нужны модели для сходимости - 10. Оказалось, что из-за схемы валидации с сэмплированием, которая фигурирует в оригинальном пейпере, early stopping не всегда корректен. На ретро тесте более поздние эпохи всегда показывают лучшее качество.

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

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

Бьем данные на сессии

В оригинальном BERT4Rec предлагается подавать на вход модели цепочку пользовательских взаимодействий. В таком варианте у каждого айтема в этой цепочке будет свой positional embedding. 

Это позволяет модели хорошо выучивать связи между айтемами, но при этом мы теряем другие связи - между корзинами, что очень важно, ведь именно эта информация дает сигнал, например, о сопутствующих товарах (MacBook и чехол в одном заказе). 

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

https://arxiv.org/pdf/2308.01308.pdf

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

Во-вторых, в дополнение к маскированию случайных айтемов, мы также маскируем и последнюю сессию. 

Такой, по сути, переход от задачи next item prediction к задаче next basket prediction, дает не только хороший прирост по ранжирующим метрикам, но и значительно повышает diversity конечной выдачи.

Комбинируем фидбек

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

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

Решение этой проблемы, на самом деле, на поверхности - модель всегда нужно учить на том фидбеке, в котором ты уверен. А инференсить можно на чем угодно. 

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

Не персонализацией единой

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

Свойство контекстуальной похожести

Заключение

Спасибо что дочитали - скоро вас ждут статьи про матчинг, сопутствующие товары и, конечно, новые заметки про персональные рекомендации :)

Report Page