Привет! Я — Игорь Старун, BigData Lead в MPSTATS. Я уже 3 года занимаюсь анализом данных на маркетплейсах, штудируя гигантские объёмы информации и превращая их из непотребного и нечитаемого вида в удобоваримый и анализируемый. Моя задача — собрать и подготовить данные так, чтобы помочь продавцам на маркетплейсах разобраться, что происходит с их товарами, конкурентами и продажами, чтобы они не утонули в хаосе карточек, цен и остатков. В этой статье я расскажу, как мы перерабатываем эти объемы грязных данных и структурируем для дальнейшего анализа.
Данные о товарах – это основа всего. Каждую неделю мы обходим более 200 миллионов карточек с Wildberries и Ozon. Названия, описания, характеристики, фотографии — всё это мы аккуратно собираем и складываем в базы данных (для разных задач мы используем ClickHouse, Postgres, MySQL и MongoDB) и облачные хранилища. Зачем? Чтобы потом сделать с этим что-то умное и полезное.

Тут важно понимать, что продавцы по-разному заполняют свои карточки. Кто-то указывает все до мельчайших подробностей, кто-то оставляет половину полей пустыми. Один продавец заказывает профессиональную фотосессию с моделями, другой фоткает на тостер в гараже. Есть описания, сделанные с любовью, а есть просто архив ключевых слов — бессмысленный и беспощадный. Но это еще полбеды: некоторые продавцы даже не переводят содержание на русский язык.
1. Предобработка: превращаем данные в эмбеддинги
Парсинг карточек — это только начало. Сырые данные слишком хаотичны, поэтому мы превращаем их в эмбеддинги — числовые представления, которые компактно описывают текст или изображение.
Что такое эмбеддинг?
Эмбеддинг — это способ превратить текст, изображение или другой вид данных в набор чисел, чтобы компьютер мог с ними работать.
Например, есть список слов: «яблоко», «банан», «машина». Компьютер не понимает слова как человек, ему нужны числа. Специально обученная модель берёт каждое слово и превращает его в набор чисел — как координаты в многомерном пространстве. В этом пространстве похожие вещи располагаются рядом: эмбеддинги для «яблока» и «банана» окажутся близко, так как это фрукты, а эмбеддинг «машины» будет дальше, потому что это совсем другой объект.
Этот принцип работает для текста, изображений и любых других данных. Эмбеддинги помогают сравнивать, находить сходства и анализировать данные. Это универсальный язык, который понятен компьютеру.
Если хотите более подробно погрузиться в тему, рекомендую статью Эмбеддинги для начинающих.
Как мы обрабатываем текст
Каждое текстовое поле (название, описание, характеристики) обрабатывается отдельно. Для каждого поля мы строим собственный эмбеддинг, потому что смыслы у них разные.
Вот как это выглядит:
1. Описания
Продавцы любят наводнить описание кучей ключевиков, чтобы ранжироваться по большему числу поисковых запросов. Поэтому мы предварительно очищаем и сокращаем описания с помощью суммаризатора LexRankSummarizer, чтобы избавиться от избыточной информации.
Если описание отсутствует, мы формируем его самостоятельно из других полей, либо же берем описание идентичного товара.
2. Названия
Иногда в названиях не хватает важной информации. Например, там может не быть бренда, цвета или половой принадлежности товара. Поэтому мы автоматически дополняем названия этой информацией, чтобы они стали более полными.
3. Характеристики
Характеристики (например, Пол: Женский или Материал: Хлопок) заполняют далеко не все продавцы, при этом они содержат важную техническую информацию о товаре. Мы не можем оставлять такие поля пустыми, поэтому используем данные об идентичных товарах.
Для этого применяем мажоритарное голосование:
-
Находим идентичные товары с заполненными характеристиками.
-
Для каждой характеристики анализируем все значения, которые встречаются у этих товаров.
-
Выбираем наиболее частотное значение.
Например, если у 70% идентичных товаров указан Пол: Женский, у 20% — Пол: Мужской, а у 10% ничего не указано, то мы записываем Пол: Женский как наиболее вероятное значение.
Этот подход помогает заполнить пропущенные данные, не добавляя лишнего шума. В итоге характеристики становятся менее хаотичными и более пригодными к анализу.
В итоге приводим всё к формату: {Характеристика 1: Значение 1. Характеристика 2: Значение 2}.
Для преобразования текстов в эмбеддинги мы используем LaBSE-ru-turbo.
Почему именно LaBSE-ru-turbo?
При выборе модели мы протестировали около 10 вариантов, включая популярные мультиязычные и русскоязычные модели, такие как mBERT, XLM-R и другие. LaBSE-ru-turbo показала себя лучше остальных в контексте данных российских маркетплейсов.
Вероятных причин несколько:
1. Качество мультиязычных эмбеддингов
Карточки товаров часто содержат смесь русского и английского (например, “Худи Oversize Black”). LaBSE-ru-turbo успешно обрабатывает подобные случаи, не теряя смысла и сохраняя высокую точность.
2. Способность работать с короткими текстами
Названия и характеристики товаров — это короткие, часто сжато сформулированные фразы. LaBSE-ru-turbo хорошо справляется с извлечением их смысла.
На тестах модель показала на 15-20% более точные результаты по сравнению с другими кандидатами в задачах поиска похожих товаров и их дальнейшей кластеризации по группам.
3. Оптимальная производительность
LaBSE-ru-turbo — это модифицированная версия, которая ускорена для работы с большими объемами данных.

