Fine-tune Qwen3 Embeddings для классификации категорий товаров. llm.. llm. lora.. llm. lora. Natural Language Processing.. llm. lora. Natural Language Processing. qwen3.. llm. lora. Natural Language Processing. qwen3. Машинное обучение.. llm. lora. Natural Language Processing. qwen3. Машинное обучение. языковая модель.

Мы взяли размеченный корпус товаров из 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 обучает свою линейку в три стадии:

  1. Крупномасштабный weak-supervision pre-training (~150M пар): пары синтезируются самой Qwen3 с контролем языков, типов запросов и сложности.

  2. Супервайз-дообучение на качественных данных (≈19M пар): смесь больших созданных людьми датасетов + отфильтрованных синтетических пар.

  3. Слияние чекпойнтов (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-эмбеддинги + очень большой, доступный датасет — получаем производственную классификацию товаров с минимальными затратами и без лицензионных ограничений.

Полезные ссылки

Если вы делаете что-то похожее, напишите – давайте обменяемся опытом.

Автор: aufklarer

Источник

Rambler's Top100