Мы взяли размеченный корпус товаров из Web Data Commons, дообучили Qwen3 Embedding с помощью LoRA и получили лёгкий чекпойнт на ~615M параметров, который сопоставляет «сырые» названия товаров с 6 верхнеуровневыми категориями с результатом macro-F1 = 0.836, может работать в реальном времени на одной видеокарте. Код доступен в гитхабе так же английская версия этого поста.
Почему именно Web Data Commons и зачем это e-commerce
Большая часть веб-страниц с товарами уже богата разметкой (title, brand, GTIN, price, category), потому что поисковики поощряют структурированные данные. Проект Web Data Commons извлекает такие страницы из Common Crawl и публикует как Large-Scale Product Corpus — фактически, гигантскую «таблицу товаров» с метаданными. Нам это идеально подошло: корпус приходит почти полностью размеченными данными благодаря уже проставленным категориям. Мы используем их как таргет для обучения.
Для этой работы мы сфокусировались на шести самых представленных классах:
-
Automotive
-
Baby
-
Books
-
Clothing
-
Jewelry
-
Shoes
Подготовку данных автоматизирует скрипт build_lspc_dataset.py, который работает с архивом lspcV2020.zip из WDC. Для первичного знакомства есть скрипт с различными статистиками по этим данным. Подробности по датасету можно найти на странице корпуса.
Модель: Qwen3 Embedding и почему она «зашла»
Мы используем семейство Qwen3 Embedding — специализированные модели для извлечения эмбеддингов и reranking. Согласно техническому отчёту, Qwen3-Embedding построены на LLM-бэкбоне Qwen3 (0.6B / 4B / 8B), проходят многостадийное обучение и занимают верхние строчки на лидборде MTEB (масштабный бенчмарк эмбеддингов).
Почему это важно для e-commerce: эмбеддинги Qwen3 «знают» бренды, синонимы и отраслевой жаргон. Даже короткие и неоднозначные названия («air max 270 black 42») транслируются в вектор, где близость отражает смысл, а не совпадение слов. Это делает простую линейную «шапку» поверх эмбеддингов удивительно точной.
Как работают эмбеддинги в классификации
Мы подаём название товара, добавляем в конец специальный токен [EOS] и забираем скрытое состояние последнего слоя в позиции этого токена — это и есть эмбеддинг. При желании можно конкатенировать краткую инструкцию и сам запрос, чтобы направить модель под конкретную задачу (инструкционные эмбеддинги). Размеры в семействе — 0.6B, 4B и 8B, выбираются по балансу «скорость/качество». Детали подхода — в отчёте Qwen3-Embedding.
Как Qwen3 был обучен
Команда Qwen3 обучает свою линейку в три стадии:
-
Крупномасштабный weak-supervision pre-training (~150M пар): пары синтезируются самой Qwen3 с контролем языков, типов запросов и сложности.
-
Супервайз-дообучение на качественных данных (≈19M пар): смесь больших созданных людьми датасетов + отфильтрованных синтетических пар.
-
Слияние чекпойнтов (slerp): даёт устойчивый прирост и лучшую переносимость знаний.
Наши эксперименты на товарах
Задача: 6-классовая классификация названий товаров.
Результаты:
-
Macro-F1: 0.8360
-
Accuracy: 0.8791
Что помогло:
-
LoRA-тонкая настройка: r=16, alpha=32 — минимальные затраты памяти/веса, без перепрошивки всего бэкбона.
-
Оптимизатор и LR: adamw_torch, 5e-5, 1 эпоха — оказалось лучшим среди протестированных сетапов.
-
Зависимости: рекомендуем Poetry для воспроизводимых окружений и сборок.
Практическая производительность (CUDA)
Бенчмарк measure_lora_latency.py на одной NVIDIA RTX 5090 (32 GB, FP16) после 5 прогревочных батчей и на 100 000 новых заголовков показал:
-
Задержка: 3.3–3.9 мс/заголовок при размере матчей: 16/32/64/128
-
Лучший трэд-офф: bs=32 — ~299 заголовков/с при latency < 4 мс
-
Масштабирование: при bs=128 задержка всё равно < 4 мс
На практике это означает: один «доступный» GPU тянет и офлайн-чистку каталога, и онлайн-инференс в реальном времени.
Как повторить у себя
-
Данные: скачайте LSPC V2020 с сайта Web Data Commons и запустите build_lspc_dataset.py.
-
Модель: возьмите подходящий размер Qwen3-Embedding (0.6B достаточно для старта).
-
Тонкая настройка: примените LoRA с конфигом r=16, alpha=32, оптимизатор AdamW; для начала достаточно 1 эпохи.
-
Управление зависимостями: Poetry для чистых окружений и фиксируемых версий.
-
Валидация: метрики macro-F1 и accuracy по валидационной выборке из тех же шести классов.
Что в итоге
-
Огромная отдача от дообучения: десятки миллионов товарных заголовков из LSPC «перестроили» Qwen3-Embedding в доменно-осведомлённый векторизатор с 0.836 macro-F1 — без переписывания полных весов.
-
Реальное время на одной карте: 615M-LoRA-чекпойнт даёт ~300 заголовков/с при 3–4 мс на RTX 5090 — хватает и на бэк-процессинг, и на стриминг.
-
Plug-and-play для команд: чекпойнты, скрипты обучения и бенчмаркинга — публичны; можно менять категории, языки и фиды без сборки модели «с нуля».
В двух словах: берём открытые LLM-эмбеддинги + очень большой, доступный датасет — получаем производственную классификацию товаров с минимальными затратами и без лицензионных ограничений.
Полезные ссылки
-
WDC Large-Scale Product Corpus (V2020): описание и загрузка.
-
Qwen3 Embedding (arXiv) + техрепорт PDF: архитектура, пайплайн, slerp-мерджинг.
-
Блог релиза Qwen3-Embedding: обзор моделей, размеры, задачи.
-
MTEB Leaderboard: актуальные позиции эмбеддинг-моделей.
-
LoRA (оригинальная статья): базовая техника лёгкой адаптации.
-
Poetry (официальная документация): воспроизводимые окружения и зависимости.
Если вы делаете что-то похожее, напишите – давайте обменяемся опытом.
Автор: aufklarer


