- Вопрос или проблема
- Ответ или решение
- Классификация продуктов с использованием иерархических категорий на основе многофакторного анализа и нестандартных описаний
- 1. Определение проблемы и целей проекта
- 2. Сбор и подготовка данных
- 3. Моделирование
- 4. Обучение и тестирование модели
- 5. Оценка и оптимизация модели
- 6. Внедрение и мониторинг
- Заключение
Вопрос или проблема
Я хочу начать проект по машинному обучению в своей компании, и для аналитиков затрат большая проблема заключается в классификации продуктов, которые покупатели заказывают для обслуживания, инструментов, сырья и тому подобного, так как описание в заказе является свободным текстом, и люди могут написать практически всё (часто только минимально необходимое для одобрения заказа)
Некоторые важные соображения:
-
Так как компания является глобальной, язык описания является местным (немецкий, испанский, английский, русский, китайский и т.д.)
-
Нет стандарта для структуры предложений
-
Люди могут использовать аббревиатуры
-
Для определённых продуктов покупатели не определяют, является ли часть запасной частью или совершенно новым продуктом
Я читал о библиотеках sklearn для анализа текста, но я действительно новый в алгоритмах машинного обучения (в основном завершил базовые учебные пособия). Большинство примеров предназначены для анализа твитов или жалоб, но я не знаю, с чего начать, если хочу учитывать переменные, кроме текста, такие как количество, цена за единицу, поставщик и другие параметры; и, кроме того, мои категории представляют собой иерархию из четырёх уровней на основе определённых правил (например, если цена за единицу превышает X, она принадлежит категории A)
Пример базы данных может быть следующим:
DESCRIPTION uom Mgroup Provider Category Unit Spend Total Quantity
CATALOG: A6-CJR-45 XRE: N/A C-RING FT A Prov1 31000000 5.1 $5.10 1
Contactor iec, 9a, 24v dc, 50/60hz ( FT3 B Prov2 32131000 82 $164.00 2
Ducto ranurado de 2 x 3, color gris, BAL C Prov1 32131000 24.34 $486.80 20
Modulo de 8 salidas aisladas 5-235 vc ST B Prov2 32131000 254.74 $764.22 3
Selector no-il. plastico 2 pos. mant. ST B Prov3 32131000 6.46 $32.30 5
(ELEC-L2GEW4) TERMINAL TIPO LENGÜETA P SER D Prov2 39120000 3.77 $56.55 15
2 Position Selector Switch - Plastic, M E Prov2 23161500 9.89 $69.23 7
Итак, мой вопрос в том, с чего я мог бы начать свои исследования? Какой алгоритм будет наиболее подходящим для решения этой проблемы?
Спасибо!
Я работаю над аналогичной проблемой, где мы классифицируем 2 миллиона продуктов на около 1000 категорий. Я преобразовал описания продуктов с помощью векторизации tf-idf, а затем использовал SVM для выполнения контролируемой классификации. Есть много оптимизации, которую можно сделать с пакетом sklearn в Python для обработки естественного языка. Кроме того, у меня были трудности, потому что я хотел включить другие признаки, помимо текстовых описаний. В sklearn есть метод объединения для достижения этой цели. Конечная модель была примерно на 90% точной в классификации, но из 1000 классов было довольно много с низкими показателями точности из тестового набора. Это, вероятно, связано с небольшим обучающим набором для этих классов. Так что просто убедитесь, что достаточно обучающих образцов для каждого класса, когда вы строите свою модель.
Ответ или решение
Классификация продуктов с использованием иерархических категорий на основе многофакторного анализа и нестандартных описаний
Ваша задача по классификации продуктов на основе свободного текстового описания с учетом множества параметров является типичной и сложной задачей в области машинного обучения и обработки естественного языка (NLP). Давайте разберем ваш проект по шагам.
1. Определение проблемы и целей проекта
Цель заключается в разработке системы, которая может автоматически классифицировать продукты, исходя из описаний, написанных на разных языках (немецком, испанском, английском, русском, китайском и др.), при этом учитывая разнообразие форматов и структур описаний. Вам необходимо создать иерархическую модель классификации, принимающую во внимание такие параметры, как:
- Описание продукта
- Единица измерения (uom)
- Группа материалов (Mgroup)
- Поставщик
- Категория
- Расходы (Spend)
- Общее количество (Total Quantity)
- Цена
2. Сбор и подготовка данных
Соберите данные в соответствии с приведенным примером, убедившись, что у вас есть достаточно образцов для каждой категории. Вам понадобится выполнить следующие шаги:
- Очистка данных: Уберите лишние пробелы, ненужные символы и приведите текст к единому регистру. Это упростит анализ.
- Обработка текста: Поскольку описания могут быть написаны на различных языках, необходимо использовать библиотеки, поддерживающие многоязычность, такие как
spaCy
илиpolyglot
. - Токенизация и удаление стоп-слов: Разделите текст на слова и удалите распространенные, неинформативные слова (стоп-слова), которые могут исказить результаты.
- Лемматизация: Приведите слова к их базовой форме.
3. Моделирование
3.1 Векторизация текста
Используйте TF-IDF (Term Frequency-Inverse Document Frequency) для представления текстовых данных в числовом формате. Это позволит лучше классифицировать тексты, учитывая важность каждого слова.
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(max_features=5000)
X_text = vectorizer.fit_transform(data['DESCRIPTION'])
3.2 Выбор алгоритма
Для вашей задачи подойдут следующие алгоритмы:
- SVM (Support Vector Machine): Эффективен для задач классификации с высокоразмерными данными, такими как текст.
- Random Forest: Может хорошо работать с разнородными данными и менее чувствителен к выбросам.
- Глубокие нейронные сети: Подходят для более сложных задач, особенно если у вас много данных. Модели на основе LSTM или BERT могут быть полезны.
Для объединения текстовых и числовых признаков используйте метод ColumnTransformer
в scikit-learn
.
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
preprocessor = ColumnTransformer(
transformers=[
('tfidf', TfidfVectorizer(), 'DESCRIPTION'),
('num', 'passthrough', ['uom', 'Mgroup', 'Provider', 'Spend', 'Total Quantity']),
]
)
pipeline = Pipeline(steps=[('preprocessor', preprocessor),
('classifier', SVC())])
3.3 Иерархическая классификация
Создайте иерархическую модель, которая сначала предсказывает верхнюю категорию, а затем уточняет классификацию на нижних уровнях, используя отдельные модели для каждого уровня иерархии.
4. Обучение и тестирование модели
Разделите ваши данные на обучающую и тестовую выборки. Процесс обучения включает в себя оптимизацию гиперпараметров и кросс-валидацию для повышения точности модели. Убедитесь, что вы Balanced Training Dataset, чтобы все категории были представлены.
5. Оценка и оптимизация модели
Используйте метрики, такие как точность (accuracy), полнота (recall) и f-мера (F1 Score), чтобы оценить качество вашей модели. Важно контролировать качество классификации для каждой категории, особенно если у вас есть классы с малым количеством образцов.
6. Внедрение и мониторинг
После того как модель будет обучена и протестирована, интегрируйте её в ваши бизнес-процессы. Для мониторинга производительности можно использовать систему логирования, отслеживающую ошибки классификации и позволяющую в дальнейшем улучшать модель.
Заключение
Подход к классификации продуктов – многоуровневый процесс, который требует внимания к деталям и тщательного анализа данных. Комбинируя правильные алгоритмы и методы предобработки, вы сможете создать эффективную систему классификации для вашего бизнеса. Удачи в вашем проекте!