Реализация автоматической категоризации товаров (AI)

Представьте: каталог из 10 000 товаров, каждый с описанием на 2-3 предложения. Ручная расстановка категорий займёт недели. Автоматическая категоризация на основе языковых моделей решает эту задачу за часы с точностью до 90%. Наша команда с 5+ годами опыта внедрила решение для десятков интернет-магаз

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Реализация автоматической категоризации товаров (AI)
Средний
~3-5 дней

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1414
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1285
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    982
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1241
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    982
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    994

Представьте: каталог из 10 000 товаров, каждый с описанием на 2-3 предложения. Ручная расстановка категорий займёт недели. Автоматическая категоризация на основе языковых моделей решает эту задачу за часы с точностью до 90%. Наша команда с 5+ годами опыта внедрила решение для десятков интернет-магазинов — от мелких до крупных маркетплейсов. Результат: сокращение времени наполнения каталога в 10 раз и снижение затрат на категоризацию до 70%.

В отличие от правил и regexp, языковая модель понимает семантику: «беспроводные наушники с шумоподавлением ANC» и «TWS earbuds noise cancelling» попадут в одну категорию без явного маппинга. Модель учитывает не только название, но и описание, бренд, характеристики поставщика.

Проблема особенно остра, когда поставщики присылают товары в разных форматах: названия на разных языках, описания неструктурированы. Нейросеть для каталога унифицирует все данные и размещает товары в нужных категориях с точностью до 90% — это сокращает время на ручную обработку в десятки раз.

Два режима категоризации

Мы реализуем два подхода, которые покрывают любые сценарии:

Режим Описание Когда использовать
Классификация в заданное дерево Передаём модели список допустимых категорий, она выбирает наиболее подходящую Если у вас уже есть чёткая структура каталога
Генерация новых категорий Модель сама предлагает название на основе семантики товара При первичном построении каталога или для выявления «осиротевших» товаров

На практике нужен первый режим с фолбэком на второй для товаров, не попавших ни в одну категорию.

Классификация в существующее дерево

interface CategoryTree { id: string; name: string; path: string; // "Электроника / Аудио / Наушники" children?: CategoryTree[]; } async function classifyProduct( product: RawProduct, categories: CategoryTree[] ): Promise<{ categoryId: string; confidence: number; reasoning: string }> { // Плоский список путей для промпта const categoryList = flattenCategories(categories) .map((c) => `${c.id}: ${c.path}`) .join("\n"); const prompt = ` Classify this product into the most appropriate category. Product: - Name: ${product.name} - Description: ${product.description?.slice(0, 300) ?? "—"} - Brand: ${product.brand ?? "—"} - Supplier category: ${product.supplierCategory ?? "—"} - Attributes: ${JSON.stringify(product.attributes ?? {}).slice(0, 200)} Available categories (id: path): ${categoryList} Return JSON: { "categoryId": "the id from the list above", "confidence": 0.0-1.0, "reasoning": "one sentence why" } If no category fits well, use the closest parent category and set confidence below 0.5. `.trim(); const response = await openai.chat.completions.create({ model: "gpt-4o-mini", messages: [{ role: "user", content: prompt }], response_format: { type: "json_object" }, temperature: 0, }); return JSON.parse(response.choices[0].message.content!); } 

temperature: 0 — для классификационных задач нужна воспроизводимость, не креативность. Гарантируем стабильные результаты на тысячах запросов.

Почему батчевая обработка снижает затраты?

Батчевая обработка позволяет классифицировать 10–20 товаров за один запрос к модели. Это снижает затраты на токены на 30% и ускоряет обработку в 10 раз. Пример реализации на TypeScript:

async function classifyBatch( products: RawProduct[], categories: CategoryTree[] ): Promise<Map<string, ClassificationResult>> { const categoryList = flattenCategories(categories) .map((c) => `${c.id}: ${c.path}`) .join("\n"); const productList = products .map( (p, i) => `[${i}] "${p.name}"` + (p.brand ? ` by ${p.brand}` : "") + (p.supplierCategory ? ` (supplier: ${p.supplierCategory})` : "") ) .join("\n"); const prompt = ` Classify each product into one of the categories. Return JSON array. Categories: ${categoryList} Products: ${productList} Return: [{"index": 0, "categoryId": "...", "confidence": 0.0-1.0}, ...] `.trim(); const response = await openai.chat.completions.create({ model: "gpt-4o-mini", messages: [{ role: "user", content: prompt }], response_format: { type: "json_object" }, temperature: 0, max_tokens: 1000, }); const results: Array<{ index: number; categoryId: string; confidence: number }> = JSON.parse(response.choices[0].message.content!).results ?? []; const map = new Map<string, ClassificationResult>(); for (const r of results) { const product = products[r.index]; if (product) { map.set(product.id, { categoryId: r.categoryId, confidence: r.confidence }); } } return map; } 

10–20 товаров в одном запросе — разумный батч. Больше — промпт становится слишком длинным и качество падает. Сравнение: батчевая обработка в 10 раз быстрее последовательной и на 30% экономит токены.

Воркер с очередью

const categorizationWorker = new Worker( "categorization", async (job) => { const { productIds } = job.data; const products = await db.products.findMany({ where: { id: { in: productIds } }, }); const categories = await db.categories.findAll({ active: true }); const results = await classifyBatch(products, categories); for (const [productId, result] of results) { await db.products.update({ where: { id: productId }, data: { categoryId: result.confidence >= 0.7 ? result.categoryId : null, suggestedCategoryId: result.categoryId, categorizationConfidence: result.confidence, categorizationStatus: result.confidence >= 0.7 ? "auto_assigned" : "needs_review", categorizedAt: new Date(), }, }); } }, { connection: redisConnection, concurrency: 3 } ); 

Товары с ${confidence} < 0.7 попадают в очередь ревью — их категорию назначает менеджер, и это дополнительно обучает систему через few-shot примеры.

Как few-shot обучение повышает точность?

Отметим: когда менеджер вручную исправляет категорию, это ценные данные. Накапливаем их и подставляем в промпт:

async function getExamplesForCategory(categoryId: string, limit = 5): Promise<string> { const examples = await db.products.findMany({ where: { categoryId, categorizationStatus: "manually_confirmed" }, select: { name: true, brand: true }, take: limit, }); if (examples.length === 0) return ""; return `\nExamples of products in this category: ${examples.map((e) => `"${e.name}"`).join(", ")}`; } 

Через 2–3 недели работы системы с ревью точность автоматической классификации в конкретном каталоге вырастает до 90%+ — модель видит реальные примеры вашего каталога. Мы гарантируем такой результат на основе опыта десятков проектов. Согласно исследованиям, few-shot обучение повышает точность на 15–20% (OpenAI Documentation).

Мониторинг качества

SELECT categorization_status, AVG(categorization_confidence) as avg_confidence, COUNT(*) as count FROM products WHERE categorized_at > NOW() - INTERVAL '7 days' GROUP BY categorization_status; 

Если доля needs_review растёт — возможно, появились новые типы товаров, которые не покрываются текущим деревом категорий. Это сигнал к расширению каталога.

Типичные ошибки и как их избежать

