ИИ сервис извлечения характеристик товара из наименования

Всем привет, меня зовут Низамов Илья. Хочу рассказать вам о реализованном ИИ проекте, который является небольшим кусочком более крупного проекта.
Суть большого проекта, анализ среднего чека, который может принести клиент и если чек меньше какой-то суммы, то его должен обрабатывать ИИ бот.
С начала думали, что будем подбирать максимально релевантный товар из базы клиента, но решили, что гораздо проще оценить товар из запроса по медианной цене группы.
И вот как раз для решения группировки товара был разработан этот ии сервис. Проблема была в том, что одинаковые по смыслу товары у разных поставщиков находились в разных группах и часто вообще не по теме.
Проблема была в том, что прайс может меняться очень часто, поставщиков много, и для обработки 20 тыс позиций с помощью LLM, может уйти очень много времени. Хотя даже небольшая локальная модель qwen3-4b отлично справляется с распределением на группы для последующего обобщения.
Я решил использовать готовую модель SpaCy, она работает гораздо быстрее и сейчас 20 тыс позиций обрабатывает менее чем за 1 минуту. С помощью qwen3-4b и схемы Structured Output был подготовлен датасет.
class LabelSpan(BaseModel):
"""
Представление одной размеченной сущности в тексте.
"""
label: Literal["PRODUCT_TYPE"] = Field(description="Категория характеристики")
text: str = Field(
description="Фрагмент исходного текста, соответствующий этой характеристике"
)
start: int = Field(description="Начальный индекс фрагмента в тексте (включительно)")
end: int = Field(description="Конечный индекс фрагмента в тексте (не включительно)")
class ProductDataExtraction(BaseModel):
"""
Схема для извлечения характеристик товара из строки.
"""
text: str = Field(
description="Исходный текст, из которого извлекаются характеристики"
)
labels: List[LabelSpan] = Field(
description="Список извлечённых характеристик с позициями и категориями"
)В данном датасете извлекается только "Категория", но можно обучить извлекать любые характеристики.
Допустим из товара "Пресс гидравлический ПГРс-300 КВТ 49627", можно получить:
{
"type": "пресс гидравлический",
"model": "ПГРс-300",
"brand": "КВТ",
"article": "49627",
}И потом эти данные удобно использовать в любой системе. В 1С можно заполнить характеристики товара, предварительно выполнив нормализацию.
Так же при подготовке датасета рекомендую провести аугментацию данных и перемешивание, иначе нейронная сеть очень быстро переобучается и перестает работать на реальных данных.
На основе подготовленного датасета была обучена модель SpaCy. Доступ к модели был обеспечен с помощью фреймворка FastAPI. Так же были реализованы блоки которые принимают новый прайс и автоматически выполняют разметку, подготовку датасета и обучение сети на новых данных. Что позволяет очень просто дообучать модель на новых данных.
Разработан данный ИИ сервис изначально для работы на локальных моделях, но очень легко перевести на использование любой облачной LLM модели. Подготовка датасета и обучение проводилось на Razen 3600X + NVidia 3080Ti, в течении одного дня, но последующее дообучение делается уже гораздо быстрее.
Сервис собран для работы в Docker, что позволяет развернуть его на любой системе буквально одной командой.
Если у вас появилась какая-то задача, которую можно попробовать решить с помощью ИИ или хотите получить демо доступ к этому сервису, пишите мне в telegram
На этом всё, всем удачи, пока!