Как мы обрабатываем фото
Для каждого товара мы создаём два эмбеддинга:
-
По первой фотографии — она чаще всего самая информативная и сразу даёт ключевое представление о товаре.
-
По первым четырём фотографиям, которые мы объединяем в одно изображение. Здесь есть небольшая хитрость: мы склеиваем 4 фотографии в одну (2 ряда по 2 изображения) и строим эмбеддинг уже по этому объединённому изображению. Это помогает учитывать дополнительные детали, которые могут быть упущены на одном снимке, но не требует кратного роста вычислений.
Раньше для создания эмбеддингов мы использовали Xception, но в задаче кластеризации товаров модель показала недостаточное качество. Например, она плохо справлялась с различиями в текстурах и деталях, которые критичны для разделения категорий вроде «каркасные бассейны» и «надувные бассейны». Нам нужно было более мощное решение, и выбор пал на CLIP-подобные модели.
Сейчас для разных задач мы применяем 2 модели:
-
MetaCLIP-b32-400m — оптимальна для быстрого создания эмбеддингов с хорошей точностью.
-
MetaCLIP-l14-fullcc2.5b — более тяжёлая, но выдаёт глубокие и точные эмбеддинги, особенно полезные для задач кластеризации и матчинга.
Почему именно CLIP-подобные модели?
CLIP-подобные модели созданы для работы с изображениями и текстами, что делает их универсальными для мультимодальных задач.
Их ключевые преимущества:
1. Понимание смысла изображений:
Эти модели создают эмбеддинги, которые отражают не только визуальное, но и семантическое содержание изображения. Как если бы кто-то сначала описал происходящее на картинке текстом, а уже затем построил по нему вектор.
Например, футболка и свитер получат близкие векторы, а футболка и ботинки — более удалённые.
2. Устойчивость к шуму:
CLIP-подобные модели хорошо справляются с изображениями разного качества — будь то профессиональная фотосессия или фото на фоне ковра.
3. Высокая точность:
В задачах кластеризации и поиска похожих товаров модели значительно превосходят Xception, особенно в более сложных категориях.
Для желающих углубиться в тему CLIP-моделей рекомендую интересную статью на Хабре.

Скорость обработки
На одном сервере мы ежедневно считаем 50-60 миллионов текстовых эмбеддингов и 5-6 миллионов фотоэмбеддингов. Не пугайтесь — здесь учитываются не только эмбеддинги товаров, но и многие другие: поисковые запросы покупателей, статьи из базы знаний компании и еще куча всего, что используется для других задач.
За счет чего достигли такой скорости?
Для обработки мы используем сервер с одной видеокартой NVIDIA RTX 4000 SFF Ada и целый арсенал оптимизаций:
1. Параллельная обработка
Тексты и фотографии обрабатываются одновременно, чтобы максимально использовать ресурсы.
2. Синхронизация процессов на CPU и GPU
Пока один батч данных подтягивается из ClickHouse или облачных хранилищ, другой уже обрабатывается на GPU. Это помогает минимизировать простои и улучшить производительность.
3. Батчинг
Эмбеддинги считаются не по одному, а большими партиями, что значительно ускоряет процесс за счёт эффективного использования GPU.
4. Оптимизация форматов
Мы используем float16 вместо float32, что уменьшает объём данных в памяти, не теряя при этом точности эмбеддингов.
5. Использование кэшей
Многие тексты и фотографии на маркетплейсах дублируются. Если эмбеддинги уже были рассчитаны ранее, повторные вычисления не запускаются. Это экономит ресурсы для задач с динамическими данными.
6. Оптимизация ClickHouse
Таблицы в базе данных структурированы для ускорения выборок, а запросы оптимизированы так, чтобы минимально нагружать сервер. Используем шардирование по id товара, чтобы эффективно получать и загружать данные.
2. Где все это применить?
Итак, в нашей базе данных теперь хранится миллиард векторов. Что с ними делать? Вариантов много!
Эмбеддинги — это фундамент, на котором строятся многие аналитические инструменты MPSTATS. Ниже приведу несколько несколько примеров их применения.
Поиск ближайших конкурентов
Проблема:
Самое простое применение для эмбеддингов - поиск похожих объектов. В контексте маркетплейсов это в первую очередь поиск товаров-конкурентов.

Решение:
Для каждого товара мы находим конкурентов с помощью стандартного подхода:
-
Уменьшаем размерность эмбеддингов с помощью PCA или UMAP, чтобы ускорить дальнейшие операции.
-
Создаём общий эмбеддинг товара, объединяющий текстовые и визуальные представления.
-
Для каждой категории товаров строим индекс поиска с использованием Faiss, который позволяет эффективно искать похожие векторы. Кстати, держите хорошую статью про Faiss.
-
Далее для каждого товара запрашиваем ближайшие векторы и получаем список похожих товаров.
Сопоставление категорий между маркетплейсами
Проблема:
Wildberries или Ozon? Большая боль любого продавца на маркетплейсах - понять, где ему выгоднее вести бизнес. Выбор между двумя главными маркетплейсами невозможен без наглядного сравнения интересующих категорий. Поэтому мы поставили перед собой задачу смэтчить категории двух маркетплейсов и провести сравнительную аналитику идентичных ниш.

