Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Эволюция similar-рекомендаций: как мы переосмыс...

Avatar for Lamoda Tech Lamoda Tech
September 03, 2026

Эволюция similar-рекомендаций: как мы переосмыслили ленту. Дмитрий Борисов, Data Scientist Lamoda Tech

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

Рассказываю про этапы развития рекомендаций похожих товаров в Lamoda — от базовых подходов до реранкера, продуктовых гипотез и современных алгоритмов:

- Что крутилось в проде ранее
- Некоторые продуктовые вызовы, тестирование гипотез
- Новые алгоритмы, учитывающие как визуальное, так и текстовое сходство
- Внедрение реранкера, результаты

Avatar for Lamoda Tech

Lamoda Tech

September 03, 2026

More Decks by Lamoda Tech

Other Decks in Technology

Transcript

  1. Lamoda в цифрах 17 млн >800к MAU товаров >200 >40

    сотрудников в D&A сотрудников в DS 5
  2. План 1 Принцип работы рекомендаций похожих товаров 2 Предыдущая реализация:

    обзор подхода 3 Улучшенный алгоритм: как это работает сейчас 6
  3. «Похожие» – одна из ключевых зон в fashion индустрии Улучшаем

    пользовательский опыт Увеличиваем конверсию Помогаем найти альтернативы нужного размера Удерживаем в приложении 9
  4. Подходы к построению similar рекомендаций Contentbased: • • Атрибуты Правила

    / Фильтры Collaborative filtering (behavioral): • • u2i взаимодействия co-view / co-purchase Graphbased: Deep similarity: • • • • user-item graph item-item graph embeddings multimodal Плюсы: интерпретируемость Плюсы: реальное поведение Плюсы: сложные связи Плюсы: обобщение, семантика Минусы: плохо обобщает Минусы: проблема cold start Минусы: трудности построения Минусы: сложнее внедрить 10
  5. Объекты основного датасета – пары (sku1; sku2) Атрибут Бренд: Sela

    Вес sim Wbrand 0 Wbrand_s 0.76 Атрибут Бренд: Original Siberia m Цвет: бежевый Цена: 4 099 Wcolor 0 Wcolor_sm 0.96 Wprice 0.89 Цвет: серый Цена: 5 990 13
  6. Похожесть категориальных признаков на основе w2v ('women', 'REGULAR', 'SKIRTS') +

    'color=розовый' ('men', 'PREMIUM', 'JEANS') + 'brand=Armani Exchange' 0.991 'color=бежевый' 0.986 'color=мультиколор' 0.980 'color=красный' ... 0.936 'color=черный' 0.993 'brand=Boss Hugo Boss' 0.992 'brand=Boss Orange' 0.991 'brand=Trussardi Jeans' ... 0.930 'brand=Karl Lagerfeld' Берем товары в одном заказе Улавливаем семантику атрибутов 14
  7. Обучаем линейные модели для каждого контекста Y (таргет) Вектор признаков

    (1.0, 1.0, 0.0, 0.8, 1.0, ...) → 1 (0.0, 0.87, 0.0, 0.88, 0.9, ...) → 1 (0.0, 0.6, 0.0, 0.7, 0.92, ...) → 0 (0.0, 0.5, 0.0, 0.95, 0.4, ...) → 0 … Десятки тысяч обучающих примеров, обучаемся на одном месяце Линейная модель: ∑ wattr * simattr Результат обучения: подобранные веса wattr 15
  8. Для разных категорий важность атрибутов отличается W 0.000 I 0.025

    I 0.050 I 0.075 I 0.100 I 0.125 I 0.150 I 0.175 I Цена Вид спорта Бренд Название Цвет Стиль 16
  9. Почему мы пересмотрели подход к similar Было: Хотим: • •

    • • • • Линейная модель по атрибутам Проблема item cold start Обучение на коротком окне Высокая вычислительная нагрузка Legacy код • • • Учитывать разную модальность Масштабируемость Делать персонализацию Иметь один similar-embedding для товара 17
  10. Собираем positive таргет на основе заказов и сессий Order #333:

    • • • • Dresses #1 Bags Sweatshirts Dresses #2 Session #777: • • • • • Dresses #1 Bags #1 Sweatshirts Dresses #2 Bags #2 Dresses Class #1 Dresses Class #2 Bags Class #3 20
  11. Собираем positive таргет на основе заказов и сессий Берем данные

    за годовой промежуток Держим пропорцию 50/50 — ориентируемся на заказы, потому что их меньше 1 2 22
  12. Собираем positive таргет на основе заказов и сессий Берем данные

    за годовой промежуток Держим пропорцию 50/50 — ориентируемся на заказы, потому что их меньше 1 2 Балансируем количество пар по месяцам 3 23
  13. Обучаем текстовую и картиночную модель Товар жилет, детали: контрастная отстрочка,

    вид застежки: на пуговицах, для школы: школьная форма, сезон: мульти, узор: однотонный, бренд: stenser, цвет: черный. Эмбеддинг картинки (fashion-clip) Эмбеддинг текста (rubert-tiny2) Эмбеддинг товара 24
  14. Обучаем текстовую и картиночную модель Товар жилет, детали: контрастная отстрочка,

    вид застежки: на пуговицах, для школы: школьная форма, сезон: мульти, узор: однотонный, бренд: stenser, цвет: черный. Эмбеддинг картинки (fashion-clip) Эмбеддинг текста (rubert-tiny2) • • • • Triplet Circle Loss BalanceSampler (category) Multi Similarity Miner Эмбеддинг товара 25
  15. Пробовали много сетапов экспериментов 1 Различные энкодеры • dino-v2 •

    e5-large 1 2 Агрегации двух модальностей • concat • avg 3 Лоссы и их гиперпараметры • Circle, triplet, contrastive • Cosine, euclidean distance 26
  16. Как работает инференс основного алгоритма Архитектура основного алгоритма поиска кандидатов

    Image Detector (Fast R-CNN) Mapping category -> detector output Все товары Text Model Business layer Preprocess Candidates 29
  17. Как работает инференс визуального алгоритма Архитектура визуального алгоритма поиска кандидатов

    Все товары Image Detector (Fast R-CNN) Fashion-clip Business layer Mapping category -> detector output Candidates & Embeddings 31
  18. Дублирование кандидатов — это потеря эффективности • Два движка не

    должны дублировать друг друга • Нужны разносторонние кандидаты 33
  19. Генерация кандидатов ≠ ранжирование Выдача двух разных юзеров после реранкера:

    Candidate generation: оптимизируем метрику recall Ranking: оптимизируем метрику precision 34
  20. Реранкер используется для финального ранжирования Reranker — модель из библиотеки

    catboost Задача: отранжировать набор готовых товаров-кандидатов в самом релевантном порядке для пользователя Таргет: добавление в корзину Учимся: на реальных показах товаров 35
  21. Реранкер используется для финального ранжирования Какие признаки учитывает Reranker —

    модель из библиотеки catboost Задача: отранжировать набор готовых товаров-кандидатов в самом релевантном порядке для пользователя Таргет: добавление в корзину Учимся: на реальных показах товаров Товарные (sku): - sku__location__platform___cart_add___60d - sku_reviews_count - In_stock_quantity Пользовательские (user): - sum__order__90d - product_page__7d - returned_sum__30d Парные (user-sku): - facet_brand - facet_style - facet_color_family 36
  22. Итоговая архитектура Candidates & Features Storage & Embeddings Service Recommendations

    Top Ncandidates Service Recommend Reranker - Catboost inference - Dot product - Merge candidates 38
  23. Итоговая архитектура Candidates & Features Storage & Embeddings Update every

    1 day Features calculation Candidates calculation Service Recommendations Top Ncandidates Service Recommend Reranker Reranker train - Catboost inference - Dot product - Merge candidates Model weights & config S3 etcd 39
  24. Ближайшие планы 1 Улучшение детектора одежды 2 1 датасетом Эксперименты

    с трейн 3 Новые фичи в реранкер 4 Ресерч новых моделей в основной кандидатный движок 42
  25. Выводы 1 Сделали новый алгоритм, учитывающий две модальности 2 1

    Начали учитывать персональные предпочтения юзеров 3 Продуктово улучшили полку рекомендаций 43