Обработка естественного языка — одна из самых сложных областей машинного обучения, в основном из-за сложности и неоднозначности языка. Тем не менее, это также одна из самых успешных областей со многими реальными приложениями, которые мы используем каждый день, такими как поисковые системы, инструменты перевода и многое другое.

Иногда самые сложные задачи решаются простейшими методами. В этой статье я попытаюсь исследовать это утверждение. Итак, я представлю полное решение для Sentiment Analysis на основе простейшей нейронной сети «Персептрон», используя реальную задачу и набор данных: классифицировать, являются ли отзывы о ресторанах на Yelp положительными или отрицательными.

Для этого я разделю эту статью на четыре части следующим образом:

  1. Обзор Yelp DataSet (ссылка)
  2. Словарь и векторизатор (ссылка)
  3. Тренировочная программа (данная статья касается этой части)
  4. Оценка и вывод

Заранее благодарим за вашу поддержку. Если вы решите зарегистрироваться на Medium, вот моя страница подписки: https://abdelkader-rhouati.medium.com/membership

Часть 3. Тренировочная программа

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

Бинарный классификатор

Используемая нами модель является повторной реализацией классификатора персептрона. Для получения более подробной информации вы можете обратиться к предыдущей статье, которую я написал на эту тему по ссылке: «НЛП с использованием учебников по глубокому обучению: понять персептрон». Модель персептрона — это простейшая нейронная сеть, а также одна из старейших. Тем не менее, но остается эффективным в ряде случаев.

Поскольку мы хотим классифицировать каждый отзыв как отрицательный или положительный, наша модель представляет собой бинарный классификатор. Итак, как вы можете видеть в приведенном ниже коде, модель ReviewClassifier наследуется от модели Pytorch и создает один линейный макет с одним выходом для отрицательного или положительного класса. В качестве конечной нелинейности используется сигмовидная функция. Это называется функцией активации, о которой я подробно рассказываю в своей статье НЛП с использованием учебников по глубокому обучению: понимание функции активации.

Код двоичного классификатора:

Настройка на обучение

Для обработки решения на уровне высоты о том, как работает модель, рекомендуется инициализировать объект args для централизованной координации всех решений. Как показано ниже, мы определяем все параметры модели, также называемые гиперпараметрами, о наборе данных и этапах обучения.

Гиперпараметры и опции для бинарного классификатора Perceptron:

Чтобы отслеживать информацию о ходе обучения (индекс эпох, список потерь при обучении, точность обучения, потери при проверке, точность проверки, потери при тестировании и точность тестирования), мы используем небольшую переменную словаря Python следующим образом:

Следующие шаги создают экземпляры следующих элементов

  • Переменная устройства, которая указывает, используем ли мы GPU или CPU.
  • Набор данных, загружающий данные из CSV-файла.
  • Класс векторизатора для преобразования текстовых элементов в числовые векторы
  • Модель классификатора, и мы перемещаем ее на устройство GPU или CPU.
  • «BCEWithLogitsLoss» как функция потерь
  • И оптимизатор ADAM, который не уступает другим оптимизаторам. (См. [3] для более подробной информации)

Код для создания экземпляра:

Тренировочный цикл

Цикл обучения использует объекты из предыдущей фазы для обновления параметров модели, что повышает ее производительность и точность. Цикл обучения состоит из двух основных циклов: внутреннего цикла для мини-пакетов в наборе данных и внешнего цикла, который повторяет внутренний цикл несколько раз, называемых эпохами. Количество эпох определяет, сколько проходов по набору данных должно выполнять обучение.

В верхней части внешнего цикла мы добавляем несколько экземпляров для индекса эпохи и генератора пакетов. Также мы переключаем модель в «режим обучения» с помощью метода «classifier.train()». Это обязательно для обновления гиперпараметров.

Внутренний цикл содержит основные операции, которые обновляют параметры модели. Это делается в 5 шагов:

  • Шаг №1: Градиенты оптимизатора сбрасываются с помощью optimizer.zero_grad().
  • Шаг № 2: Выходные данные — это компьютеры из модели.
  • Шаг № 3: Функция потерь используется для вычисления потерь между выходными данными модели и целью наблюдения (истинные метки классов в наборе данных).
  • Шаг № 4: с помощью «loss.backward()» градиенты распространяются обратно на каждый параметр
  • Шаг № 5: этот последний шаг обновляет параметры модели с помощью метода «optimize.step ()».

Наконец, мы отслеживаем потери и точность каждой эпохи в переменной «train_states».

Вот код маршрутизации обучения:

Перед запуском обучения для следующей эпохи мы добавляем цикл для данных проверки, как показано в коде ниже. Цель состоит в том, чтобы измерить, насколько хорошо модель работает с данными, которые модель не видит во время обучения. Для этого мы делаем параметры модели неизменяемыми с помощью метода «classifier.eval()» и отключаем вычисление потерь и распространение градиентов. Это важно, потому что мы не хотим, чтобы модель корректировала свои параметры относительно данных проверки.

Код для проверки модели:

Вывод:

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

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

Ссылки:

  1. Книга Обработка естественного языка с помощью Pytorch (https://www.amazon.fr/Natural-Language-Processing-Pytorch-Applications/dp/1491978236)
  2. https://pytorch.org/tutorials/beginner/basics/data_tutorial.html?highlight=dataloader
  3. https://medium.com/mlearning-ai/optimizers-in-deep-learning-7bf81fed78a0
  4. https://pub.towardsai.net/nlp-using-deep-learning-tutorials-understand-the-perceptron-f2f20b324e63
  5. https://pub.towardsai.net/nlp-using-deep-learning-tutorials-understand-loss-function-2aaf73ec6c2b
  6. https://pub.towardsai.net/nlp-using-deep-learning-tutorials-understand-the-activation-function-8f62613e32d2