Меню

Fine-tune Qwen3 Embeddings для класифікації категорій товарів

Fine-tune Qwen3 Embeddings для класифікації категорій товарів

Ми взяли розмічений корпус товарів із 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 — фактично, гігантську «таблицю товарів» з метаданими. Нам це ідеально підійшло: корпус надходить майже повністю розміченими даними завдяки вже проставленим категоріям. Ми використовуємо їх як таргет для навчання.

Для цієї роботи ми сфокусувалися на шести найбільш представлених класах:

  1. Automotive
  2. Baby
  3. Books
  4. Clothing
  5. Jewelry
  6. 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-класова класифікація назв товарів.

Результати:

  1. Macro-F1: 0.8360
  2. Accuracy: 0.8791

Що допомогло:

  1. LoRA-тонка настройка: r=16, alpha=32 — мінімальні витрати пам'яті/ваги, без перепрошивки всього бекбона.
  2. Оптимізатор і LR: adamw_torch, 5e-5, 1 епоха — виявилось кращим серед протестованих сетапів.
  3. Залежності: рекомендуємо Poetry для відтворюваних середовищ і збірок.

Практична продуктивність (CUDA)

Бенчмарк measure_lora_latency.py на одній NVIDIA RTX 5090 (32 GB, FP16) після 5 прогрівочних батчів і на 100 000 нових заголовків показав:

  1. Затримка:3.3–3.9 мс/заголовок при розмірах матчей: 16/32/64/128
  2. Найкращий thred-off: bs=32 — ~299 заголовків/с при latency < 4 мс
  3. Масштабування: при bs=128 затримка все одно < 4 мс

На практиці це означає: один «доступний» GPU тягне як офлайн-чистку каталогу, так і онлайн-інференс у реальному часі.

Як повторити у себе

  1. Дані: завантажте LSPC V2020 з сайту Web Data Commons і запустіть build_lspc_dataset.py.
  2. Модель: оберіть відповідний розмір Qwen3-Embedding (0.6B достатньо для старту).
  3. Тонка настройка: застосуйте LoRA з конфігом r=16, alpha=32, оптимізатор AdamW; для початку достатньо 1 епохи.
  4. Управління залежностями: Poetry для чистих середовищ і фіксованих версій.
  5. Валідація: метрики macro-F1 і accuracy по валідаційній вибірці з тих же шести класів.

Що в підсумку

  1. Величезна віддача від донавчання: десятки мільйонів товарних заголовків із LSPC «перебудували» Qwen3-Embedding у доменно-обізнаний векторизатор з 0.836 macro-F1 — без переписування повних ваг.
  2. Реальний час на одній карті: 615M-LoRA-чекпойнт дає ~300 заголовків/с при 3–4 мс на RTX 5090 — достатньо як для бек-процесу, так і для стрімінгу.
  3. Plug-and-play для команд: чекпойнти, скрипти навчання та бенчмаркінга — публічні; можна міняти категорії, мови та фіди без збірки моделі «з нуля».

У двох словах: беремо відкриті LLM-ембеддинги + дуже великий, доступний датасет — отримуємо виробничу класифікацію товарів з мінімальними витратами та без ліцензійних обмежень.

Корисні посилання

  1. WDC Large-Scale Product Corpus (V2020):описання та завантаження.
  2. Qwen3 Embedding (arXiv) + технічний звіт PDF:архітектура, пайплайн, slerp-мерджинг.
  3. Блог релізу Qwen3-Embedding:огляд моделей, розміри, задачі.
  4. MTEB Leaderboard:актуальні позиції ембеддинг-моделей.
  5. LoRA (оригінальна стаття):базова техніка легкої адаптації.
  6. Poetry (офіційна документація):відтворювані середовища й залежності.

Якщо ви робите щось схоже, напишіть — давайте обміняємося досвідом.

Коментарі