Часть посвящена фактическому созданию модели машинного обучения, первая часть здесь посвящена пониманию данных, предварительной обработке и анализу данных.

Описание проблемы :

Мы стремимся создать API категорий продуктов, который использует машинное и глубокое обучение для прогнозирования возможных категорий/классов для любого предоставленного имени продукта и его описаний. Проблема рассматривается для домена электронной коммерции, и набор данных, используемый для обучения наших моделей, будет содержать некоторые продукты и их помеченные категории.

Конвейер машинного обучения:

Для решения задач с несколькими метками у нас в основном есть подходы:

  1. Двоичная классификация: эта стратегия делит проблему на несколько независимых задач бинарной классификации. Он напоминает метод «один против остальных», но каждый классификатор имеет дело с одной меткой, что означает, что алгоритм предполагает, что они взаимоисключающие.
  2. Многоклассовая классификация. Ярлыки объединяются в один большой двоичный классификатор, который называется powerset. Например, имея цели A, B и C с 0 или 1 в качестве выходов, мы имеем A B C -> [0 1 0], в то время как преобразование бинарной классификации обрабатывает его как A B C -> [0] [1] [0 ].

Разделение данных

Следующим шагом после предварительной обработки данных, преобразования их в форму, которую могут понять модели машинного обучения, является разделение их на обучающий/тестовый набор.

Посмотрите, как информационный столбец выбирается в качестве независимой переменной, также обозначаемой X, а этикетки продуктов рассматриваются как зависимая переменная y.

Настоятельно рекомендуется использовать TF-IDF, очень распространенный алгоритм для преобразования текста в осмысленное представление чисел, которое используется для соответствия машинным алгоритмам прогнозирования. Работу TF-IDF можно изучить здесь.

Метод бинарной классификации:

Сначала мы воспользуемся методом бинарной классификации, который также был объяснен выше. Ниже вы можете увидеть, как мы создаем отдельный классификатор для отдельной категории товаров, в машинном обучении этот прием называется один против всех. Мы использовали простую модель линейной регрессии в качестве модели классификации одного продукта. Стоит попробовать и другие модели: Naive Bayes, SVC, Random Forest.

Используя приведенный выше код, мы создаем классификаторы для каждой категории продуктов, распечатываем их индивидуальную точность, AUC ROC и общую точность модели как мультиклассификационную модель.

Приведенный ниже код представляет собой API, который берет название продукта и его описание, выполняет необходимую предварительную обработку и преобразование данных, необходимых для соответствия моделям, и, наконец, создает прогнозы для каждой обученной простой модели линейной регрессии. Если отдельные модели предсказывают его как 1, эта категория продуктов считается вероятным классом для этого продукта.

Давайте проверим несколько продуктов и попытаемся предсказать их возможные категории.

Модели, основанные на глубоком обучении:

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

Эта модель обучена для 30 эпох, а потери и AUC показаны ниже.

Модель предоставила несколько достойных прогнозов по новым данным, которые можно увидеть ниже.

Но тем не менее мы можем улучшить производительность этой модели нейронной сети, используя более мощную технику, называемую сверткой, которая довольно популярна для изображений. Модель на основе свертки разработана ниже.

Эта модель обучена для 30 эпох, и ее производительность в течение эпохи довольно стабильна по сравнению с предыдущей моделью.

Эта модель обеспечивает более конкретные прогнозы по сравнению с предыдущей, но ее все же можно улучшить с помощью мощной модели LSTM и на основе перчаток.

Наконец, мы можем использовать этот API как REST API, который может выглядеть примерно так:

GET /product/categoryPrediction
{
  "name":"product name",
  "description":"product description"
}

Я также приложил несколько прогнозов окончательной модели на основе LSTM+ Glove, которая выглядит наиболее стабильной и наименее переоснащенной по сравнению с другими более старыми моделями.