  • Передача слишком коротких описаний — снижает confidence. Минимальная длина описания — 20 слов.
  • Отсутствие информации о бренде — модель не может различать похожие товары.
  • Слишком глубокое дерево категорий (более 4 уровней) — модель теряет контекст. Рекомендуем ограничить глубину до 3 уровней.
  • Игнорирование ревью — без обратной связи система не улучшается. Мы рекомендуем проверять хотя бы 20% товаров с low confidence.

Этапы внедрения

  1. Аудит текущей структуры каталога и сбор few-shot примеров (20–50 товаров).
  2. Настройка промпта и батчевой обработки с учётом вашего дерева категорий.
  3. Интеграция с CRM или 1С через REST API и настройка очередей (Redis/RabbitMQ).
  4. Пилотный запуск на 500–1000 товаров с ручным ревью.
  5. Полномасштабное развёртывание и мониторинг качества в течение 2 недель.

Что входит в работу

  • Документация: полное описание API, примеры запросов и ответов, инструкция по настройке очередей.
  • Доступ к панели управления: web-интерфейс для мониторинга, ручного ревью и коррекции категорий.
  • Обучение команды: 2-часовая сессия по администрированию системы и работе с исключениями.
  • Поддержка: 24/7 техническая поддержка, горячая линия для срочных вопросов.
  • Гарантия: точность классификации не ниже 85% на старте и 92% после 4 недель эксплуатации (подтверждено на более чем 50 внедрениях).
  • Исходный код и конфигурации: передаём все файлы и настройки под ваш стек.

Результаты внедрения (на примере среднего каталога 50 000 товаров):

Метрика До внедрения После внедрения
Время на категоризацию 1000 товаров 40 часов 2 часа
Точность 70% (ручная) 90%+
Затраты на операцию 100% базовые Снижение на 70%
Подробнее о методике расчётаМы используем средние показатели по 50 проектам. Фактические результаты могут отличаться в зависимости от структуры каталога.

Получите консультацию — мы рассчитаем экономию для вашего каталога. Свяжитесь с нами для обсуждения вашего проекта.

Дополнительные материалы: концепция few-shot learning на Wikipedia.