Проблема в том, что на разных маркетплейсах категории с похожими товарами могут называться совершенно по-разному, потому что у каждой площадки своя логика рубрикатора.
Решение:
Принцип тут тот же, что и в поиске конкурентов
-
Для каждой категории берём топовые товары (например, 100 самых продаваемых).
-
Объединяем их эмбеддинги и создаём общий вектор категории.
-
Сравниваем векторы категорий между маркетплейсами, чтобы найти пересечения.
-
Валидируем результат с помощью LLM, оставляя только настоящие мэтчи.
В более простом варианте можно сразу работать с названиями категорий: это потребует меньше ресурсов, так как не придется строить эмбеддинги для товаров.
Так мы можем автоматически сопоставлять категории двух маркетплейсов, избавляя пользователей от рутинной работы. Далее мы строим наглядный сводный отчет, в котором сравниваем 2 маркетплейса по ключевым параметрам: выручка, конкуренция и т.д.
Анализ SEO
Проблема:
Один из ключевых факторов ранжирования товара на маркетплейсах — это релевантность карточки поисковому запросу. Алгоритмы маркетплейса автоматически определяют, по каким запросам стоит показывать карточку покупателю. Как понять, соответствует ли карточка товара самым популярным запросам?
Решение:
Все очень просто, когда есть эмбеддинги:
-
Парсим с маркетплейсов поисковые запросы и их популярность среди покупателей.
-
Для каждого поискового запроса создаем свой эмбеддинг. Здесь есть 2 варианта - построить усредненный эмбеддинг по товарам, которые ранжируются по соответствующему запросу, либо же сразу работать с текстом запроса.
-
Считаем близость между эмбеддингами товара (название, описание, характеристики) и эмбеддингами поисковых запросов, чтобы оценить релевантность товара запросу. Можно работать как с эмбеддингами отдельных полей карточки, так и с усредненным эмбеддингом (Average или Weighted Average, если поля имеют разные веса).
-
Анализируем, какие части текста карточки (название, описание) нужно изменить, чтобы увеличить релевантность поисковым запросам.
-
(опционально) Оптимизируем карточку, чтобы ее увидели как можно больше покупателей: например, генерируем новое описание с помощью LLM или заполняем недостающие характеристики.
Таким образом карточку можно адаптировать под конкретные поисковые запросы, чтобы в конечном счете она ранжировалась среди подходящей целевой аудитории.
Настройка рекламных кампаний
Проблема:
Реклама - это основной способ продвижения товара. Но рекламировать товар где попало - это деньги на ветер. Так можно сжечь рекламный бюджет, не получив желанных заказов. Поэтому эффективная реклама начинается с правильного выбора поисковых запросов, по которым потенциальные клиенты будут видеть товар.
Как же найти запросы, наиболее релевантные товару?
Решение:
Если в предыдущем примере мы оптимизировали карточку под запросы и целевую аудиторию, то здесь задача обратная - среди множества поисковых запросов найти те, что подходят для запуска рекламы.
-
Создаем общий эмбеддинг товара.
-
(опционально) Находим ближайших конкурентов (см. пункт - Поиск ближайших конкурентов)
-
(опционально) Формируем список запросов, по которым ранжируются конкуренты, чтобы сократить область поиска и повысить точность.
-
Считаем близость между эмбеддингом товара и эмбеддингами поисковых запросов, чтобы найти наиболее релевантные. Важно, чтобы все используемые эмбеддинги были построены одной моделью и имели одинаковую размерность, иначе сравнение не будет корректным.
Эти и многие другие задачи на маркетплейсах могут быть реализованы благодаря грамотно выстроенной системе эмбеддингов.
Подводим итоги
В этой статье мы поговорили о том, как превратить сырые данные о товарах на маркетплейсах в полезные эмбеддинги, а также рассмотрели несколько примеров их применения на практике.
Хорошая система векторизации — это основа успеха для множества аналитических инструментов. Неважно, идет ли речь о маркетплейсах, рекомендательных системах или поисковых движках — качественные эмбеддинги позволяют превращать хаотичные данные в точные и полезные инсайты. Наверняка, это не оптимальный и не единственно возможный путь решения поставленных задач. Как вы подошли бы к этому вопросу? Давайте обсудим в комментариях.
В следующих статьях я собираюсь рассказать и о других любопытных проектах, над которыми работает МПСТАТС. Например, как мы делаем прогноз продаж для 15 000 категорий товаров на Wildberries, как выделяем важное среди миллионов отзывов покупателей без LLM и как разработали формулу регрессии покупательского трафика в выдаче на маркетплейсах.
Спасибо за внимание!
Список литературы / референсов / полезных материалов:
Автор: istarun