Проблема простого сортирования
На платформе SeeStocks мы отслеживаем более полумиллиона продуктов от различных ритейлеров Испании. Основная задача — обеспечить пользователю релевантные результаты поиска не только по цене, но и по соответствию его запросам.
Простая сортировка по категориям быстро показала свои ограничения:
- Категория "перец" выводила бутылки острого соуса выше самих горошин перца;
- Страница категории "сумки-инструменты" показывала рюкзаки просто потому, что они находились в той же таксономии;
- Товары с вводящими в заблуждение названиями поднимались вверх лишь за счёт низкой цены.
Нам требовалось решение умнее простой фильтрации по ключевым словам или ценовым диапазонам.
Наш подход: трёхстадийный конвейер
Мы разработали многоуровневую архитектуру, которая сочетает скорость обработки данных с точностью результатов:
Этап 1: Получение кандидатов (быстрое, широкое)
Используя векторное индексирование всех товаров на основе эмбеддингов, полученных из предварительно обученной модели видения и языка, мы сначала получаем широкий набор возможных вариантов. Когда пользователь открывает страницу категории, система ищет ближайшие соседние элементы относительно вектора этой категории. Этот этап оптимизирован под полноту результата, а не под точность. Мы намеренно расширяем выборку до 3–5 раз больше конечного количества отображаемых элементов.
Этап 2: Переранжирование через кросс-кодировщик (медленное, точное)
Полученные кандидаты затем проходят через модель кросс-кодировщика, которая оценивает каждый продукт относительно контекста категории. Кросс-кодировщик обрабатывает товар и категорию совместно, выявляя тонкие взаимосвязи между ними. На этом этапе учитываются несколько факторов:
- визуальное сходство продукта с типичным представлением данной категории;
- текстовое соответствие описания товара запросу пользователя;
- другие метрики качества, такие как популярность товара среди пользователей.
Таким образом, второй этап обеспечивает высокую точность ранжирования, хотя и требует больших вычислительных ресурсов.