Ми взяли розмічений корпус товарів із 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
- Найкращий thred-off: 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 (офіційна документація):відтворювані середовища й залежності.
Якщо ви робите щось схоже, напишіть — давайте обміняємося досвідом.
Коментарі