В этом руководстве мы создадим рекуррентную нейронную сеть (RNN) в PyTorch, которая будет классифицировать имена людей по их языкам. Мы предполагаем, что читатель имеет базовые представления о PyTorch и машинном обучении на Python.
В конце этого руководства мы сможем предсказать язык имен на основе их написания. Набор имен, используемых в этом руководстве, можно скачать здесь. Это руководство было адаптировано из официальных документов PyTorch — узнайте больше о реализации из этих документов.
План атаки
- Предварительная обработка данных
- Превращение имен в тензоры PyTorch
- Создание RNN
- Тестирование RNN
- Обучение RNN
- Построение результатов
- Оценка результатов
- Прогнозирование новых имен
- Заключение
Предварительная обработка данных
Как и в случае с любой другой задачей машинного обучения, мы начнем с загрузки и подготовки набора данных. После загрузки набора данных мы замечаем, что внутри папки данных есть папка с именем names
. Он содержит текстовые файлы с фамилиями на восемнадцати разных языках.
Чтобы загрузить все файлы за один раз, мы будем использовать модуль Python, известный как glob
. Модуль glob
находит все пути, соответствующие заданному шаблону, в соответствии с правилами, используемыми оболочкой Unix. Результаты возвращаются в произвольном порядке. Мы будем использовать его для загрузки всех файлов в папке, которые заканчиваются на .txt
.
В настоящее время имена даны в формате Unicode. Однако мы должны преобразовать их в стандарт ASCII. Это уберет диакритические знаки в словах. Например, французское название Béringer будет преобразовано в Beringer.
На следующем этапе мы создаем словарь со списком названий для каждого языка.
Мы можем просмотреть первые пятнадцать имен во французском словаре, как показано ниже.
Новейшие достижения в области глубокого обучения — из источника, которому можно доверять. Подпишитесь на еженедельное погружение во все, что связано с глубоким обучением, подготовленное экспертами, работающими в этой области.
Превращение имен в тензоры PyTorch
При работе с данными в PyTorch мы должны преобразовать их в тензоры PyTorch. Это очень похоже на массивы NumPy. В нашем случае мы должны преобразовать каждую букву в тензор факела. Это будет горячий вектор, заполненный нулями, за исключением 1 в индексе текущей буквы. Давайте покажем, как это делается, а затем преобразуем букву M в горячий вектор.
Чтобы сформировать одно слово, нам нужно будет объединить несколько горячих векторов, чтобы сформировать 2D-матрицу.
Создание RNN
При создании нейронной сети в PyTorch мы используем torch.nn.Module
, который является базовым классом для всех модулей нейронной сети. torch.autograd
предоставляет классы и функции, реализующие автоматическое дифференцирование произвольных скалярных функций. torch.nn.LogSoftmax()
применяет функцию Log(Softmax(x))
к n-мерному входному тензору.
Тестирование RNN
Мы начинаем с создания экземпляра класса RNN и передачи необходимых аргументов.
Мы хотим, чтобы сеть сообщала нам вероятность каждого языка. Для этого мы передадим тензор текущей буквы.
Обучение RNN
Чтобы получить вероятность каждой категории, мы используем Tensor.topk
, чтобы получить индекс наибольшего значения.
Далее нам нужен быстрый способ получить имя и его вывод.
Следующим шагом будет определение функции потерь и создание оптимизатора, который будет обновлять параметры модели в соответствии с ее градиентами. Мы также указываем скорость обучения для нашей модели.
Мы продвигаемся вперед, чтобы определить функцию, которая будет создавать тензоры ввода и вывода, сравнивать окончательный вывод с целевым выводом и, наконец, выполнять обратное распространение.
Следующим шагом является запуск нескольких примеров с использованием этой функции поезда, поскольку мы отслеживаем потери для последующего построения графика.
Построение результатов
Мы строим график результатов, используя pyplot
в Matplotlib. Сюжет покажет нам скорость обучения нашей сети.
Оценка результатов
Мы создадим матрицу путаницы, чтобы увидеть, как сеть работает в разных категориях. Яркие точки на главной оси показывают языки, которые он угадывает неправильно.
Предсказание новых имен
Мы определим функцию, которая будет принимать имя и возвращать вероятные языки, из которых оно принадлежит.
«Ссылка»
Заключение
Если вы хотите узнать больше о PyTorch, есть несколько руководств, вложенных в его официальные документы. Если вы хотите узнать больше о RNN, Брайан Мванги. также написал отличное руководство:
Обсудите этот пост в Hacker News и Reddit.
Примечание редактора. Heartbeat — это онлайн-публикация и сообщество, созданное авторами и посвященное предоставлению первоклассных образовательных ресурсов для специалистов по науке о данных, машинному обучению и глубокому обучению. Мы стремимся поддерживать и вдохновлять разработчиков и инженеров из всех слоев общества.
Являясь независимой редакцией, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по данным и группам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим участникам и не продаем рекламу.
Если вы хотите внести свой вклад, отправляйтесь на наш призыв к участникам. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Comet Newsletter), присоединиться к нам в » «Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и гораздо больше, что поможет вам быстрее создавать лучшие модели машинного обучения.